web-dev-qa-db-ja.com

コード署名IDとは何ですか?

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

それらは証明書ですか?

それらは秘密鍵ですか?

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

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

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

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

54
user4951

非常に迅速に深くなり、iOSアプリケーションのデバイスビルドを作成しようとするときに頭痛の種となるトピックに間違いなくヒットしました。まず、コード署名プロセスに関係する各用語を少し構造化して(後で、この質問に出くわした人のために)、主な質問に移ります。

CodeSignの用語

IOSデバイスビルドのコード署名フェーズは、アプリケーション実行可能バイナリ自体、埋め込みメディア資産(ボタンテクスチャ、カスタムアートワーク、フォントなど)を含むアプリケーション内のデータの特定の配置を暗号で署名して保護するプロセスです。 )、およびアプリケーションに関するメタデータのセットであり、アプリケーションのデータの一意の「th印」を表します。このthumb印は、AppleとiOSによって使用され、ユーザーのデバイスに配信されるとき、またはユーザーの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によって暗号的に署名されており、その内容が改ざんされないようになっています。

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

素晴らしい、わかりました...さて、このCode Sign Identityについてはどうですか?

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

Xcode Code Sign Identity

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

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

Keychain Certificate Common Name Example

ご覧のとおり、Xcodeの選択からの黒いテキストは、証明書の[共通名]フィールドと完全に一致するため、Xcodeはこの証明書とそのリンクされた秘密キーをプルして、アプリのコード署名で使用します。

Xcodeの設定をもう一度振り返ると、そのメニュー選択にもテキストが多くあることがわかります。明るいグレーのテキストは、アプリケーションに組み込まれるプロビジョニングプロファイルを示しています。私の設定例の場合、Xcodeは、AppIDが「com.myiosapp。*」に設定されているプロビジョニングプロファイル「MyiOSApp Testing」を取得します。 Xcodeはプロビジョニングプロファイルの隠蔽に非常に貪欲であり、幸いにもオーガナイザーはインストールされているプロビジョニングプロファイルを確認し、そこに含まれる基本データについて理解するのに最適な場所を提供します。再度、最初の画像のXcodeコード署名IDの場合、オーガナイザーの関連するプロビジョニングプロファイルは次のようになります。

Organizer Provisioning Profile

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

Organizer Provisioning Status Options

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

あなたをつまずかせる他のアイテム

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

提案1:プロビジョニングプロファイルの新しいバージョンをインストールする場合、Xcodeが決定を下す必要のある位置に置かれないように、古いプロファイルを削除します。

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

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

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

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

重要なポイント

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

ビルド構成で幸運を祈ります。他にフォローアップの質問がある場合はお知らせください。

129
Bryan Musial