XcodeでArchiveを実行したときに「Archive failed」と表示される場合、コード署名、Build Settings、依存ライブラリ、ビルドスクリプト、Release構成などに問題がある可能性があります。Archiveは通常のDebugビルドとは異なる設定を使うため、普段は実行できるプロジェクトでも失敗することがあります。
主な原因
- Release構成のBuild Settingsに誤りがある
- Signing & Capabilitiesの証明書やProvisioning Profileが一致していない
- CocoaPodsやSwift Package Managerなどの依存関係に問題がある
- Run Script Build PhaseがArchive時に失敗している
- Frameworkやライブラリの検索パスが正しくない
- Debugでは使える設定やファイルがReleaseでは参照できない
代表的な発生状況
Product > Archiveを実行した直後や、App Store Connectへ提出するためのArchiveを作成しようとしたときに発生します。画面上では「Archive failed」とだけ表示されても、実際の原因はReport Navigatorのログ内にある別のエラーです。
確認手順
- Xcode左側のReport Navigatorを開きます。
- 失敗したArchiveのログを選択します。
- 赤色で表示されている最初のエラーを確認します。
- Build SettingsでRelease構成の値を確認します。
- Signing & CapabilitiesでTeam、Bundle Identifier、証明書、Provisioning Profileを確認します。
解決方法1:Clean Build Folderを実行する
古いビルドキャッシュが原因の場合は、XcodeのProductメニューからClean Build Folderを実行してから再度Archiveします。
解決方法2:DerivedDataを削除する
キャッシュ破損が疑われる場合はDerivedDataを削除します。
rm -rf ~/Library/Developer/Xcode/DerivedData/*
削除後にXcodeを再起動し、プロジェクトを再ビルドしてからArchiveを試します。
解決方法3:Release構成を確認する
ProjectとTargetのBuild Settingsを開き、DebugとReleaseで設定値が大きく異なっていないか確認します。特にFramework Search Paths、Library Search Paths、Swift Compiler設定、Deployment Targetなどを確認します。
解決方法4:コード署名を確認する
Signing & CapabilitiesでAutomatically manage signingを利用している場合は、正しいTeamが選択されているか確認します。手動署名の場合は、Distribution証明書とProvisioning Profileが対象Bundle Identifierと一致している必要があります。
解決方法5:依存ライブラリを再取得する
CocoaPodsを利用している場合は、Podの状態を更新します。
pod install
pod update
Swift Package Managerの場合は、XcodeからPackage Dependenciesの解決やキャッシュ再取得を行います。
解決方法6:Run Script Build Phaseを確認する
Crashlytics、CocoaPods、独自スクリプトなどがArchive時に失敗することがあります。Build Phases内のRun Scriptを確認し、入力ファイル、実行権限、パス、環境変数がRelease構成でも有効か確認してください。
コマンドラインで確認する方法
xcodebuildを使うと、GUIより詳細なログを確認しやすくなります。
xcodebuild -workspace YourApp.xcworkspace -scheme YourApp -configuration Release archive
プロジェクト形式の場合は-workspaceではなく-projectを使用します。
注意点
Archive失敗時に表示される最後の行だけを見て対処すると、根本原因を見落とすことがあります。ログを上から確認し、最初に現れた具体的なエラーを基準に修正してください。また、Debugで正常でもRelease固有の設定に問題がある場合があります。
まとめ
Xcodeの「Archive failed」は、Archive処理中に別のエラーが発生したことを示す総括メッセージです。Report Navigatorで最初の具体的なエラーを確認し、Release設定、コード署名、依存関係、Run Script、キャッシュを順番に確認すると原因を絞り込みやすくなります。
