AAAなブログ

あなたの求めているものは、ここにはない!

Watchアプリが起動できない時の確認項目

 

AppleWatchアプリを作っている。

単純な構成のアプリであればXcodeがうまくやってくれるのだが、

少し複雑な構成になってくると手動でやる必要があって色々ややこしい。

 

のでまとめる。

 

 

今回やりたいこと

 

ひとつのXcodeプロジェクトを次のような構成にしたい。

  1. アプリを2つ含む。
  2. 各アプリはWatchアプリを持つ。

 

 

ウォッチアプリを作成するためには

TARGETとしてWatchAppWatchExtensionが必要なので、

結果としてTARGETは次の6つになる。

 

f:id:hatesatekite:20190101185242p:plain

 

 

 

TARGETを複製等して6つ用意したら、TARGETBundleIdentifierを注意深く設定。

 

これで動くと思ったら大間違い笑

ここからが本番

 

 

1. 各Appが正しいWatchを参照してるか確認

  • 各App > Build Phases > Target Dependencies
  • 各App > Build Phases > Embed Watch Content

 

f:id:hatesatekite:20190101185216p:plain

 

 

 

2. 各Watchが正しいExtensionを参照してるか確認

  • Watch > Build Phases > Target Dependencies
  • Watch > Build Phases > Embed App Extensions

 

f:id:hatesatekite:20190101185230p:plain

 

 

 

3. 各Watchが正しいAppを参照してるか確認

  • Watch > Info > WatchOS Target Properties > WKCompanionAppBundleIdentifier

 

f:id:hatesatekite:20190101185310p:plain

 

 

 

4. 最後に各WatchExtensionのプロパティを確認

  • 各Extension > Info > WatchOS Target Properties > NSExtension > NSExtensionAttributes > WKAppBundleIdentifier

 

f:id:hatesatekite:20190101185258p:plain

 

 

 

これでビルドは通った。

実行すると・・・ランタイムでInterfaceControllerインスタンス化に失敗

[SPRemoteInterface createViewController:className:properties:contextID:info:gestureDescriptions:clientIdentifier:]:2910: Critical failure. Simulating crash: Condition failed:"NO". Couldn't instantiate class _TtC15watchExtensionA19InterfaceController

 

 

 

 

目を皿のようにして設定を探したら・・・あった。

  • Watchターゲット > BuildSetting > Default Module

このプロパティはXcodeが自動設定してくれないので手入力でExtensionを指定してあげよう。

 

 

 

 

 

しかしdocomoは金払いが悪い。ausoftbankを見習うべきと思う。