1. 実機向けのビルド&実行時に、
Error launching '****** Watchkit extension" - SPErrorUnknownMessageと表示された場合は、PushNotificationPayload.apns が破損、あるいは記述に誤りがある可能性がある。
プロジェクトを作成する時に、「Include Notification Scene」にチェックを入れ、通知(PushNotification)をデフォルトで使用するようにして、実際は通知を使用しなかった場合に、このエラーが表示される。シミュレータでの実行時はエラーは表示されないが、実機での動作時にはエラーが表示される。
対応策:
Watch ExtensionのEdit Schemeを開き、Watch InterfaceをMainに設定する。
(通知の設定を行わずに、Watch Interfaceに PushNotificationPayload.apnsが設定されているとエラーになる)
参考記事:
https://stackoverflow.com/questions/34722455/error-launching-watchkit-extension-sperrorunknownmessage
2. シミュレータ向けのビルド&実行時に、
Couldn’t communicate with a helper application. apple watchと表示された場合
対応策:
XCodeのPreferences → Source Control → Git を開き、全ての項目を空白にする。
元から空白になっている場合は、画面上のチェックマークにチェックを入れて再び解除する。
但し、Git を使用していない場合にのみ有効。Gitを使用している場合の対応策は不明。
3. Watch App Extensionをビルド&実行した場合、iPhoneとApple Watchとのデバッグが可能であり、別々のコンソールを参照することが出来るが、Apple Watch側のコンソールしか見られない場合がある。
対応策:
Watch ExtensionのEdit Schemeを開く。
・ExecutableをWatch Appの場合は、WatchOSアプリのバイナリ(.app)を設定する。
・iOSアプリの場合は、iOS アプリのバイナリ(.app)を設定する。
この設定の場合、Executableで設定したアプリのコンソールのみ参照できる。
※ Apple Watch向けWatchOS AppをiOSアプリにバンドルする場合、スキーム(Scheme)は、iOS App、Apple Watch、App Watch Extensionの3つが作られる。それぞれのスキーム毎に、動作がデバイスに及ぶ範囲が異なるので注意が必要である。
・スキーム iOS AppでBuild & Runした場合、iOS Appで操作したものはiOS Appに反映されるが、Apple Watchで操作した結果はiOS Appには反映されない。
・スキーム Apple WatchでBuild & Runした場合、iOS App側で記述された処理は基本的に実行されるが、ローカル通知やCore Dataへの登録は実行されない。
・スキーム Apple Watch ExtensionでBuild & Runした場合、ExecutableにiOS Appを指定した場合は、iOS App側で記述された処理はローカル通知やCore Dataへの登録も含めて全て実行される。
・スキーム Apple Watch ExtensionでBuild & Runした場合、ExecutableにApple Watch Extensionを指定した場合は、iOS App側で記述された処理は基本的に実行されるが、ローカル通知やCore Dataへの登録は実行されない。
App Storeで配信されているAppについては、バックグラウンドまたはフォアグラウンドでiOS Appが起動されていないと、WatchOS Appで操作した結果はiOS Appには反映されないので注意。(ユーザ向けのチュートリアルで明記して周知徹底する必要がある)
4. シミュレータ向けのビルド&実行時に、
The operation couldn’t be completed. (LaunchServicesError error 0と表示された場合
対応策:
Watch App Extensionおよび、Watch App のTARGETS → Build Settings → Valid Architectureに、
$(ARCHS_STANDARD)を設定する。
5. テーブル(WKInterfaceTable)の interface.storyboardのRow Controller(rowType)が使用するカスタムクラスは、テーブル行に表示するオブジェクト(ラベルや画像など)を定義する。
参考記事:
https://developer.apple.com/library/archive/documentation/General/Conceptual/WatchKitProgrammingGuide/Tables.html#//apple_ref/doc/uid/TP40014969-CH14-SW1
Listing 13-1 shows a sample row controller class definition. In this example, the class contains outlets for an image and a label.
6. テーブル(WKInterfaceTable)の setNumberOfRows: withRowType: に設定する文字は、interface.storyboardのRow ControllerのAttributes inspectorで定義する identifierで設定した文字と同一にすること。
参考記事:
http://www.minimalab.com/blog/2015/05/16/watchkit-table/
https://developer.apple.com/library/archive/documentation/General/Conceptual/WatchKitProgrammingGuide/Tables.html#//apple_ref/doc/uid/TP40014969-CH14-SW1
Figure 13-1 shows an example of a row controller configured with the identifier mainRowType and the class MainRowType, which is defined in Listing 13-1. The rowDescription and rowIcon outlets in that class are connected to the image and label objects in the row.
7. 実機でのビルド&実行時に、iOSデバイスが(Apple Watch not supported)と表示され、実機動作が出来ない場合
対応策:
(1) schmeをiOSデバイスのみの実行に切り替えて、一度iOSデバイスでアプリを起動する。
(2) macとiOSデバイスとの接続をワイヤレスではなく、ケーブル接続にしてビルド&実行する。
(3) iPhoneのWatchアプリを起動して文字盤を切り替えてみる。(ペアリング動作を実行)
8. 実機でのビルド&実行時に、XCodeの実行ステータスが「Run」の状態になっていてもApple Watchにアプリがインストールされない場合
対応策:
(1) 上記7.を試す。
(2) Apple Watchを再起動する。
(3) ペアリングされているiOSデバイスを再起動する。
(4) macを再起動する。
9. WKInterfaceTable上に複数のWKInterfaceLabelを上下に並べて配置出来ない場合
対応策:
interface.storyboard → WKInterfaceTable → Group → Attribute Inspector → Layout をVertical に設定する。
参考記事:
https://stackoverflow.com/questions/29075634/multiple-wkinterfacelabel-on-wkinterfacetable