Xcodeメモ

便利ショートカット

単語ハイライト状態で Command + D同じ単語を複数選択状態にできる、カーソルも増える
Command + Shift + 矢印キー文の端まで選択できる↑との組み合わせが便利
Command(or Alt) + 矢印キー文の端に移動
範囲を指定して Control + Iインデントを揃える
クラス名をCommand + クリック「Jump to Definition」を選択メソッド一覧の確認

デバッグ操作のショートカットキー

Cmd + Shift + yデバッグエリアの表示/非表示を切り替えます。
Cmd + Y:デバッガを起動/停止します。
F7ステップイン (デバッグ中にコードを一行ずつ実行) します。
F8ステップアウト (デバッグ中に現在の関数から抜け出す) します。
F6ステップオーバー (デバッグ中に次の行へ進む) します。
Ctrl + Cmd + Yデバッグ中に処理を続行します (Continue)。
Cmd + Shift + Dデバッグナビゲータを表示し、選択したビューをハイライトします。
Cmd + 0ナビゲーターエリアを表示します。
Cmd + Opt + 0:ユーティリティーエリアを表示します。
Control + Shift + ↑ or ↓複数行同時入力状態に出来ます。
command + option + enterプレビュー停止(Editorタブ → Canvas)

ビルド成果物の場所

/Users/<あなたのユーザー名>/Library/Developer/Xcode/DerivedData/

MyProject-gfrfhdhfgdsh/

Build/Products/<Configuration>/

Debug

Release

.app

ビルドクリーン

ショートカットShift + Command + K
GUI操作Xcode上部 Product >> Clean Build Folder

アプリケーションのユーザーデフォルト(設定)のリセット

デバッグ実行中にアプリが保存した設定情報(UserDefaults)が原因で問題が発生している場合、これをリセットする必要があります。macOSアプリの場合、ターミナルコマンドを使って実行できます。 

  1. アプリのバンドルID(例: com.yourname.yourappname)を確認します。これはXcodeプロジェクトの Info.plist ファイルやプロジェクト設定で確認できます。
  2. Xcodeでアプリのデバッグ実行を停止します。
  3. ターミナルアプリを開きます。
  4. 以下のコマンドを実行します。com.yourname.yourappname の部分を実際のアプリのバンドルIDに置き換えてください。

プレビューリセット

Macターミナルコマンド、下記を全部実行する。

プレビュー(#Preview)の仕様(コメントアウトしたのにプレビューが止まらなかった)

その現象は、SwiftUIのプレビュー機能の仕様によるものであり、通常はあなたの書いたプログラムにおけるメモリリークの可能性を示すものではありません

#Preview マクロ(以前の PreviewProvider)は、Xcodeが提供する特別な開発ツールであり、通常のアプリの実行とは異なるライフサイクルを持っています。

1. 独立した実行プロセス

Xcodeのプレビューキャンバスで表示されるビューは、メインのアプリとは別の独立したプロセスで実行されています。このプロセスは、ビューのコードが変更されるたびに再コンパイルされ、リフレッシュされます。

2. コード変更の検出

#Preview ブロックをコメントアウトした場合、Xcodeは「プレビューを提供するビュー」の定義が消滅したと解釈します。

  • 直後の挙動: プレビューキャンバスに表示されていたビューは消えますが、ビューの裏側で動いていた実行プロセス自体がすぐに完全に終了するとは限りません。特に時間がかかる非同期処理(task モディファイアなど)が動いていると、そのプロセスはしばらくの間残ることがあります。
  • .task{} の性質.task{} モディファイア内の非同期処理は、そのビューのライフサイクル(Viewが画面から消える時)と結びついて自動的にキャンセルされますが、プレビュー環境自体がクリーンアップされるまでにはタイムラグが発生することがあります。

3. 解決策(プレビュー環境の強制終了)

もしバックグラウンドの処理を完全に停止したい場合は、以下の操作でプレビューの実行環境を強制的に終了・リセットできます。

  1. Xcodeのリスタート: 一番確実な方法です。
  2. プレビューの一時停止と再開: プレビューキャンバス上部にある「ライブアクティビティ」のボタン(再生/一時停止アイコン)を操作して、プレビューセッションをリセットします。
  3. SwiftUI Viewファイルの保存: ファイルを保存し直すことで、リフレッシュがトリガーされることがあります。

メモリリークの可能性について

メモリリークは、通常、クラスインスタンス(特にクロージャ内で self をキャプチャする場合)で循環参照が発生したときに、メモリが解放されずに残り続ける現象です。

今回の現象(コメントアウト後に処理が動く)はプレビュー環境の挙動であり、struct であるViewのライフサイクルや**.task の自動キャンセル**といったSwiftUIの基本的な設計が原因であるため、直ちにメモリリークを疑う必要はありません。

もしメモリリークを心配される場合は、アプリをSimulator実機で実行し、XcodeのDebug Navigator(または Instruments)でメモリ使用量を監視して確認するのが正しいデバッグ方法です。

シミュレータアプリのメニューからリセットする(一番簡単)

  1. Xcodeを起動し、メニューバーから “Xcode” > “Open Developer Tool” > “Simulator” を選択してシミュレータを起動します。
  2. シミュレータアプリが起動したら、シミュレータのメニューバーから “Device” > “Erase All Content and Settings…” を選択します。
  3. 確認ダイアログが表示されるので、“Erase” をクリックします。

これで、選択したシミュレータのデータ(アプリ、設定、キャッシュなど)がすべて初期化されます。

アーカイブ作成

上部タブ Product → Archive

プロジェクト整理

Xcodeの上部ツールバーより「File」->「Open Recent」->「Clear Menu」を選択。これでスタートメニューからプロジェクト名の削除。

Xcodeアンインストール

Xcodeプロビジョニング場所

‘/Users/ユーザー名/Library/MobileDevice/Provisioning Profiles’

Xcode16から↓

~/Library/Developer/Xcode/UserData/Provisioning Profiles/

リソースフォルダをCopy Bundle Resourcesに入れる

ローカライズ、設定した言語をデバッグで確認する方法

Schemeの設定を変更して確認する 

デバイス全体の言語設定を変えることなく、デバッグ実行時のみ特定の言語を指定できます。

  1. Xcode上部のツールバーにあるアプリ名のアイコン(スキーム選択)をクリックし、「Edit Scheme…」を選択します。
  2. 左サイドバーで 「Run」 が選択されていることを確認し、右側の 「Options」 タブをクリックします。
  3. 「App Language」 のプルダウンメニューから、テストしたい言語(例:Japanese, Englishなど)を選択します。
  4. 必要に応じて 「App Region」 も変更し、「Close」を押して閉じます。
  5. アプリを再度実行(Command + R)すると、選択した言語で起動します。

自分向けのビルド(macOS)

✅ 目的:自分専用ビルドを普通にインストールしたい

これはできます。

方法①(最も簡単):Releaseビルドして .app を置く

  1. Xcodeで Scheme を Release にする(Product → Scheme → Run → Info → Build Configuration)
  2. Product > Archive
  3. Organizer から Distribute App
  4. 「Development」または「Copy App」
  5. 出てきた .app を Applications に入れる

これで普通に使えます。

✅ 方法②:Developer ID 署名して配布する(Gatekeeper対策)

自分のMac以外でも開ける形にしたい場合。

手順

  • Signing を Developer ID Application にする
  • Archive → Distribute → Developer ID

すると

  • ダブルクリックで開ける
  • 「開発元が未確認」になりにくい

✅ 方法③:自分用に notarize までやる(完全にストア外配布)

ストア外配布の最終形です。

  • Developer ID署名
  • Notarization
  • stapler

までやると

App Store以外で配るアプリとして完全体

✅ 方法④:TestFlight的にストアと同じにしたい

macOSは iOS の TestFlight のような仕組みがあります。

App Store Connect にアップロードして

  • External TestFlight
  • Internal TestFlight

で配布できます。

これが一番「ストア版に近い」です。

❌ 「App StoreからDLしたのと同じ状態」にしたい場合

これは難しいです。

App Store版は特別で:

  • App Store署名
  • App Storeレシート
  • MASサンドボックス
  • StoreKit課金情報

を持っています。

Xcodeでコピーしただけのアプリは:

  • Development署名
  • レシートなし
  • Sandboxも違う

になります。

ストア版と同じように

  • 同じ保存場所(Application Support / Containers)
  • 同じアンインストール手順
  • 同じバンドル構成
    で動く「自分専用版」を入れたい

重要:保存場所を揃える鍵は「Bundle Identifier」です

macOS のデータ保存場所はアプリ名ではなく

Bundle Identifier(例:com.yourcompany.app)

で決まります。

つまり:

  • ストア版と同じ Bundle ID
    → 保存場所も完全に同じ
  • Bundle ID が違う
    → 保存場所も別物になる

✅ 保存場所の違い

App Store版(Sandboxあり)

非Sandbox版(普通のmacOSアプリ)

✅ ストア版と「完全に同じ保存場所」にしたいなら

条件①:App Sandbox をONにする

Xcode → Signing & Capabilities

  • App Sandbox ✅ ON

これで Containers 配下になります。

条件②:Bundle Identifier をストア版と同じにする

例:

これを一致させると:

  • Application Support
  • Containers
  • Preferences
  • 保存データ

全部同じになります。

⚠️ ただし注意(同時インストール不可)

Bundle ID が同じなら:

  • ストア版と自分版は「同じアプリ扱い」

なので

両方同時に入れることはできません

片方を消すと片方も消えます。

✅ アンインストール方法も同じにしたい

App Sandbox を使う場合:

アプリ削除+Container削除

を削除すれば完全アンインストールです。

✅ 自分専用版をストア版と共存させたい場合

Bundle ID を変える必要があります。

例:

  • Store版
    com.xxx.myapp
  • Personal版
    com.xxx.myapp.personal

この場合保存場所は別になります。

✅ バンドルした素材ファイルは同じ動きになります

これは Bundle ID に関係なく常に:

なので

  • 同梱画像
  • PDF
  • テンプレート

はストア版と同じです。

自分向けのビルド(iOS)

iOSアプリを開発用(Debug)ではなく、本番用(Release)の構成で実機ビルドしてテストするには、Xcodeの「Scheme(スキーム)」設定を変更するのが最もスムーズです。

手順は以下の通りです。

1. ビルド構成を「Release」に変更する

Xcode上での実行(Run)時の設定を、デバッグ用からリリース用へ切り替えます。

  1. Xcode上部のツールバーにある、アプリ名のアイコンをクリックします。
  2. 表示されたメニューから 「Edit Scheme…」 を選択します。
  3. 左側のサイドバーで 「Run」 が選択されていることを確認します。
  4. 中央の 「Info」 タブ内にある 「Build Configuration」 のプルダウンメニューを開き、「Release」 を選択します。
  5. 「Close」を押して閉じます。

2. 実機を選択して実行する

  1. テストに使用するiPhoneをMacに接続します。
  2. Xcode上部のターゲットデバイス選択で、接続したiPhoneを選択します。
  3. Command + R キーを押すか、左上の「▶(Play)」ボタンをクリックしてビルドを開始します。

これで、最適化がかかったリリース用のバイナリがiPhoneにインストールされます。

留意点と確認事項

コード署名(Signing)

リリース用ビルドでも、Xcodeから直接実行する場合は、通常通り「Development」用のプロファイルで署名されていれば動作します。もしApp Store配布用のプロファイル(Distribution)を強制的に指定している場合は、実機で起動できないことがあるため、基本的には 「Automatically manage signing」 にチェックが入っている状態で行うのが確実です。

デバッグ機能の制限

リリース用ビルドには以下の特徴があります。

  • コードの最適化: 実行速度が向上しますが、Xcode上でのデバッグ(ブレークポイントで止める、変数の値を確認するなど)が正確にできなくなる場合があります。
  • ログ出力: print() 文などは動作しますが、デバッグ用のコード(#if DEBUG で囲った部分)は実行されません。

完全にリリースと同じ環境でテストしたい場合

プッシュ通知や課金テストなど、より本番に近い環境(Production環境)を確認したい場合は、Xcodeから直接ビルドするのではなく、TestFlight を利用することをお勧めします。

  1. Xcodeのメニューから Product > Archive を実行。
  2. Distribute App から App Store Connect(TestFlight)へアップロード。

これにより、実際にユーザーが手にするものと全く同じ条件でのテストが可能になります。

リリース用ビルドで、アプリのパフォーマンスや動作にデバッグ時との差がないか入念にチェックしてみてください。

Info.plist

Info.plist の役割

アプリが起動する前や、システムがアプリの情報を参照したいときに、このファイルが読み込まれます。主に以下の情報を管理しています。

  • アプリの基本識別: アプリ名、バージョン番号、ビルド番号、固有のID(Bundle Identifier)など。
  • 権限の要求(プライバシー): カメラ、位置情報、フォトライブラリなどへのアクセス許可をユーザーに求める際の「理由文」の設定。
  • 動作環境の設定: 対応するデバイスの向き(縦・横)、ダークモードの対応可否、背景で実行する機能(バックグラウンド動作)の指定。
  • 外部との接続: 許可する通信ドメインの設定(ATS: App Transport Security)や、カスタムURLスキームの設定。

よく使う重要なキー

開発中によく編集することになる代表的なキーを紹介します。

キーの名前役割
Bundle identifierアプリを世界で唯一特定するためのID。
Bundle version string (short)ユーザーに見えるバージョン(例: 1.0.1)。
Bundle version開発者向けのビルド番号(例: 10)。
Privacy – [機能] Usage Description超重要。 カメラや位置情報を使う理由を記述します。ここを空欄にしたり不適切な説明にすると、App Storeの審査で却下されます。
App Transport Security SettingsHTTP通信を許可するかどうかなど、ネットワークセキュリティの設定。

編集する方法

Xcodeでは、主に2つの方法で編集します。

① Xcodeのプロジェクト設定から(推奨)

プロジェクトを選択し、「Info」タブを開くと、表形式(Property List Editor)で編集できます。

  • 人間が読みやすい名前(例: “Privacy – Camera Usage Description”)で表示されるため、ミスが少なくなります。

+ボタンを押すと下に追加される、そこから選択するか自分で書く。
Command + Z で戻せる

② ソースコードとして直接編集

Info.plistを右クリックして「Open As」→「Source Code」を選択すると、XML形式のコードとして表示されます。

  • <key> と <string> などのタグで構成されており、複数の項目をコピー&ペーストする際に便利です。

このやり方は恐らくテンプレートからファイルを作成する、未確認。

通常のキーチェーン(Keychain)への読み書き・削除だけであれば、Info.plist への記載は不要

生体認証(Face ID)を組み合わせる場合(設定が必要)
もしセキュアなメモアプリなどで、「キーチェーンからデータを取り出す際、Face ID で認証させたい」という場合は、Info.plist への記述が必要になります。

キー: Privacy - Face ID Usage Description(NSFaceIDUsageDescription)
値: 「認証のためにFace IDを使用します」といった説明文

iPadを実機テスト機として追加する

新しいiPadをテスト機として追加する手順は、iPhoneの時とほぼ同様ですが、iOS 16以降ではセキュリティ強化のため「デベロッパモード」の有効化というステップが必須になっています。

以下の手順で進めてください。

1. iPadをMacに接続して信頼する

  1. iPadをMacにケーブルで接続します。
  2. iPadの画面に「このコンピュータを信頼しますか?」というポップアップが表示されたら、「信頼」をタップし、パスコードを入力します。

2. デベロッパモードを有効にする(重要)

iOS 16/iPadOS 16以降、この設定をオンにしないとXcodeからアプリを転送・実行できません。

  1. iPadの 「設定」アプリ を開きます。
  2. 「プライバシーとセキュリティ」 を選択します。
  3. 一番下までスクロールし、「デベロッパモード」 をタップします。
  4. スイッチを オン に切り替えます。
  5. iPadの再起動を求められるので、再起動 します。
  6. 再起動後、画面に「デベロッパモードをオンにしますか?」と表示されるので、「オンにする」 をタップします。

3. Xcodeでデバイスを登録する

Xcodeの「Automatic Signing(自動署名)」機能を使っていれば、接続するだけで自動的にApple Developer Programのデバイスリストに登録されます。

  1. Xcode上部のツールバーにあるデバイス選択メニュー(前回iPhoneを選んだ箇所)をクリックします。
  2. リストの「iOS Devices」セクションに接続した iPadの名前 が表示されているので、それを選択します。
  3. そのまま Command + R で実行します。

「Register Device」と表示された場合

もし実行ボタンを押した際に「Preparing iPad for development」というメッセージや、「Register Device」というボタンが表示された場合は、そのままクリックして進めてください。Xcodeが自動でAppleのサーバーにiPadの識別番号(UDID)を登録し、必要な証明書を更新してくれます。

4. 信頼されていないデベロッパの許可(初回のみ)

アプリがiPadにインストールされた後、起動しようとすると「信頼されていないデベロッパ」とエラーが出る場合があります。その場合は以下の操作を行ってください。

  1. iPadの 「設定」 > 「一般」 > 「VPNとデバイス管理」(またはプロファイルとデバイス管理)を開きます。
  2. 「デベロッパApp」の項目にある、自分の Apple ID(または組織名) をタップします。
  3. 「”(名前)”を信頼」 をタップして許可します。

コメント

タイトルとURLをコピーしました