66

XCode の「コード署名 ID」とは何ですか?

それらは証明書ですか?

それらは秘密鍵ですか?

それらはアプリIDですか?

それらはプロビジョニング プロファイルですか?

ターゲット ビルド設定に移動すると、コード署名 ID を求められるので、これを把握する必要があります。

秘密鍵を使用してコードに署名したと思いました。ただし、秘密鍵の名前は表示されません。証明書のリストが表示されます(確かではないと思いますが)。

4

1 に答える 1

155

iOS アプリケーションのデバイス ビルドを作成しようとすると、すぐに非常に深くなり、よく頭痛の種となるトピックにたどり着きました。最初に、コード署名プロセスに関連する各用語について少し構造を説明します (あなたと、後でこの質問に出くわした人のために)。それから、主な質問に移ります。

コードサインの用語

iOS デバイス ビルドのコード署名フェーズは、アプリケーション実行可能バイナリ自体、埋め込まれたメディア アセット (ボタン テクスチャ、カスタム アートワーク、フォントなど) を含む、アプリケーション内のデータの特定の配置を暗号で署名して保護するプロセスです。 )、およびアプリケーションに関する一連のメタデータであり、アプリケーションのデータの一意の「拇印」を表します。この拇印は、ユーザーのデバイスに配信されるとき、またはユーザーの iOS デバイスで実行されるときに、アプリケーションが改ざんされないようにするために Apple と iOS によって使用されるものです。これを可能にするために、開発者は Apple に登録し、App Identifier をセットアップし、開発および配布証明書を要求し、一連のテスト デバイスを登録し、最後に開発作業のためのプロビジョニング プロファイルを要求する必要があります。

  • App Identifier (または AppID) - AppStore で正確に 1 つの iOS アプリケーションを一意に識別する逆引き DNS スタイルの文字列。
  • 開発および配布証明書- これらは、ドキュメントの発行先である個人の身元を証明するために Apple によって暗号署名されたデジタル ドキュメントです。公開鍵インフラストラクチャに精通している方のために説明すると、証明書自体には公開鍵が含まれており、この公開鍵を使用して署名の整合性を後でプロセスで検証できます。
  • テスト デバイス- iOS ソフトウェアの唯一の承認された標準配布チャネルは、AppStore 経由です。テスト デバイスを登録することにより、開発者は AppStore を回避し、開発およびテストの目的でソフトウェアをデバイスに直接インストールできます。特定のメンバーシップ年度に許可されるテスト デバイスの総数は、100 個のテスト デバイスです。
  • プロビジョニング プロファイル- 3 つの主要コンポーネントを含むドキュメント: 1) 正確に 1 つのアプリ ID、2) 1 つ以上の iOS 開発者証明書、および 3) 指定された iOS アプリを直接インストールできるゼロ以上の登録済みテスト デバイス。この文書の内容は、改ざんできないように Apple によって暗号署名されています。

開発者が生成したアプリをデバイスにインストールできるかどうかを判断するのは、このファイルの存在と拇印チェックです。これには、「誰が」(証明書)、「何を」(AppID)、「どこで」という概念が含まれているためです。 ' (どのデバイス)。

よし、わかった…さて、このCode Sign Identityのことはどうする?

個々のビルド ターゲットのビルド設定のコンテキストでは、コード サイン IDという用語は、開発者のマシンのキーチェーンにインストールされている証明書の共通名を指します。Xcode ビルド設定では、開発者が CodeSign に使用する ID を選択する必要があるオプションのリストとして表示されます。このメニューの各セクションには、多くの情報がエンコードされています。

Xcode コード サイン ID

最初に黒いテキストを見てください - 「iPhone Developer: Bryan Musial (XXXXXXXXXX)」の上の画像から - これは、コード署名に使用される公開鍵と秘密鍵を見つけるために Xcode が実際に使用する主要な項目です。この項目を選択すると、Xcode にキーチェーンに到達し、「共通名」フィールドがその文字列と一致する証明書を見つけようとし、その証明書 (公開鍵を含む) と関連する秘密鍵を取得して、コードサイン操作。

Keychain Access を開き、「iPhone Development: ...」または「iPhone Distribution: ...」証明書のいずれかをダブルクリックすると、Apple が開発者に発行する証明書にエンコードされたすべての情報が表示されます。最初の画像のエントリを選択した場合、Xcode はキーチェーンに到達し、この証明書を取得します (注: 一意の識別情報は X 化または変更されています)。

キーチェーン証明書の共通名の例

ご覧のとおり、Xcode で選択した黒いテキストは証明書の共通名フィールドと正確に一致するため、Xcode はこの証明書とリンクされた秘密鍵をコード署名アプリで使用するために引き戻します。

Xcode の設定をもう一度見てみると、そのメニュー選択にもさらにテキストがあることに気付きます。明るい灰色のテキストは、アプリケーションに組み込まれるプロビジョニング プロファイルを示しています。この設定例の場合、Xcode は、AppID が「com.myiosapp.*」に設定されたプロビジョニング プロファイル「MyiOSApp Testing」を取得します。Xcode はプロビジョニング プロファイルの格納に非常に貪欲です。幸いなことに、オーガナイザーは、インストールされているプロビジョニング プロファイルを調べて、そこに含まれる基本的なデータを把握するのに最適な場所を提供します。最初の画像の Xcode Code Sign Identity についても、関連するオーガナイザーのプロビジョニング プロファイルは次のようになります。

オーガナイザー プロビジョニング プロファイル

「名前」列とアプリ識別子列の末尾は、私の Xcode 設定の明るい灰色のテキストと一致するため、これはコード署名中に使用するために選択されるプロビジョニング プロファイルです。行の最後にある [ステータス] 列に注意することも重要です。この場合、緑色で「有効なプロファイル」を示します。これは、私のキーチェーンが、そのプロビジョニング プロファイルでエンコードされた証明書の少なくとも 1 つの公開鍵と秘密鍵の両方を持っていることを意味します。このステータスが緑以外の場合は、現在の公開鍵/秘密鍵の設定および/またはプロビジョニング プロファイルに問題があります。使用しようとしているプロビジョニング プロファイルのステータスが緑に設定されていない限り、コード署名は機能しません。 . その他の可能なステータス オプションは次のとおりです。

オーガナイザーのプロビジョニング ステータス オプション

  • 有効な署名 ID が見つかりません: このプロビジョニング プロファイルでエンコードされた少なくとも 1 つの証明書の公開キーと秘密キーの両方がありません。オーガナイザーからプロファイルを削除してから、developer.apple.com/ios の Certificates, Identifiers & Profiles ツールに戻り、開発証明書がプロビジョニング プロファイルに含まれていることを確認します。キーチェーン アクセスの証明書の有効期限が切れていないこと、または取り消されていないこと、および公開鍵証明書にリンクされた秘密鍵があることを確認します。
  • プロファイルの有効期限が切れています:プロビジョニング プロファイルの有効期限が過ぎています。このプロビジョニング プロファイルをオーガナイザーから削除し、developer.apple.com/ios の証明書、識別子、プロファイル ツールに再度アクセスして、このプロビジョニング プロファイルを再発行します (実際にまだ必要な場合)。

つまずく可能性のあるその他のアイテム

公開鍵と秘密鍵の両方がインストールされていること、およびプロビジョニング プロファイルが適切に設定されていることを確認することに関するすべてのニュアンスに加えて、開発者をつまずかせる可能性のあることがいくつかあります。まず、Xcode はプロビジョニング プロファイルを収集し、削除するように指示されるまでそれらを保持します。理論的には、プロビジョニング プロファイルを変更し、新しいバージョンをダウンロードしてインストールするシナリオを除いて、これはそれほど大きな問題ではありません。多くの場合、Xcode は適切なプロファイルを取得しますが、正しく取得できない場合があり、証明書、識別子、およびプロファイル ツールとキーチェーンを調べて、何が起こっているのかを把握しようと何時間も費やします。

提案 1:プロビジョニング プロファイルの新しいバージョンをインストールする場合は、古いバージョンを削除して、Xcode が決定を下さなければならない状況にならないようにします。

開発証明書または配布証明書を再発行すると、同様のことが発生する可能性があります。ほとんどの場合、Xcode はビルド中にあいまいな証明書に関する警告をトリガーします。

提案 2:ビルド中のあいまいさの警告に注意してください。これは、ビルド基準を満たす古い証明書が浮かんでいて、誤って使用されてビルドの問題が発生する可能性があることを意味します。

提案 3:キーチェーンで証明書を扱っているときはいつでも、「iPhone 開発者: ...」または「iPhone ディストリビューション: ...」の赤い「X」が付いた証明書を探してください。これは、証明書の有効期限が切れているか、取り消されていることを示しています。いずれにせよ、この公開鍵 (および潜在的にリンクされた秘密鍵) は、ビルド目的では使用できず、削除できます。

最後に、Code Sign Identity 設定には、「Automatic Profile Selector」として表示されるオプションもあります。多くの場合、ビルド ターゲットの設定から AppID を自動的に検索し、その AppId に一致し、公開鍵と秘密鍵の両方を持つ証明書を含むプロビジョニング プロファイルを探すため、このオプションを使用することをお勧めします。 . 一部のカスタム ビルド環境では、このオプションを使用できない場合があり、最初の画像のデモンストレーション設定のように、固定された特定のオプションのいずれかを使用する必要があります。固定オプションを使用する場合は注意してください。プロビジョニング プロファイルを更新するたびに、新しいバージョンに一致するようにコード署名 ID ビルド設定も更新する必要があります。

重要ポイント

  • キーチェーンと Xcode プロビジョニング プロファイルの両方のリストをクリーンで重複排除した状態に保つようにしてください。
  • 証明書とプロビジョニング プロファイルをインストールした後、オーガナイザーがそのプロビジョニング プロファイルのステータスを緑 (「有効なプロファイル」) として報告することを確認します。その他のステータスは、キーチェーンとプロビジョニング プロファイルの間に問題が存在することを示しており、ビルドの実行を検討する前に対処する必要があります。
  • 「自動プロファイルセレクター」を試してみてください。コード署名 ID の設定について考える必要がなければ、チームメイトや自動化されたビルド システムもあなたに満足するでしょう。
  • 自動プロファイル セレクターを使用できない場合は、プロビジョニング プロファイルの新しいイテレーションが作成されるたびに、その設定を常に最新の状態に保つようにしてください。

ビルド構成がうまくいきますように。他に質問がありましたらお知らせください。

于 2013-04-17T21:52:58.793 に答える