アーカイブからの書き出しパラメータの調整 〜 Xcode9

はじめに

Xcode9でmanual(プロビジョニングファイルを個別指定する)した場合にCIが通らなくなったことをきっかけに
わかったことをまとめてみます。

ipa書き出し

Strip swift symbolsがXcode9から書き出しの設定画面、plistで指定するようになりました。
plistの場合は指定しない場合にYESになりますが、チェックを外した場合(NO)にすることで問題が起こることが多いようです。

https://forums.developer.apple.com/thread/84655

https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html

The new Strip Swift Symbols (STRIP_SWIFT_SYMBOLS) build setting is enabled by default. It adjusts the level of symbol stripping so that when the linked product of the build is stripped, all Swift symbols are removed. This significantly reduces the size of Swift frameworks. If the lack of Swift symbols causes problems, such as when using dladdr(), this setting can be disabled. To view the exported symbols from file that has been stripped, use xcrun dyldinfo -export instead of nm. (31306055)

Xcodeで

設定できるパラメータが明確になりました。
書き出し対象(method)を決めると不要なパラメータは表示しなくなっています。
スクリーンショット 2017-10-01 0.07.22.png

adhoc,Enterprise

設定できるパラメータが明確になりました。

スクリーンショット 2017-09-30 23.14.56.png

appstore

App Thininng は表示されません。
bitcodeの提出やcrashログ解析のためにsymbolのアップロードをするかなどはこのmethodだけで

スクリーンショット 2017-10-01 1.56.35.png

development

スクリーンショット 2017-10-01 2.23.42.png

xcodebuildで

必要最低限のパラメータは書きで確認しました。
大きく変わったのは、provisioningProfilesの設定が入ったことでした。

アーカイブ

xcodebuild clean archive -archivePath [アーカイブファイルのパスを記載(拡張子は書かない)] -scheme [対象のスキーマを指定] DEVELOPMENT_TEAM=[開発者のID]

アーカイブからの書き出し

xcodebuild -exportArchive -archivePath "アーカイブファイルのPATH" -exportPath "書き出し先を指定" -exportOptionsPlist 使用するplist

adhoc

plist
<?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>ad-hoc</string>
    <key>teamID</key>
    <string>XXXXXXX</string>
    <key>provisioningProfiles</key>
    <dict>
        <key>プロビジョニングファイルに紐づけたBundleIdentifier</key>
        <string>プロビジョニングファイルのName</string>
    </dict>
</dict>
</plist>

appstore

plist
<?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>teamID</key>
    <string>XXXXXXX</string>
    <key>uploadBitcode</key>
    <false/>
    <key>uploadSymbols</key>
    <false/>
    <key>provisioningProfiles</key>
    <dict>
        <key>プロビジョニングファイルに紐づけたBundleIdentifier</key>
        <string>プロビジョニングファイルのName</string>
    </dict>
</dict>
</plist>

さいごに

CIなどで使っているxcodebuildからの書き出しは、使用するXcodeのバージョンによって書き方、使用するパラメータの組み合わせが変わります。複数のXcodeが入っている場合はパラメータ指定を誤ると書き出しできなくなるので、書き出すXcodeに変更をかける時にはCI環境での動作も要確認です。

 参考

https://help.apple.com/xcode/mac/current/#/devde46df08a
https://developer.apple.com/library/content/technotes/tn2339/_index.html