1. ホーム
  2. xcode

CI (Travis/Jenkins) 環境で xcodebuild (Xcode 8) と自動署名を使用する

2023-09-04 11:25:20

質問

Xcode 8 のリリースに伴い、Apple は署名の設定を管理する新しい方法を導入しました。現在、2つのオプションがあります ManualAutomatic .

WWDC 2016のコードサイニングに関するセッションによると (WWDC 2016 - 401 - What's new in Xcode app signing) とあります。 を選択すると Automatic の署名をすると、Xcodeが

  • 署名用証明書の作成
  • アプリIDの作成と更新
  • プロビジョニング プロファイルの作成と更新

しかし、Apple がそのセッションで言っていることによると、その Automatic Signing を使用するようです。 Development signing で、Xcode で作成されたプロビジョニングプロファイルに限定されます。

問題は Automatic Signing をCI環境(Travis CIやJenkinsなど)で使おうとしたときに発生します。Automatic を使用し続け、Distribution に署名する簡単な方法を見つけ出すことができません (Xcode では Development と Xcode が作成したプロビジョニング プロファイルを使用するよう強制されるため)。

新しい "Xcode-created provisioning profiles" は、私のマシンでは見つけることができますが、開発者ポータルでは表示されません。 Development でビルドし、エクスポートして Distribution ? をオーバーライドする方法はありますか? Automatic Signing を使用して xcodebuild ?

どのように解決するのですか?

いくつかの方法を試した結果、私がCIサーバで使用できた解決策は以下のとおりです。

  • 開発者証明書と秘密鍵、および自動生成されたプロビジョニングプロファイルを CI 環境に含めます。

使用方法 Automatic signing を使うと、強制的に Developer 証明書と auto-generated provisioning profiles . 開発用の証明書と秘密鍵(Application -> Utilities -> Keychain Access)と自動生成されたプロビジョニングプロファイルをCIマシンにエクスポートするのも一つの方法です。自動生成されたプロビジョニングプロファイルの場所を特定する方法として ~/Library/MobileDevice/Provisioning\ Profiles/ に移動し、すべてのファイルをバックアップフォルダに移動し、Xcodeを開き、プロジェクトをアーカイブします。Xcodeは自動生成された開発プロビジョニングプロファイルを作成し、それらを Provisioning Profiles フォルダーにコピーします。

xcodebuild archive ... が作成されると .xcarchive のために署名された Development . xcodebuild -exportArchive ... のビルドを辞することができます。 Distribution

  • CI環境でのビルド時に「自動」を「手動」に置き換える

を呼び出す前に xcodebuild を呼び出す前に、すべての ProvisioningStyle = AutomaticProvisioningStyle = Manual をプロジェクトファイルに追加します。 sed は、単純な検索と置換に使うことができます。 pbxproj ファイルの簡単な検索と置換に使用できます。

sed -i '' 's/ProvisioningStyle = Automatic;/ProvisioningStyle = Manual;/' <ProjectName>.xcodeproj/project.pbxproj

また、@thelvis は Ruby スクリプト を使ってこれを行う。 xcodeproj gem を使用します。このスクリプトは、変更される内容をよりよく制御することができます。

xcodebuild は、次にコード署名の ID ( CODE_SIGN_IDENTITY )、そしてプロジェクトで設定されたプロビジョニングプロファイル( PROVISIONING_PROFILE_SPECIFIER ). これらの設定は、パラメータとして xcodebuild として提供することができ、それらはプロジェクトで設定されたコード署名IDやプロビジョニングプロファイルを上書きします。

EDIT: Xcode 9で。 xcodebuild には、新しいビルド設定パラメータ CODE_SIGN_STYLE のどちらかを選択できるようになりました。 AutomaticManual というように、プロジェクトファイル内で automatic のインスタンスを検索して manual に置き換える必要はありません。 WWDC 2017 セッション 403 What's New in Signing for Xcode and Xcode Server(サイン・フォー・XcodeとXcodeサーバーの新機能

  • 手動署名に切り替える

手動署名は、使用されるコード署名の ID とプロビジョニング プロファイルを完全に制御することができます。これはおそらく最もクリーンなソリューションですが、自動署名のすべての利点を失うという欠点もあります。

Xcode 8 でのコード署名についてもっと知るために、私は以下を本当にお勧めします。 記事 と、WWDC2016のセッション 401 - Xcodeのアプリ署名の新情報