【WatchOS】実機テストでのエラーやAppStoreへの申請でのエラーと対処法【Xcode】
AppleWatchの実機テストやWatchOSを含んだアプリをAppStoreへ申請するときにこのようなエラーが出る場合があります。
Embedded binary is not signed with the same certificate as the parent app. Verify the embedded binary target's code sign settings match the parent app's.
このエラーは主にTarget > General > Bundle IdentifierとProvisioning Profile(プロビジョニング プロファイル)のIdentifierが一致していない時に起きるエラーです。
以下、このエラーに対する対処法です。
3つのBundle IdentifierとVersionとBuild
AppleWatchでの実機テストの場合、iOSのターゲット、watchOSのターゲット、watch Extensionのターゲットの3つのBundle Identifier、Version、Buildに気をつける必要があります。
Bundle IdentifierをiOSを基準にwatch、watchExtensionも変更
Target > General > Bundle Identifierを変更しましょう。3つのTarget全てに変更が必要です。
(例)
iOSのBundleIdentifier:com.○○○○.TestApp
watchOSのBundleIdentifier:com.○○○○.TestApp.watchkitapp
watchExtensionのBundleIdentifier:com.○○○○.TestApp.watchkitapp.watchkitextension
watchkitappやwatchkitapp.watchkitextensionは必須です。決して消さないようにしましょう。
Version、Buildも揃える
上記と同じようにTarget > General > Version、Target > General > Buildも変更しましょう。上記と違いVersionとBuildは3つのTarget全てを一致させます。
(例)
iOSのVersion:1.0 Build:1
watchOSのVersion:1.0 Build:1
watchExtensionのVersion:1.0 Build:1
これでも失敗する場合は以下について気をつけましょう。
WKCompanionAppBundleIdentifier、WKAppBundleIdentifierに気をつける
3つのターゲットのBundle Identifierを揃えても以下のよなエラーが出る場合があります。
The value of WKCompanionAppBundleIdentifier in your WatchKit app's Info.plist "com.○○○○.TestApp" does not match the bundle identifier of your companion app "com.○○○○.TestApp".
や
WatchKit App doesn't contain any WatchKit Extensions whose WKAppBundleIdentifier matches "com.○○○○.TestApp.watchkitapp". Verify that the value of WKAppBundleIdentifier in your WatchKit Extension's Info.plist matches the value of CFBundleIdentifier in your WatchKit App's Info.plist.
この場合はプロジェクトのWatchのソースフォルダにあるInfo.plistとWatchExtensionのソースフォルダにあるInfo.plistを修正する必要があります。
WKCompanionAppBundleIdentifierをiOSターゲットのBundleIdentifierにする
WatchのソースフォルダにあるInfo.plistを開きWKCompanionAppBundleIdentifierという項目をiOSターゲットのBundleIdentifierと同じものをセットしましょう。
WKAppBundleIdentifierをwatchOSターゲットのBundleIdentifierにする
WatchExtensionのソースフォルダにあるInfo.plistを開き
NSExtension > NSExtensionAttributes > WKAppBundleIdentifierという項目をwatchOSターゲットのBundleIdentifierと同じものをセットしましょう。
以上で、Xcode上での設定は終わりです。
まとめると
(例)
iOSのBundleIdentifier:com.○○○○.TestApp
watchOSのBundleIdentifier:com.○○○○.TestApp.watchkitapp
watchExtensionのBundleIdentifier:com.○○○○.TestApp.watchkitapp.watchkitextension
watchOSのInfo.plist:WKCompanionAppBundleIdentifier > com.○○○○.TestApp
watchExtensionのInfo.plist:WKAppBundleIdentifier >com.○○○○.TestApp.watchkitapp
iOSのVersion:1.0 Build:1
watchOSのVersion:1.0 Build:1
watchExtensionのVersion:1.0 Build:1
上記のように修正しましょう!
あとは最後にプロビジョニングを上記でセットしたBundleIdentifierで作り直してセットするだけです。watchOSの実機テストやAppStoreへのアップロードはこのあたりがわかりづらいですが、わかってしまえば簡単ですね!