アーカイブからの書き出しパラメータの調整 〜 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）を決めると不要なパラメータは表示しなくなっています。
<img width="739" alt="スクリーンショット 2017-10-01 0.07.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/12362/b59bb529-b641-598f-574c-c717546380d6.png">
### adhoc,Enterprise
設定できるパラメータが明確になりました。

<img width="739" alt="スクリーンショット 2017-09-30 23.14.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/12362/ac7336b6-c1a3-6a70-c60b-409eeaae097c.png">

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

<img width="740" alt="スクリーンショット 2017-10-01 1.56.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/12362/1d678810-fe86-0533-de9b-0bec9ff82553.png">

### development
<img width="736" alt="スクリーンショット 2017-10-01 2.23.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/12362/15106e25-47e0-ed4e-8581-13e6044c0471.png">

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

アーカイブ

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

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

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

### adhoc
```xml: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

```xml: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