コードが別のマシンにデプロイされ、Xcode プロジェクトをビルドして正しく署名できるようにする必要がある継続的インテグレーションの状況に合わせて、いくつかのビルド スクリプトを作成しています。これまでのところ、ビルドと .ipa へのアーカイブを実行し、コード署名を検証することができましたが、ITC は次のエラーで失敗しています。このエラーが発生する理由と、この状況を修正するために追加できるものは何ですか?
.ipa のアップロード後の ITC のエラー:
コード署名資格が無効です。アプリ バンドル署名の資格が、プロビジョニング プロファイルに含まれている資格と一致しません。プロビジョニング プロファイルによると、バンドルには許可されていないキー値が含まれています。 "
ターゲット ビルド マシンで、「$HOME/Library/Provisioning Profiles」に .mobileprovision ファイルをインストールし、ビルドがファイルに署名できるように、関連する .cert および .p12 秘密鍵を持つカスタム キーチェーンを作成することに注意してください。xctool が最終的にキーとプロファイルを認識するまで、かなりの手間がかかりました。
私は自分のマシンの Xcode で使用できるのと同じディストリビューション App Store 証明書とプロビジョニング プロファイルを使用していますが、これは正常に機能します。
コードを作成してipaをアーカイブする方法は次のとおりです。
xctool -project ./$PROJECT_NAME.xcodeproj
-scheme $SCHEME
-configuration Release
CODE_SIGN_IDENTITY="${IDENTITY}"
PROVISIONING_PROFILE="${PROVISIONING_PROFILE_UUID}"
OTHER_CODE_SIGN_FLAGS="--keychain $HOME/Library/Keychains/$KEYCHAIN"
clean archive
-archivePath ./$PROJECT_NAME.xcarchive
xcodebuild -exportArchive -archivePath ./$PROJECT_NAME.xcarchive
-exportPath $PROJECT_NAME
-exportFormat ipa
-exportProvisioningProfile "$PROVISIONING_PROFILE_NAME"
また、解凍された ipa アプリが署名されていることを確認することもできます。上記のように署名が行われない場合、それは確かに失敗します。
$codesign --verify -vvvv Payload/Product.app
Payload/Product.app: valid on disk
Payload/Product.app: satisfies its Designated Requirement
編集:
ITC に承認されている XCode を使用してビルド/アーカイブ/エクスポートを行い、その結果をスクリプトによって生成されたビルドと比較しました。
スクリプト化された ipa にファイル archived-expanded-entitlements.xcent がありません。これが問題の根本のようです。
<?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>application-identifier</key>
<string>AAAAAAA.com.domain.Product</string>
<key>keychain-access-groups</key>
<array>
<string>AAAAAAA.com.domain.Product</string>
</array>
</dict>
</plist>