Pragmatic ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

Xcode8のxcodebuildでarchive時にsignining周りでエラーがでたときの対処法

Xcode8でxcodebuildを使ってコマンドラインでarchiveしようとすると以下のようなエラーがでて失敗するようになりました。

Check dependencies
XXX has conflicting provisioning settings.XXX is automatically signed, but provisioning profile XXX_Adhoc has been manually specified. Set the provisioning profile value to "Automatic" in the build settings editor, or switch to manual signing in the project editor.
Code signing is required for product type 'Application' in SDK 'iOS 10.0'

使っていたコマンドは以下のような感じで、通常の設定では実機で試しやすいようにCode Signing IdentityをiOS Developerにしていて、 コマンドラインで実行するときにDistributionに変更するようにしていました。

xcodebuild \
  -workspace XXX \
  -scheme XXX \
  -configuration XXX \
  -archivePath XXX \
  CODE_SIGN_IDENTITY="iPhone Distribution: XXX (XXXX)" \
  archive

がXcode8ではこれでは通りません

対処法

Xcode8からは自動でsigningを管理する機能がついたため、これをxcodebuildで変更しようとするとコンフリクトしてると怒られるみたいです、エラーを見る限り。。

自分のケースだとコマンドラインでのビルド時にCode Signingを変更したいので、自動管理を諦めます。

よって、まずは、Project SettingのGeneralタブのSigningにある"Automatically manage signingをOFFにします

f:id:yanamura:20160916115640p:plain

これだけでは解決せず、Xcode8から追加されたPROVISIONING_PROFILE_SPECIFIERを設定してやると解決しました。 PROVISIONING_PROFILE_SPECIFIERにはprovisioning profileの名前をいれればOKです。

xcodebuild \
  -workspace XXX \
  -scheme XXX \
  -configuration XXX \
  -archivePath XXX \
  CODE_SIGN_IDENTITY="iPhone Distribution: XXX (XXXX)" \
  PROVISIONING_PROFILE_SPECIFIER=XXX\
  archive