署名のトラブルシューティング
ビルドに資格エラーがある場合
ヒント:自動署名 を使用する場合 (推奨)、Xcode はほとんどのコード署名エラーを修復します。
インストール時または実行時に 資格 エラーが発生した場合は、Xcode でアプリを開発しているときに追加した機能と署名証明書を確認する必要があります。次に、コマンドラインユーティリティを使用してアプリの署名を確認し、アプリに埋め込まれているプロビジョニングプロファイルを調べます。
一部の資格 (たとえば、アプリサンドボックス の資格) は Xcode プロジェクトで設定され、署名に適用されます。他の資格は、アプリ ID に対して有効であり、プロビジョニングプロファイルに含まれています。署名に正しい資格があるかどうかを確認し、不一致が発生した場合は、埋め込まれたプロビジョニングプロファイルを調べます。
これらの手順は Xcode でビルドを調べる方法を示していますが、ユーザに配布するビルドでこれらと同じコマンドを使用できます。Xcode でビルドを作成するには、デバイス上でアプリを起動します。 デバイスを持っていない場合は、スキームメニューから汎用デバイスを選択します。macOS アプリの場合、これらの手順を実行する前に アプリをビルドして実行する だけです。
最初に、機能が有効になっていて、開発プロビジョニングプロファイル に資格が設定されていることを確認します。
- プロジェクトエディタ で、プロジェクト/ターゲットポップアップメニューからターゲットを選択し、[全般(General)] をクリックします。
- 必要に応じて、[署名(Signing)] セクションの隣にある開閉用三角ボタンをクリックして、設定を表示します。
- プロビジョニングプロファイル名の隣にある情報アイコンをクリックして、詳細を表示します。
プロビジョニングプロファイルの内容を含むポップオーバーが表示されます。
- [機能と資格(Capabilities and Entitlements)] セクションで、使用すべき機能が構成されていることを確認します。
- プロジェクトナビゲータ () で、プロジェクトの下の [製品(Products)] グループを開きます。
- [製品] グループで、ビルド (.app 拡張子が付いたファイル) を Control + クリックし、ショートカットメニューから [Finder に表示(Show in Finder)] を選択します。
Xcode は、Finder をビルド場所に開きます。
- ターミナル (/Applications/Utilities にあります) を起動し、次のテキストに続けて空白文字を入力します (Return キーを押さないでください)。
codesign -d --entitlements -
- Finder で、アプリのバイナリ をターミナルにドラッグします。
- Return キーを押します。
たとえば、iCloud キー値保管 が有効になっている iOS アプリの出力には、com.apple.developer.ubiquity-kvstore-identifier の資格キーが含まれています。アプリサンドボックスが有効になっている macOS アプリの出力には、com.apple.security.app-sandbox の資格キーが含まれています。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>G9B5P7QDV2.edu.self.HelloWorld</string>
<key>com.apple.developer.pass-type-identifiers</key>
<array>
<string>G9B5P7QDV2.*</string>
</array>
<key>com.apple.developer.ubiquity-container-identifiers</key>
<array>
<string>G9B5P7QDV2.edu.self.HelloWorld</string>
</array>
<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>G9B5P7QDV2.edu.self.HelloWorld</string>
<key>get-task-allow</key>
<true/>
</dict>
</plist>
署名の資格が構成したものと異なる場合は、埋め込まれたプロビジョニングプロファイルが正しいことを確認してください。まず、埋め込まれたプロビジョニングプロファイルを検索する必要があります。
- プロジェクトナビゲータ () で、プロダクトグループの下のビルドをコントロール + クリックし、ポップアップメニューから [Finder に表示(Show in Finder)] を選択します。。
Xcode は、Finder をビルド場所に開きます。
- Finder で、ビルド (拡張子が .app のファイル) を Control + クリックし、ポップアップメニューから [パッケージの内容を表示(Show Package Contents)] を選択します。
iOS アプリの場合、embedded.mobileprovision というプロビジョニングプロファイルが Finder ウィンドウに表示されます。macOS アプリの場合、埋め込みファイルは embedded.provisionprofile といいます。
または、iOS、tvOS、または watchOS アプリをエクスポートする とき、macOS アプリをエクスポートする とき、または App Store Connect にアプリをアップロードする ときに使用される配布プロビジョニングプロファイルで資格を確認します。
概要シートで、プロビジョニングプロファイルの隣にある矢印をクリックして、Finder に表示します。
- ターミナルで、以下のテキストを入力します (Return キーを押さないでください):
security cms -D -i
- Finder で、ビルドのプロビジョニングプロファイルをターミナルにドラッグします。
- Return キーを押します。
このコマンドは、プロパティリストを XML 形式で出力します。
- 出力で Entitlements キーを検索し、application-identifier キーに正しい資格があることを確認します。
たとえば、以下のリストは、データ保護、ウォレット、iCloud が有効になっている iOS アプリを示しています。iCloud の資格は、com.apple.developer.ubiquity というテキストで始まります。
<key>Entitlements</key>
<dict>
<key>application-identifier</key>
<string>G9B5P7QDV2.*</string>
<key>com.apple.developer.default-data-protection</key>
<string>NSFileProtectionComplete</string>
<key>com.apple.developer.pass-type-identifiers</key>
<array>
<string>G9B5P7QDV2.*</string>
</array>
<key>com.apple.developer.ubiquity-container-identifiers</key>
<array>
<string>G9B5P7QDV2.*</string>
</array>
<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>G9B5P7QDV2.*</string>
<key>get-task-allow</key>
<true/>
<key>inter-app-audio</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>G9B5P7QDV2.*</string>
</array>
</dict>
これらのコマンドの使用方法の詳細については、man ページをお読みください (ターミナルで、man codesign と man security をそれぞれ入力してください)。
以下も見よ
署名証明書または秘密鍵がない場合
中間証明書権限がない場合
コード署名エラーが発生した場合