xcodebuildでmacOS向けappファイルをエクスポートすると「破損しているか不完全である可能性があるため開けません」となる場合の確認事項
環境
- Xcode 9.2
- macOS 10.12.6/10.12.7 (Sierra/High Sierra)
現象
自動化のためにxcodebuildを使い,アーカイブとmacOS向けのappファイルのエクスポートをしたところ,appファイルを開いた時に「アプリケーション”XXX.app”は、破損してるか不完全である可能性があるため開けません。」とエラーダイアログが表示されました.(言語設定が英語の場合「You can’t open the application “XXX.app” because it may be damaged or incomplete.」)
コマンドはこちらを参考に,次のように行っていました.
$ xcodebuild -scheme ExportTest archive -archivePath build/ExportTest.xcarchive
$ xcodebuild -exportArchive -archivePath build/ExportTest.xcarchive -exportPath build/ExportTest.app -exportOptionsPlist export-options.plistできあがったappファイルはアイコンに一時停止アイコンがかかったような感じで壊れていることがわかります.
原因
xcodebuildコマンドの-exportPathにappファイルのパスを指定していたのが問題でした(素直に参考元のコマンドを使わず勝手に変更してしまっていました・・・.)
このパラメタは エクスポート先ディレクトリ名 を指定する必要がありました.
つまり,上記の間違ったコマンドでエクスポートしたことで,次のようなディレクトリ構成になってしまっていました(ExportTest.appディレクトリの下にExportTest.appがエクスポートされた.)
$ tree build
build
├── ExportTest.app
│ └── ExportTest.app
│ └── Contents
└── ExportTest.xcarchive
├── Info.plist
├── Products
│ └── Applications
├── SwiftSupport
│ └── macosx
└── dSYMs
└── ExportTest.app.dSYM解決法
そこで,-exportPathに正しくディレクトリのパスを渡してあげると,その下にアーカイブファイル名+.appというファイル名でアプリケーションファイルがエクスポートされ,開くとちゃんとアプリケーションが起動しました.
$ xcodebuild -exportArchive -archivePath build/ExportTest.xcarchive -exportPath build/pkg -exportOptionsPlist export-options.plist
$ tree build
build
├── ExportTest.xcarchive
│ ├── Info.plist
│ ├── Products
│ │ └── Applications
│ ├── SwiftSupport
│ │ └── macosx
│ └── dSYMs
│ └── ExportTest.app.dSYM
└── pkg
└── ExportTest.app
└── Contentsまとめ
ディレクトリ名が.appになっているのでFinderでは入れ子で.appが内包されていることになかなか気づかず原因特定が困難でした.
xcodebuildを使う場合は-exportPathにエクスポートするappファイルのパスではなく,出力先ディレクトリパスを指定する必要がある点,注意してください.