CI (Travis/Jenkins) 環境で xcodebuild (Xcode 8) と自動署名を使用する
質問
Xcode 8 のリリースに伴い、Apple は署名の設定を管理する新しい方法を導入しました。現在、2つのオプションがあります
Manual
と
Automatic
.
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 = Automatic
を
ProvisioningStyle = 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
のどちらかを選択できるようになりました。Automatic
とManual
というように、プロジェクトファイル内で automatic のインスタンスを検索して manual に置き換える必要はありません。 WWDC 2017 セッション 403 What's New in Signing for Xcode and Xcode Server(サイン・フォー・XcodeとXcodeサーバーの新機能
-
手動署名に切り替える
手動署名は、使用されるコード署名の ID とプロビジョニング プロファイルを完全に制御することができます。これはおそらく最もクリーンなソリューションですが、自動署名のすべての利点を失うという欠点もあります。
Xcode 8 でのコード署名についてもっと知るために、私は以下を本当にお勧めします。 記事 と、WWDC2016のセッション 401 - Xcodeのアプリ署名の新情報
関連
-
[解決済み] Xcode 7のエラーです。"Missing iOS Distribution signing identity for ..." (iOS配布用署名IDがありません)
-
[解決済み] Xcode製品 -> アーカイブを無効にする
-
[解決済み] iOSアプリを投稿するためにアーカイブしようとすると、プロビジョニング設定の競合エラーが発生する
-
[解決済み】Xcodeのコマンドラインからの "Build and Archive "について
-
[解決済み】iPhoneアプリの署名。このプロファイルに一致する有効な署名 ID がキーチェーンに見つかりませんでした。
-
[解決済み】Xcode 10: この実行ファイルに有効なプロビジョニングプロファイルが見つかりませんでした。
-
[解決済み】Xcode 4 - 新規インストールしたMacintoshでプロファイルをプロビジョニングすると「Valid signing identity not found」エラーが発生する。
-
[解決済み] Xcode 5: コード署名のエンタイトルメントエラー
-
[解決済み] コマンドラインツールがインストールされているかどうかを確認する方法
-
[解決済み] Xcode 4 - パフォーマンスが悪い
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】iosシミュレーター:アプリを終了する方法
-
[解決済み】Xcode 11でSwiftパッケージの依存関係を削除する方法は?
-
[解決済み] SwiftでNSStringからNSDataを作成する
-
[解決済み] Xcodeで古い/未使用のデータモデルバージョンを削除する方法
-
[解決済み] 開発中のiOSアプリケーションでデバイス上に作成されたファイルをワークステーションで閲覧したいのですが?
-
[解決済み] 特定のブランチからPodをインストールするには?
-
[解決済み] var' パラメータは非推奨で、Swift 3 で削除される予定です。
-
[解決済み] Xcodeのコードのインデントを修正する
-
[解決済み] IBOutletはnilだが、storyboardでは接続されている、Swift
-
[解決済み] Xcode 6 / 7 / 8でデバッグとリリースビルドを切り替えるにはどうしたらいいですか?