XCode の「コード署名 ID」とは何ですか?
それらは証明書ですか?
それらは秘密鍵ですか?
それらはアプリIDですか?
それらはプロビジョニング プロファイルですか?
ターゲット ビルド設定に移動すると、コード署名 ID を求められるので、これを把握する必要があります。
秘密鍵を使用してコードに署名したと思いました。ただし、秘密鍵の名前は表示されません。証明書のリストが表示されます(確かではないと思いますが)。
XCode の「コード署名 ID」とは何ですか?
それらは証明書ですか?
それらは秘密鍵ですか?
それらはアプリIDですか?
それらはプロビジョニング プロファイルですか?
ターゲット ビルド設定に移動すると、コード署名 ID を求められるので、これを把握する必要があります。
秘密鍵を使用してコードに署名したと思いました。ただし、秘密鍵の名前は表示されません。証明書のリストが表示されます(確かではないと思いますが)。
iOS アプリケーションのデバイス ビルドを作成しようとすると、すぐに非常に深くなり、よく頭痛の種となるトピックにたどり着きました。最初に、コード署名プロセスに関連する各用語について少し構造を説明します (あなたと、後でこの質問に出くわした人のために)。それから、主な質問に移ります。
コードサインの用語
iOS デバイス ビルドのコード署名フェーズは、アプリケーション実行可能バイナリ自体、埋め込まれたメディア アセット (ボタン テクスチャ、カスタム アートワーク、フォントなど) を含む、アプリケーション内のデータの特定の配置を暗号で署名して保護するプロセスです。 )、およびアプリケーションに関する一連のメタデータであり、アプリケーションのデータの一意の「拇印」を表します。この拇印は、ユーザーのデバイスに配信されるとき、またはユーザーの iOS デバイスで実行されるときに、アプリケーションが改ざんされないようにするために Apple と iOS によって使用されるものです。これを可能にするために、開発者は Apple に登録し、App Identifier をセットアップし、開発および配布証明書を要求し、一連のテスト デバイスを登録し、最後に開発作業のためのプロビジョニング プロファイルを要求する必要があります。
開発者が生成したアプリをデバイスにインストールできるかどうかを判断するのは、このファイルの存在と拇印チェックです。これには、「誰が」(証明書)、「何を」(AppID)、「どこで」という概念が含まれているためです。 ' (どのデバイス)。
よし、わかった…さて、このCode Sign Identityのことはどうする?
個々のビルド ターゲットのビルド設定のコンテキストでは、コード サイン IDという用語は、開発者のマシンのキーチェーンにインストールされている証明書の共通名を指します。Xcode ビルド設定では、開発者が CodeSign に使用する 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 つの公開鍵と秘密鍵の両方を持っていることを意味します。このステータスが緑以外の場合は、現在の公開鍵/秘密鍵の設定および/またはプロビジョニング プロファイルに問題があります。使用しようとしているプロビジョニング プロファイルのステータスが緑に設定されていない限り、コード署名は機能しません。 . その他の可能なステータス オプションは次のとおりです。
つまずく可能性のあるその他のアイテム
公開鍵と秘密鍵の両方がインストールされていること、およびプロビジョニング プロファイルが適切に設定されていることを確認することに関するすべてのニュアンスに加えて、開発者をつまずかせる可能性のあることがいくつかあります。まず、Xcode はプロビジョニング プロファイルを収集し、削除するように指示されるまでそれらを保持します。理論的には、プロビジョニング プロファイルを変更し、新しいバージョンをダウンロードしてインストールするシナリオを除いて、これはそれほど大きな問題ではありません。多くの場合、Xcode は適切なプロファイルを取得しますが、正しく取得できない場合があり、証明書、識別子、およびプロファイル ツールとキーチェーンを調べて、何が起こっているのかを把握しようと何時間も費やします。
提案 1:プロビジョニング プロファイルの新しいバージョンをインストールする場合は、古いバージョンを削除して、Xcode が決定を下さなければならない状況にならないようにします。
開発証明書または配布証明書を再発行すると、同様のことが発生する可能性があります。ほとんどの場合、Xcode はビルド中にあいまいな証明書に関する警告をトリガーします。
提案 2:ビルド中のあいまいさの警告に注意してください。これは、ビルド基準を満たす古い証明書が浮かんでいて、誤って使用されてビルドの問題が発生する可能性があることを意味します。
提案 3:キーチェーンで証明書を扱っているときはいつでも、「iPhone 開発者: ...」または「iPhone ディストリビューション: ...」の赤い「X」が付いた証明書を探してください。これは、証明書の有効期限が切れているか、取り消されていることを示しています。いずれにせよ、この公開鍵 (および潜在的にリンクされた秘密鍵) は、ビルド目的では使用できず、削除できます。
最後に、Code Sign Identity 設定には、「Automatic Profile Selector」として表示されるオプションもあります。多くの場合、ビルド ターゲットの設定から AppID を自動的に検索し、その AppId に一致し、公開鍵と秘密鍵の両方を持つ証明書を含むプロビジョニング プロファイルを探すため、このオプションを使用することをお勧めします。 . 一部のカスタム ビルド環境では、このオプションを使用できない場合があり、最初の画像のデモンストレーション設定のように、固定された特定のオプションのいずれかを使用する必要があります。固定オプションを使用する場合は注意してください。プロビジョニング プロファイルを更新するたびに、新しいバージョンに一致するようにコード署名 ID ビルド設定も更新する必要があります。
重要ポイント
ビルド構成がうまくいきますように。他に質問がありましたらお知らせください。