CrossBridge Lab

技術ネタ、デバイスネタを...

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を分けるだけです。

f:id:crossbridge-lab:20161225111812p:plain

次にinfo.plistにWKCompanionAppBundleIdentifierという値があり、これはCompanionApp(iOS側のアプリのこと)のBundleIDを指定するものです。この値をデバッグとリリースで分けるようにするため適当な変数を参照するようにします。ここでは$(COMPANION_BUNDLE_ID)としています。

f:id:crossbridge-lab:20161225111227p:plain

で、build settingsの方で定義します。

f:id:crossbridge-lab:20161225111617p:plain

WatchKit Extension

次に WatchKit Extension側です。まずはProduct Bundle Identifierを分けます。

f:id:crossbridge-lab:20161225112434p:plain

info.plistにWatchKit AppのbundleIDを指定する記述があります。ここをデバッグとリリースで分けるようにするため適当な変数を参照するようにします。ここでは$(WKAPP_BUNDLE_ID)としています。

f:id:crossbridge-lab:20161225112254p:plain

そしてbuildsettingsの方でその定義を書きます。

f:id:crossbridge-lab:20161225112504p:plain

これで無事実行することができるようになりました。