AppleWatchアプリを作るときにハマったBundleID周りの設定
はじめに
AppleWatchアプリの話ではなくiOS側のアプリで、DebugビルドとReleaseビルドでBundleIDを分けることはよくあると思います。同じ端末にデバッグ用とリリース用(or ストアからダウンロードしたもの)の両方のアプリを入れたい場合ですね。
で、そのときにAppleWatchに対応させようとTargetを追加したときにハマったのでメモとして残しておきます。AppleWatchに限らずにExtention系(Notification Service Extension とか)で同じ問題が発生するはずです。
ビルドが通ったのにエラーが出る
Target追加→とりあえずビルドして実行しましょうね〜って思ったところビルドが成功したのちシミュレータが立ち上がってされアプリも起動しようかってタイミングでXcodeさんに怒られる。
そんなBundleIDないから、的な。
そう、WatchKit Appの設定には端末側のアプリのBundleIDの記述があります。そしてWatchKit ExtentionにはWatchKit AppのBundleIDの記述があります。それぞれ正しく設定されていないとビルドエラーは発生しないけど実行しようとしたタイミングで怒られてしまうようです。(ビルド時にエラー出してよ・・・)
Build Settings と info.plist を修正する
AppleWatch側(WatchKit App と WatchKit Extention)の設定にもdebugとreleaseで分ける記述を追加することで解決します。
WatchKit App
まずはアプリ自体のBundleIDを分けます。これはiOSアプリと同じようにProduct Bundle Identifier
を分けるだけです。
次にinfo.plistにWKCompanionAppBundleIdentifier
という値があり、これはCompanionApp(iOS側のアプリのこと)のBundleIDを指定するものです。この値をデバッグとリリースで分けるようにするため適当な変数を参照するようにします。ここでは$(COMPANION_BUNDLE_ID)
としています。
で、build settingsの方で定義します。
WatchKit Extension
次に WatchKit Extension側です。まずはProduct Bundle Identifier
を分けます。
info.plistにWatchKit AppのbundleIDを指定する記述があります。ここをデバッグとリリースで分けるようにするため適当な変数を参照するようにします。ここでは$(WKAPP_BUNDLE_ID)
としています。
そしてbuildsettingsの方でその定義を書きます。
これで無事実行することができるようになりました。