XcodeでのMultiple commands produceエラーの解決方法
Xcodeでアプリをビルドする際に「Multiple commands produce」エラーが発生する場合、複数のコマンドが同じ出力ファイルを生成しようとしていることを示しています。このエラーはさまざまな原因で発生する可能性があり、効果的な解決策を見つけることが重要です。
問題の原因
「Multiple commands produce」エラーは、主に以下のような状況で発生します:
- 同じファイルが複数のビルドフェーズに含まれている
- 重複したビルドフェーズが存在する
- ファイル名の重複
- CocoaPodsの設定問題
- プロジェクトファイル(.pbxproj)の不整合
主な解決方法
1. ファイルの重複を確認して削除する
最も一般的な解決策は、ビルドフェーズ内の重複ファイルを削除することです。
手順
- Xcodeでプロジェクトを開く
- ターゲットを選択 → Build Phases → Copy Bundle Resources を開く
- エラーメッセージで報告されているファイルを探す
- 重複しているファイルを選択し、マイナス(-)ボタンで削除する
- 特に
Info.plist
ファイルがここにある場合は削除する
注意
削除するファイルはプロジェクトから完全に削除されるわけではなく、ビルドプロセスから除外されるだけです。必要なリソースを誤って削除しないように注意してください。
2. ビルドフェーズの重複を確認する
ファイルではなく、ビルドフェーズ自体が重複している場合もあります。
# 例: [CP] Copy Pods Resources フェーズが2つ存在する場合
この場合、不要なビルドフェーズを削除することで問題が解決します。
3. ファイル名の重複を解決する
同じ名前のファイルが異なるディレクトリに存在する場合、このエラーが発生することがあります。
例
Manager/Environment.swift
とService/Environment.swift
- 同じ名前のリソースファイルが異なるフォルダに存在する場合
この問題を解決するには、いずれかのファイルの名前を変更します。
4. CocoaPods関連の問題を解決する
CocoaPodsを使用している場合、以下の手順を試してみてください:
# Podのキャッシュをクリーンアップ
pod deintegrate
# Podの再インストール
pod install
# CocoaPodsのバージョン確認
pod --version
# 最新版にアップデート(必要なら)
sudo gem install -n /usr/local/bin cocoapods
通知サービス拡張機能を使用している場合、Podfileで特定の設定が必要になることがあります:
target 'NotificationServiceExtension' do
pod 'GoogleUtilities/AppDelegateSwizzler'
pod 'GoogleUtilities/MethodSwizzler'
pod 'GoogleUtilities/Network'
pod 'GoogleUtilities/NSData+zlib'
pod 'GoogleUtilities/Environment'
pod 'GoogleUtilities/Logger'
pod 'GoogleUtilities/UserDefaults'
pod 'GoogleUtilities/Reachability'
pod 'Firebase/Messaging'
end
5. プロジェクトのクリーニングと再構築
基本的なクリーニング手順を試してみてください:
- Xcode → Product → Clean Build Folder (⇧ + ⌘ + K)
- 派生データの削除: Xcode → Preferences → Locations → Derived Data フォルダを削除
- Xcodeを完全に終了して再起動
6. Flutterプロジェクトの場合
Flutterプロジェクトでこのエラーが発生した場合、iOSディレクトリを再作成すると解決することがあります:
# iOSディレクトリの再作成
rm -rf build ios
flutter create --platforms=ios .
cd ios
flutter pub get
pod install --repo-update
cd ..
flutter run
7. プロジェクト名の競合を解決する
プロジェクト名と使用しているパッケージ名が競合している場合、エラーが発生することがあります。
重要
例: プロジェクト名が GoogleSignIn
で、Googleサインイン用のパッケージ GoogleSignIn
を使用している場合
この場合、プロジェクト名を変更する(例: MyGoogleSignIn
)ことで問題が解決します。
高度なトラブルシューティング
上記の方法で解決しない場合、以下の高度な方法を試してみてください:
プロジェクトファイルの修復
.pbxproj
ファイルに不整合がある場合、以前の正常な状態のバージョンに戻すか、以下の手順で修復します:
- プロジェクトナビゲーターで赤色で表示されているファイルを探す
- これらのファイル参照を削除する
- 正しいファイルを再度プロジェクトに追加する
フォルダ参照の方法を変更する
フォルダをプロジェクトに追加する際、「Create groups」ではなく「Create folder references」を選択すると問題が解決することがあります。
フレームワークの設定変更
Build Settings → Embed Frameworks で Copy only when installing をチェックすると、エラーが解決することがあります。
予防策
このエラーの発生を防ぐために:
- プロジェクトにファイルを追加する際は、既存のファイルとの重複がないか確認する
- ブランチをマージする際は、ビルドフェーズの重複に注意する
- CocoaPodsの設定を変更する際は、Xcodeを閉じてから行う
- 定期的にプロジェクトのクリーニングを行う
まとめ
「Multiple commands produce」エラーは煩わしいですが、系統だったアプローチで解決できます。最も一般的な解決策はビルドフェーズの重複ファイルを削除することです。それでも解決しない場合は、CocoaPodsの再インストールやプロジェクトの再構成など、より詳細なトラブルシューティングを行いましょう。
エラーメッセージを注意深く読み、どのファイルやフェーズが重複しているのかを特定することが、迅速な解決への近道です。