Xcodeメモ

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

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)すると、選択した言語で起動します。

自分向けのビルド

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

これはできます。

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

  1. Xcodeで Scheme を Release にする
  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
  • テンプレート

はストア版と同じです。

コメント

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