AdHoc ビルドを作成し、実機に転送できないことがあったのでその解決方法の一つをご紹介します。
問題発生時の状況
AdHoc ビルドは以下のような手順で作成していました。開発環境は Xcode 4.2, SDK 5.0 です。
- Xcode の メニューバーから “Archive” を実行
- オーガナイザー の “Archives” タブでさきほどアーカイブしたものを選択
- “Share…” ボタンから Contents は “iOS App Store Package (.ipa)” を選択し、対象となる “Identity” を選択
作成した .ipa ファイルをオーガナイザー経由でデバイスにインストールしようとすると以下のような警告が出てしまいインストールできませんでした。
The executable was signed with invalid entitlements. The entitlements specified in your application’s Code Signing Entitlements file do not match those specified in your provisioning profile. (0xE8008016).
エラーメッセージで検索すると以下のような記事が見つかりました。
er: 実機ビルドでプロビジョニングのエラーっぽいのでビルドに失敗するとき
”CodeSign error” ”The entitlements file” Entitlements.plist ”is missing”が出た場合の対処法 – 拡張現実ライフ
私の場合にはこれらを試してみても状況が改善されませんでした。
解決方法
以下の3つを全て一致させることで解決しました。
- “Archive” スキームの “Build Configuration”
- プロジェクト設定で指定している “Build Configuration” に対応する “Code Signing Identity”
- オーガナイザーで “Share…” で指定する “Identity”
補足説明
私の場合、AdHoc 作成用に “AdHoc” という Build Configuration を作成し、
- Debug (Xcode デフォルトで存在する Build Configuration)
- Release (Xcode デフォルトで存在する Build Configuration)
- AdHoc (自分で作成した Build Configuration)
これらでそれぞれ別々の Code Signing Identity を指定していました。
#ターゲットとプロジェクトで別々に Code Signing Identity を指定しているとターゲット側が優先されるので注意
Xcode 4 では Scheme 毎にこの Build Configuration を設定できるようになっており、Archive スキームはデフォルトで ”Release” に設定されています。この状態で Archive → ipa 作成を行うと、Archive 時に指定した CodeSign と Package 時に指定する CodeSign が合致しなくなり、実機に転送できなくなります。
確認方法
codesign の確認
1. ipa ファイルを解凍 以下のコマンドを実行
codesign -d --entitlements - {解凍した Payload ディレクトリ内の .app のパス}
2. xml 形式の plist が出力されるので application-identifier キーの値 ”{Bundle Seed ID (ランダム文字列)}.{info.plist で指定した Application Identifier の値}” の Bundle Seed ID
embedded.mobileprovision ファイル の確認
1. 上記手順で解凍した .app 内の embedded.mobileprovision ファイルを エディタで開く(私の場合はCotEditor を使いました)
2. “Entitlements” キー内の dict の “application-identifier” キーに対応する値の Bundle Seed ID
これら二つの Bundle Seed ID が違っていると実機インストールできません。
まとめ
私自身への備忘録がてら書かせていただきました。環境によっては解決しない場合もあるかも知れませんが、この記事で誰かの問題が解決できればと思います。