【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

この記事からわかること

  • Swift UIApple Watchアプリ開発する方法
  • 既存iOSプロジェクトwatchOSターゲット追加するには?
  • 発生したエラー解決方法
  • WCSession counterpart app not installedとは?
  • This app has the ITSWatchOnlyContainer key set in its Info.plist, which identifies it as a shell app surrounding a Watch-only app; these are not installable.とは?
  • watch-only apps cannot be contained in companion apps installed on the companion.とは?
  • watchkit 2.0 app's bundle id バンドルID is not prefixed by the parent app's bundle id followed by a '.'; expected prefix バンドルID.とは?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

既存のiOSプロジェクトにApple Watchターゲットを追加する方法

アプリと連携したApple Watchアプリを開発したいけど既にプロジェクトを作成しリリースしている場合は新規でプロジェクトを作成してApple Watchアプリを開発するのではなく既存のプロジェクトにターゲットを追加して開発していきたい状況になりました。

連携させるためのApple Watchターゲットを追加するのに少し苦戦したので方法をまとめておきます。方法がいくつかあるので自分に合った方法で試してみてください。

新規開発やwatchOSアプリの実装方法は以下の記事を参考にしてください。

方法1:既存の中に新規でiOSターゲットとwatchOSターゲットを作成する

最初は既存のアプリの中に新規でiOSターゲットとwatchOSターゲットの2つのターゲットを作成する方法です。この場合は既存のアプリではApple Watchと連携はしないが新規でiOSアプリとwatchOSアプリを開発する際に同プロジェクト内で管理する際の方法です。

ターゲットの種類:Bundle ID

既存のプロジェクトを開き、Xcode上部メニュー「File」>「New」>「Target..」をクリックし「watchOS」>「App」をクリックします。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

アプリ名(新規Bundle ID)を設定できるので入力し「Watch App with New Companion iOS App」にチェックを入れて進みます。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

スキームをアクティブ化するように求められるので「Active」をクリックします。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

これでプロジェクト内にiOSターゲットとwatchOSターゲットの2つのターゲットが追加されます。プロジェクトの中身は以下の通りになります。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

この場合MyAppWatch Watch App(watchOS側)と連携できるのはMyAppWatch(新規iOS側)のみとなります。MyApp(既存iOS側)と接続処理を試みてもうまく動作しないので注意してください。

方法2:既存iOSと連携するwatchOSターゲットを作成する

こちらは既存のiOSアプリと連携するwatchOSアプリを追加したい場合の方法です。大概の人がこちらかなと思います。方法は簡単ですが流れを見ていきます。

ターゲットの種類:Bundle ID

既存のプロジェクトを開き、Xcode上部メニュー「File」>「New」>「Target..」をクリックし「watchOS」>「App」をクリックします。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

Watchアプリ名を設定できるので入力し「Watch App for Existing iOS App」にチェックを入れて進みます。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

スキームをアクティブ化するように求められるので「Active」をクリックします。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

これでプロジェクト内に既存のiOSターゲットと連携する設定がされてwatchOSターゲットが追加されます。プロジェクトの中身は以下の通りになります。

【SwiftUI】Apple Watchアプリを開発する方法!iPhoneと連携

Watch専用ターゲットを連携として設定しなおす方法

こちらは一度Watch専用でターゲットを追加してしまった場合にiOSターゲットと連携させる場合の方法です。「Watch-only App」でアプリを追加した場合と「Watch App with New Companion iOS App」で追加した場合では設定が異なるようで既存のプロジェクトに「Watch-only App」で追加するとビルドが通らなくなります。これから紹介する方法はエラーを回避した方法ですがこの記事の最後に発生したエラーも記載しておきます。

少し流れがややこしいので流れを先に確認します。

  1. 「Watch-only App」でwatchOSターゲットを追加
  2. Watch Appターゲットのinfo.plistに「WKCompanionAppBundleIdentifier」キーを追加
  3. Watch Appターゲットのinfo.plistから「App is only available as a standalone watchOS app」キーを削除
  4. Watch Appターゲットのinfo.plistに「App can run independently of companion iPhone app」キーを追加
  5. Watch AppターゲットのBundle IDを「既存Bundle ID.watchkitapp」に変更
  6. 既存iOSターゲットの「Frameworks,Libraries,and Embedded Content」にWatch Appターゲットを追加
  7. 不要なターゲットの削除

「Watch-only App」でwatchOSターゲットを追加

既存のプロジェクトを開き、Xcode上部メニュー「File」>「New」>「Target..」をクリックし「watchOS」>「App」をクリックします。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

アプリ名を設定できるので既存のアプリ名に倣って入力し「Watch-only App」にチェックを入れて進みます。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

スキームをアクティブ化するように求められるので「Active」をクリックします。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

ここまで完了するとプロジェクトの中が以下のようになります。よく見るとディレクトリ自体は期待通りですが「Watch App with New Companion iOS App」の時と同じように連携watch用のiOSターゲットとwatchOSターゲットの2つが自動生成されています。(これについては後述します)

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

Watch Appターゲットのinfo.plistに「WKCompanionAppBundleIdentifier」キーを追加

Watch Appターゲット(今回でいうとMyAppWatch Watch App)のinfo.plistにWKCompanionAppBundleIdentifierキーを追加して、値には既存のiOSターゲットのBundle IDを渡します。

info.plistへ追加

Watch Appターゲットのinfo.plistから「App is only available as a standalone watchOS app」キーを削除

続いてWatch Appターゲットのinfo.plistからApp is only available as a standalone watchOS appキーを削除します。

info.plistから削除

Watch Appターゲットのinfo.plistに「App can run independently of companion iPhone app」キーを追加

Watch Appターゲットのinfo.plistにApp can run independently of companion iPhone appキーを追加して、値にはYESを渡します。

info.plistへ追加

Watch AppターゲットのBundle IDを「既存Bundle ID.watchkitapp」に変更

Watch AppターゲットのBundle IDを既存Bundle ID.watchkitapp形式に変更します。

既存iOSターゲットの「Frameworks,Libraries,and Embedded Content」にWatch Appターゲットを追加

既存iOSターゲットの「General」>「Frameworks,Libraries,and Embedded Content」Watch Appターゲットを追加します。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

以下のように追加できていればOKです。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

不要なターゲットの削除

ターゲット追加時に自動で生成された連携watch用のiOSターゲットは不要になったので「TARGETS」から右クリックして「Delete」で削除して完了です。

これで既存のiOSターゲットとwatchOSターゲットが連携することができました。ペアリングして接続する処理を実装して正常にビルドから接続まで行けるようになっていることを確認してください。接続するかどうかは「こちら」の方法をお試しください。

WCSession counterpart app not installed

XcodeのログにWCSession counterpart app not installedと表示された場合はiOSターゲットとwatchOSターゲットがうまく連携できていない可能性があります。

翻訳

WCSessionの対応するアプリがインストールされていない

「Frameworks,Libraries,and Embedded Content」にWatch Appターゲットを追加することで解決いたしました。

This app has the ITSWatchOnlyContainer key set in its Info.plist, which identifies it as a shell app surrounding a Watch-only app; these are not installable.

Watch-only App」で追加後にそのままビルドしようとすると以下のようなポップアップが表示されThis app has the ITSWatchOnlyContainer key set in its Info.plist, which identifies it as a shell app surrounding a Watch-only app; these are not installable.と表示されます。

【Xcode】既存のiOSプロジェクトにApple Watchターゲットを追加する方法

翻訳

このアプリには、Info.plist に ITSWatchOnlyContainer キーが設定されており、これにより、ウォッチ専用アプリを囲むシェル アプリとして識別されます。これらはインストールできません。

これはinfo.plistに適切なキーを設定することで解決することができます。

watch-only apps cannot be contained in companion apps installed on the companion.

watch-only apps cannot be contained in companion apps installed on the companion.

翻訳

WCSessionの対応するアプリがインストールされていない

watchkit 2.0 app's bundle id バンドルID is not prefixed by the parent app's bundle id followed by a '.'; expected prefix バンドルID.

ビルドを試みた際にwatchkit 2.0 app's bundle id バンドルID is not prefixed by the parent app's bundle id followed by a '.'; expected prefixバンドルID.と表示されることがあります。

翻訳

watchkit 2.0 アプリのバンドル ID XXXXXXXX には、親アプリのバンドル ID の後に「.」が続く接頭辞が付いていません。予期されるプレフィックス XXXXXXXX

これはwatchOS側のバンドルIDの設定を変更することで解決することができました。

参考文献:Watch-only apps cannot be contained in companion apps installed on the companion.

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index