Xcode7.0までは、アーカイブからIPAファイルを作成するときはこのようにしてました。
xcodebuild -exportArchive -exportFormat ipa -archivePath ./Archive.xcarchive -exportPath Sample.ipa -exportProvisioningProfile 'XC: com.example'
でもXcode7.1以降でこのコマンド引数で実行すると、
-exportArchive without -exportOptionsPlist is deprecated
の表示がでるようになり、困ったことにこれで作ったipaファイルを altool
でiTunes Connectにバイナリをアップロードすると、以下のつれないお言葉が入ったメールが来てバイナリは弾かれるようになりました。
かならず弾かれるのか?、ほかの理由で弾かれるのか?まではわかりません。ちなみにエラーが来たアプリはObjective-CとSwiftの混在アプリです。
Dear developer,
We have discovered one or more issues with your recent delivery for "xxxxxxxx". To process your delivery, the following issues must be corrected:
Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it.
Once these issues have been corrected, you can then redeliver the corrected binary.
Regards,
The App Store team
もちろんベータ版のOSやXcodeは使っていません。
Xcodeで手作業でアーカイブしアップロードすると弾かれないので、先ほどの deprecated
が気になりますね。
よくみたら、exportArchive
は exportOptionsPlist
がないともうダメって書いてありました。ちゃんと読みましょう(苦笑)
というわけで、まじめに exportOptionsPlist
を指定するようにします。
まずはヘルプで指定するplistの内容をチェックしてみます。なお以下は超意訳なので、間違っていたら指摘おねがいします。
xcodebuild -h
キー | 型 | デフォルト値 | 対象 | 内容 |
---|---|---|---|---|
method | String | "development" | ALL | エクスポートする形式。 app-store , ad-hoc , package , enterprise , development , developer-id
|
teamID | String | アーカイブ時のteamID | ALL | デベロッパポータルのteamを指定 |
uploadBitcode | Bool | true | App Store | パッケージがBitcodeを含む必要があるか? |
uploadSymbols | Bool | true | App Store | パッケージにシンボルを含む必要があるか? |
compileBitcode | Bool | true | non-App Store | Bitcodeから再コンパイルする必要があるか? |
embedOnDemandResourcesAssetPacksInBundle | Bool | true | non-App Store | アプリ内のasset packを使用する場合は true 、URLを指定してダウンロードする場合は false
|
onDemandResourcesAssetPacksBaseURL | String | "" | non-App Store | オンデマンドリソースを使用し、かつembedOnDemandResourcesAssetPacksInBundle が false の場合、ダウンロードするasset packのURLを指定する |
iCloudContainerEnvironment | String | Development | non-App Store |
Production , Development
|
manifest | Dictionary | - | non-App Store | App Thinningのためのdistribution manifestを指定。ここを参照。キーは appURL 、displayImageURL 、fullSizeImageURL
|
thinning | String | none | non-App Store | インストール可能なデバイスを指定。 iPhone7,1 のように指定する。 |
これを踏まえて、iTunes Connectにアップロードするための最低限必要なplistを作ってみます。
(AdHocとかの場合には違う内容になりますので、注意してください。)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>app-store</string>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<true/>
</dict>
</plist>
method
が app-store
で、uploadBitcode
が false
、uploadSymbols
を true
にしています。
このplistを使ってipaを作ってみます。
(アーカイブのパスとかは環境によって変えてください)
xcodebuild -exportArchive -archivePath Archive.xcarchive -exportPath archive -exportOptionsPlist exportOptions.plist
これでarchiveディレクトリにプロジェクト名.ipa
のファイルが作成されます。
実際にiTunes Connectにアップロードしてみます。
'/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool' --upload-app -f xxx.ipa -u ${ITUNES_ID} -p ${ITUNES_PASS}
これでアップロード出来ると思います。
エラーメールが来なければOKです。
念のためアップロードが終わったらTestFlightで実機チェックしてみましょう。