【watchOS】Missing or Invalid Principal Class: (ComplicationController).


概要

SwiftUIでApple Watchアプリを開発していて、どうにもコンプリケーションが表示されてくれない。ログを見ると何やらエラーが表示されてるけど、その内容通り確認しても問題なさそう。という感じでめちゃくちゃにハマってしまったので二度とハマらないためにメモります。

環境はXcode 13.3/watchOS 8.5です。

エラー内容

xxxのところはアプリ名です

xxx WatchKit Extension[17544:116415] 
Missing or Invalid Principal Class: (ComplicationController). 
Please check 'ClockKit Complication - Principal' Class property in WatchKit Extension's Info.plist

曰く、 ComplicationController が見つからない、WatchKit Extensionの Info.plist をチェックせよとのこと。

失敗パターン: Info.plistに書く

WatchKit Extensionの Info.plist ClockKit Complication - Principal を書いてました。

成功パターン: プロジェクトファイル(.xcodeproj)に書く

こっちが正解でした。。。

ここを設定すると、 Info.plist の同項目は自動的に消えてくれました。
これで無事ComplicationControllerで設定したコンプリケーションが表示されるようになりました。

考察

SwiftUIでプロジェクトを新規作成すると、iOSアプリの場合 Info.plist の自動生成は行われません。一方、Watch Extensionの方では生成されます。Watch Extensionの方の Info.plist は必要なのだろうか…🤔