トラブルシューティング

アプリケーションを開発、テスト、登録、公開する工程では、トラブルシューティングの検討が欠かせません。起こりうる問題を、証明書、プロビジョニング、ビルドおよびコード署名、デバッグの4つに分類し、それぞれの対処法をまとめました。実際に問題が生じたときに、該当する項を参照してください。

証明書に関する問題

証明書が無効または使用不可になっても、再生成する前に、次のような問題がないか検討してください。

コード署名IDが見つからない

署名IDが欠落していれば、Xcodeがその旨を検出します。これは通常、別のMacに移行したときに起こります。「チームプロビジョニングプロファイルを生成する」の手順に従って、署名IDを作成し、チームプロビジョニングプロファイルに追加してください。他のMacから署名IDをインポートする、リセットする、という選択肢もあります。独自にプロビジョニングプロファイルを作成し、自分で管理している場合、開発用証明を失効させればこれも無効になります。「開発者アカウントでプロビジョニングプロファイルを編集する」の手順に従い、生成し直してください。

この問題を回避するため、移行元のMac上で、開発者プロファイルのファイルとして証明書をエクスポートし、これを移行先のMacにインポートしてください(「証明書やプロファイルをエクスポート/インポートする」を参照)。

該当するプロビジョニングプロファイルが見つからない

開発用プロビジョニングプロファイルが欠落している場合、Xcodeはこれを検出し、「General」ペインと「Capabilities」ペインの両方に警告メッセージを表示します。「No matching provisioning profiles found」というメッセージが、「General」ペインの「Team」ポップアップメニューの下に現れた場合、その下の「Fix Issue」ボタンを押してください。「No Devices Registered」ダイアログが現れた場合は、適切なデバイスをMacに接続(「チームプロビジョニングプロファイルを生成する」を参照)した上で、このボタンを押します。Xcodeが問題を解消できない場合は、「IDおよびチームの設定をする」の手順に従い、プロジェクトの設定を確認してください。

Developer ID証明書に用いる秘密鍵が欠落している

Developer IDを失効させる必要があれば、Apple(product-security@apple.com)に連絡してください。あるいは、追加のDeveloper ID証明書を作成(「追加のDeveloper ID証明書を作成する」を参照)して、開発や配布を続ける、という方法もあります。

中間証明書を紛失したため証明書が無効になった

証明書が無効になった原因として、その認証に用いる中間証明書を紛失したことも考えられます。Keychain Accessで証明書を検証(「Keychain Accessを使って確認する」を参照)したとき、緑の円で囲んだチェックマークではなく、赤の丸で囲んだ「X」印と「This certificate was signed by an unknown authority」という文言が現れた場合、中間証明書がなくなっています。システムキーチェーンに「Apple Worldwide Developer Relations Certification Authority」という証明書がない場合は、「誤って削除した中間証明書を登録する」に従って再登録してください。Developer ID証明書に用いる中間証明書は「Developer ID Certification Authority」という名前です。

証明書の信頼性に問題がある

「Keychain Access」で証明書を表示したとき、詳細領域に、緑の円で囲まれたチェックマークではなく、青い円で囲まれた白い「+」が現れる場合、信頼性の問題があります。対処方法については、「Xcodeが証明書を信頼しない」を参照してください。

証明書が期限切れになった

期限切れになった証明書の期限を延ばすことはできません。削除して新たに作成する手順については、「期限切れになった証明書を更新する」を参照してください。

要求がタイムアウトになった

要求がタイムアウトになった旨のダイアログが現れた場合、開発者アカウントの「Certificates, Identifiers & Profiles」セクションが、保守のため停止している可能性があります。後でもう一度やり直してください.

プロビジョニングプロファイルや署名IDがXcodeのメニューに現れない

「Devices」ウィンドウでアプリケーションを配布する場合やプロジェクトエディタで「Code Signing Identity」ビルド設定を行う場合に、プロビジョニングプロファイルまたは署名IDが「Provisioning Profile」にもポップアップメニューにも表示されないことがあります。この場合、Xcode上でプロビジョニングプロファイルをダウンロードしてください(「Xcode上でプロビジョニングプロファイルをダウンロードする」を参照)。

プロビジョニングに関する問題

プロビジョニングに関する問題の多くは、プロビジョニングプロファイルがアプリケーションと対応していないか、無効あるいは期限切れになっているために起こります。

デバイスにインストールしたプロビジョニングプロファイルが無効である

開発用デバイスのプロビジョニングプロファイルが期限切れ、または無効である場合、「デバイス上でプロビジョニングプロファイルを確認して削除する」の手順に従い削除してください。

開発者アカウントのプロビジョニングプロファイルが無効である

失効した証明書や期限切れの証明書が含まれている場合、そのプロビジョニングプロファイルは無効です。また、App IDのエンタイトルメントが変更された場合やApp ID自体が削除された場合にも、プロビジョニングプロファイルが無効になります。無効化されたデバイスが含まれている場合は、開発用プロビジョニングプロファイルまたはアドホックプロビジョニングプロファイルも無効になります。

開発者アカウントのプロビジョニングプロファイルが無効の状態で現れる場合、Xcode上でダウンロードしてください(「Xcode上でプロビジョニングプロファイルをダウンロードする」を参照)。たとえば、開発用証明書を失効させる場合、Xcodeを使って関連するチームプロビジョニングプロファイルを再生成します。

自分で管理しているプロビジョニングプロファイルが開発者アカウントに無効な状態で表示される場合は、削除するか(「プロビジョニングプロファイルを開発者アカウントから削除する」を参照)、編集してください(「開発者アカウントでプロビジョニングプロファイルを編集する」を参照)。

該当するプロビジョニングプロファイルが見つからない

「Your build settings specify a provisioning profile with […] however, no such provisioning profile was found.」という警告が、「General」ペインにある「Team」ポップアップメニューの下に表示された場合、旧版のXcodeから引き継いだ「Provisioning Profile」および「Code Signing Identity」ビルド設定が適切でないかも知れません。

この場合、警告メッセージの下にある「Fix Issue」ボタンを押してください。このボタンをもう一度押す必要があるかも知れません。「Provisioning Profile」ビルド設定は「None」、「Code Signing Identity」ビルド設定は、iOS/tvOS/watchOSアプリケーションの場合は「Automatic」および「iOS Developer」、Macアプリケーションの場合は「Automatic」および「Mac Developer」になるはずです。旧プロジェクトでXcodeが管理していたプロビジョニングプロファイルを使いたい場合は、「Xcodeで管理されるプロビジョニングプロファイルを移行する」を参照してください。

独自の開発用プロビジョニングプロファイルを使っている場合は、「独自のプロビジョニングプロファイルを使用する」を参照して、プロジェクトの設定方法を確認してください。

ビルドおよびコード署名に関する問題

開発中、Xcodeが管理するチームプロビジョニングプロファイルを使っている(「チームプロビジョニングプロファイルの詳細」を参照)場合、コード署名やプロビジョニングに関する問題があれば、Xcodeはアプリケーションをビルドする前に修復しようと試みます。この場合、「Code Signing Identity」ビルド設定を独自に設定してはいないはずです。一方、独自の開発用プロビジョニングプロファイルを使い、このビルド設定を施している場合(「独自のプロビジョニングプロファイルを使用する」を参照)、ここに示されたビルドの問題が起きることがあります。ビルドに失敗する原因として多いのは、コード署名IDが不適切であることです。

Xcodeがプロビジョニングプロファイルを見つけられない

次のエラーメッセージは、App IDが変わったなどのため、プロビジョニングプロファイルを置き換えたときに現れることがあります。

Code Sign error: Provisioning Profile 'xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx' can’t be found

この場合、「Code Signing Identity」ビルド設定の値が、正しいプロビジョニングプロファイルとコード署名IDであることを確認してください。また、プロジェクトとターゲットの「Code Signing Identity」ビルド設定が、一致していないことも考えられます。

Xcodeが証明書を信頼しない

開発用証明書や配布用証明書の正当性をXcodeが確認できない場合に、このエラーメッセージが現れます。

Code Sign error: CSSMERR_TP_NOT_TRUSTED

信頼設定が「Use System Defaults」でなければ、アプリケーションのビルド、実行時に、「CSSMERR_TP_TRUSTED」というエラーメッセージをコマンドラインユーティリティ「codesign(1)」が出します。証明書の信頼設定を、デフォルト値である「Use System Defaults」以外に変更しないでください。以下の手順で、開発用、配布用、および中間証明書の信頼設定を修復します。

箇条書き項目
証明書の信頼レベルをシステムデフォルトに設定するには
  1. 「Keychain Access」を起動します。

  2. 「Category」セクションの「My Certificates」を選択します。

  3. 証明書をダブルクリックしてください。

  4. 証明書ウインドウで、展開表示用の三角印をクリックし、「Trust」セクションを表示します。

  5. 「When using this certificate」として「Use System Defaults」を選択します。

  6. 証明書ウインドウを閉じてください。

  7. 証明書情報を調べ、有効であることを確認します。

ビルド設定「Code Signing Identity」がどの証明書とも合致しない

次のエラーメッセージは、証明書が期限切れになったなど、無効である場合に現れます。

Code Signing Identity 'iPhone Developer' doesn't match any valid, non-expired, certificate/private key pair in your keychain.

同じコード署名IDで複数のターゲットに署名する場合、このビルド設定は、ターゲットごとではなく、プロジェクトレベルで設定しなければなりません。両方の設定があれば、ターゲットに対する設定が優先します。ターゲットに対して「Code Signing Identity」が設定されている場合、これを選択し、「Edit」>「Delete」コマンドで削除してください。その上で、プロジェクトに対する「Code Signing Identity」として、適切な証明書を設定します。

開発用証明書やチームプロビジョニングプロファイルが「Code Signing Identity」ポップアップメニューに表示されない場合は、プロビジョニングプロファイルのダウンロードを試してください(「Xcode上でプロビジョニングプロファイルをダウンロードする」を参照)。Xcodeで管理されるプロビジョニングプロファイルを使っている場合は、「Xcodeで管理されるプロビジョニングプロファイルを移行する」を参照してください。独自のプロビジョニングプロファイルを使っている場合は、「独自のプロビジョニングプロファイルを使用する」を参照してください。

キーチェーンにコード署名IDが重複して登録されている

キーチェーンにコード署名IDが重複していると、開発用IDが重複している、配布用IDが重複している、などのエラーメッセージが現れます(キーチェーンにはそれぞれのIDを1つずつしか登録できません)。

Build error "iPhone Developer: <your_name> (XYZ123ABC): ambiguous (matches "iPhone Developer: <your_name> (XYZ123ABC)" in /Library/Keychains/System.keychain and "iPhone Developer: <your_name> (XYZ123ABC)" in /Users/../Library/Keychains/login.keychain)" 
[BEROR]CodeSign error: Certificate identity 'iPhone Distribution: <your_name>' appears more than once in the keychain.The codesign tool requires there only be one.

この場合はまず、重複しているコード署名IDを、キーチェーンから削除してみてください(「署名IDをキーチェーンから削除する」を参照)。

プロビジョニングプロファイルのアプリケーションIDが、アプリケーションのバンドルIDと一致しない

ビルド設定「Code Signing Identity」に指定されているプロビジョニングプロファイルのApp IDと、アプリケーションのバンドルIDが合致しない場合、次のようなエラーメッセージが現れます。

Code Sign error: Provisioning profile 'MyApp Profile' specifies the Application Identifier 'com.mycompany.MyApp.*'which doesn't match the current setting 'com.mycompany.MyApp'

この場合、XcodeプロジェクトでバンドルIDが正しく設定されていること、ビルド設定「Code Signing Identity」で指定された証明書やプロビジョニングプロファイルが適切であること、プロビジョニングプロファイルに正しいApp IDが使われていることを確認してください。

デバイスがリストに表示されないか、「Scheme」ツールバーに選択不可として表示される

プロジェクトやワークスペースを開いた際、接続済みのデバイスが、ツールバーの「Scheme」メニューの「Ineligible Devices」以下に表示されない場合、マウスカーソルを当該デバイス上に持っていけば、その理由を確認できます。以下を確認してください。

  1. アプリケーションが動作するiOSの版が、デバイスにインストールされたiOSの版以降であること。

    詳しくは「ターゲットデバイスを設定する(iOS、watchOS)」を参照してください。

  2. プロジェクトで使っているiOS SDKの版番号が、当該デバイスで動作しているiOSの版以降であること。

    たとえば、Xcodeには「iOS SDK 4.3」と表示されるが、デバイスにはiOS 5.0がインストールされている場合、iOS SDK 5.0が付属する版のXcodeをMacにインストールしなければなりません。

デバッグ情報に関する問題

デバッグに関してよく起こるのは、Xcodeがまだデバイスから必要な情報を収集していない、という問題です。

デバイスに接続したとき、Xcodeに「Unknown iOS Detected」というダイアログが現れる

このメッセージが現れるのは、デバイスで動作している版のiOSをXcodeがまだ認識しておらず、そのデバッグシンボルを(デバイスから)ダウンロードする必要がある場合です。デバイス上で動かしてデバッグするためには、ダウンロードが終わるまで、接続したまま待たなければなりません。

アーカイブおよびアップロードの問題

「Archives」ウィンドウでアーカイブを選択した際に、「Validate」ボタン、「Export」ボタン、または「Upload to App Store」ボタンが無効になっている場合は、そのアーカイブに1つの最上位アプリケーションが含まれているかどうかを確認してください。