Contents
1️⃣ エラーログの基本的な読み方
| 手順 | 操作内容 | 効果 |
|---|---|---|
| 1 | ビルド失敗後、左サイドバーの ⌘9 → Report Navigator を開く。 | ビルド全体のログが一覧化される。 |
| 2 | 赤字で表示された error: 行をクリック。 |
該当ソースファイルと行番号に自動ジャンプ。 |
| 3 | 右上の Show in Finder を使ってファイルを直接開くか、⌘クリック でエディタへ移動。 |
問題箇所へのアクセスが瞬時に完了。 |
ポイント:Xcode は Issue Navigator と Report Navigator の二段階構造になっています。Issue が「何が起きたか」を示し、Report が「詳細なスタックトレース」になります。両方を併用すると原因特定のスピードが格段に上がります。
2️⃣ ビルド設定とターゲットのチェックリスト
- 対象ターゲットの確認
-
プロジェクトナビゲータでアプリ名 → General タブを開き、
Deployment InfoとSigning & Capabilitiesが期待通りか検証。 -
リンク設定
-
Build Phases > Link Binary With Librariesに必要なフレームワークがすべて列挙されていることを確認。欠けていれば「+」で追加します。 -
共通ビルド設定の統一
Build Settings→Architectures,Swift Compiler – Language,Enable Bitcodeなど、プロジェクト全体とターゲットが同一になるように比較・修正。
参考:Apple の公式ガイド「Managing Build Settings」を随時参照してください。
3️⃣ パッケージ管理ツールのクリーンアップ手順
CocoaPods
|
1 2 3 4 5 6 7 8 9 |
# 1. Pods と設定ファイルの削除 pod deintegrate # 2. ローカルキャッシュクリア rm -rf "${HOME}/Library/Caches/CocoaPods" # 3. 最新リポジトリ取得+再インストール pod install --repo-update |
Swift Package Manager (SPM)
- Xcode の Package Dependencies ペインで対象パッケージを右クリック → Delete → Remove Reference Only。
- メニューバー
File > Packages > Reset Package Cachesを実行。 - 再度
File > Add Packages…から同じ URL を追加し、バージョン範囲を指定してインストール。
備考:
DerivedDataの削除 (rm -rf ~/Library/Developer/Xcode/DerivedData) は、依存関係の破損が疑われるときに併用すると効果的です。
4️⃣ Swift Concurrency(@MainActor・async‑await)で起きやすいエラーと対処法
| 症状 | 主な原因 | 解決策 |
|---|---|---|
Main actor-isolated エラー |
プロジェクトが Swift 5.8 以前に固定されている | Build Settings → Swift Compiler – Language を Swift 5.9 に変更。 |
async/await is only available in Swift 5.5 or newer |
Xcode と CLI ツールのバージョンがずれている | ターミナルで xcode-select -s /Applications/Xcode.app/Contents/Developer を実行し、使用 Xcode を統一。 |
@MainActor の誤用 |
UI 更新をバックグラウンドスレッドで実行している | 必要な箇所だけに限定し、不要なら削除。UI 更新は必ず DispatchQueue.main.async または Task { @MainActor in … } を使用。 |
設定の確認手順(ローカル・CI 両方)
|
1 2 3 4 5 6 |
# Xcode バージョン取得 xcodebuild -version # → Xcode 15.2 # Swift コンパイラバージョン取得 swift --version # → Swift version 5.9 |
注意:Apple は iOS 17 以降で Bitcode を完全にサポートしなくなりました(2024 年の Xcode 15 リリースノート参照)。
Enable Bitcodeは No に設定して問題ありません。
5️⃣ CI 環境での Xcode / Swift バージョン整合性
以下は GitHub Actions 用の最小構成例です。Xcode 15.2 と Swift 5.9 を明示的に指定しています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
name: iOS Build on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: macos-14 # Apple Silicon runner (macOS 14 = Sonoma) steps: - uses: actions/checkout@v4 - name: Set Xcode version run: | sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer xcodebuild -version # 確認出力 - name: Install CocoaPods run: | gem install cocoapods pod repo update - name: Clean DerivedData run: rm -rf ~/Library/Developer/Xcode/DerivedData - name: Build (Debug) run: xcodebuild clean build \ -workspace MyApp.xcworkspace \ -scheme MyApp \ -configuration Debug \ -sdk iphonesimulator \ -destination 'platform=iOS Simulator,name=iPhone 15,OS=latest' \ CODE_SIGNING_ALLOWED=NO # 任意でテスト実行 - name: Run Unit Tests run: xcodebuild test \ -workspace MyApp.xcworkspace \ -scheme MyAppTests \ -destination 'platform=iOS Simulator,name=iPhone 15,OS=latest' |
ポイント解説
| 項目 | 説明 |
|---|---|
macos-14 ランナー |
Apple Silicon の最新 macOS。Xcode 15.2 がプリインストール済み。 |
sudo xcode-select -s … |
CI 内で使用する Xcode バイナリを強制的に統一。ローカルと同じバージョンになるため、バージョンミスマッチが防げる。 |
CODE_SIGNING_ALLOWED=NO |
テストビルド時はコード署名を省略でき、CI が速くなる。実機テストや配布ビルドでは削除して署名を有効化してください。 |
6️⃣ Bundle Identifier(App ID)関連エラーの対処法
重複エラーが出たときの手順
- Bundle Identifier を変更
Signing & CapabilitiesタブでBundle Identifierを編集。例:com.example.MyApp2026→com.mycompany.MyApp2026。- Info.plist の自動更新確認
- Xcode が
CFBundleIdentifierを自動的に上書きするので、手動で修正しなくても OK。 - Apple Developer ポータルの同期
- https://developer.apple.com/account/resources/identifiers/list にアクセスし、同一 ID が未使用か確認。必要なら「+」ボタンで新規登録。
プロビジョニングプロファイルが古いときのリフレッシュ手順
|
1 2 3 4 5 6 |
# Xcode のアカウント情報から最新プロファイル取得 open "x-apple-system://com.apple.preferences.accounts" # 手動で削除したい場合(例: 古い .mobileprovision) rm -rf ~/Library/MobileDevice/Provisioning\ Profiles/*.mobileprovision |
ベストプラクティス:
Automatically manage signingをオンにしておくと、Xcode が必要なプロファイルを自動で生成・更新します。チーム全体で同じ Apple ID(または App Store Connect の権限)を使用することが前提です。
7️⃣ 推奨ビルド設定まとめ
| 設定項目 | 推奨値 | 理由 |
|---|---|---|
| Swift Language Version | Swift 5.9(固定) |
Xcode 15.2 の標準で、Concurrency がフルサポートされる。 |
| Build Active Architecture Only | Debug: Yes / Release: No |
デバッグ時は高速ビルド、リリース時は全アーキテクチャ対応。 |
| Enable Bitcode | No(iOS 17 以降) |
Apple が段階的に廃止しているため、無効化でビルド時間が短縮。 |
| Minimum Deployment Target | iOS 16(最新 OS の 2 バージョン前程度) | 新機能利用と広範なデバイスサポートのバランスが取れる。 |
| Enable Hardened Runtime | Yes(App Store 配布時必須) |
セキュリティ強化と App Store の審査合格率向上に寄与。 |
8️⃣ 実践的チェックリスト & CI スクリプト例
ビルド前のローカル確認項目
- [ ] 正しいターゲットが選択され、
General > Deployment Infoが期待通りか - [ ]
Swift Language Versionが 5.9 に固定されている - [ ]
Enable Bitcodeが No になっている(iOS 17+) - [ ] Bundle Identifier がチーム内で一意かつ Apple Developer ポータルに登録済みか
- [ ] CocoaPods / SPM のキャッシュをクリアし、再インストールしたか
CI 用スクリプト(GitHub Actions)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# .github/workflows/ci.yml に配置 name: iOS Continuous Integration on: push: branches: [ main ] pull_request: jobs: build-test: runs-on: macos-14 steps: - uses: actions/checkout@v4 - name: Set Xcode version run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer - name: Install dependencies (CocoaPods) run: | gem install cocoapods pod install --repo-update - name: Clean DerivedData run: rm -rf ~/Library/Developer/Xcode/DerivedData - name: Build & Test env: CODE_SIGNING_ALLOWED: NO # テストビルドは署名不要 run: | xcodebuild clean test \ -workspace MyApp.xcworkspace \ -scheme MyAppTests \ -destination 'platform=iOS Simulator,name=iPhone 15,OS=latest' \ -derivedDataPath ${{ runner.temp }}/DerivedData |
ポイント:
CODE_SIGNING_ALLOWED=NOにより、テスト実行時のコード署名を省略しビルドが高速化します。リリース用パイプラインではこのフラグを外して正式なプロファイルで署名してください。
まとめ
- エラーログは Issue → Report の二段階で読むと原因特定が迅速になる。
- ビルド設定・ターゲットの不一致が最頻出エラーなので、プロジェクト全体で統一した設定を徹底する。
- 依存関係(CocoaPods / SPM)はキャッシュクリアと再インストールで多くの問題が解決できる。
- Swift Concurrency のエラーは Swift バージョン不整合が根本原因。5.9 に固定し、@MainActor の使用箇所を見直す。
- CI 環境でも Xcode と Swift のバージョンを明示的に指定し、ローカルと同一条件でビルドする。
- Bundle Identifier の重複やプロビジョニングの古さは、Apple Developer ポータルと Xcode の同期で解消できる。
このチェックリストと CI スクリプトをプロジェクトに組み込めば、コンパイルエラーによる開発停止時間を大幅に削減できます。ぜひ日々のビルド前作業に取り入れてみてください。