Apple Watchサンプルアプリ「Lister」のビルド方法


目次

  1. はじめに
  2. 実行要件(ビルドに必要なもの)
  3. ダウンロードURL
  4. フォルダ構成
  5. プロビジョニングファイルの作成
  6. ListerアプリのbundleIDを5のIDに変更
  7. 各ターゲットのチームを自分のものに変更
  8. プロビジョニングファイルを発行
  9. iOSのアプリを実行
  10. スキーム変更してWatchAppを実行
  11. 実行結果
  12. 番外編(エラー)

はじめに

Apple Watchが今年の3月末に発売されるという噂で、自分も開発したい!と思ったところ、
Apple公式のサンプルで「Lister」というサンプルアプリのコードが公開されていました。
ToDo管理アプリでiPhoneとAppleWatchのデータの連携ができるとのこと。
これを参考にすれば、自分でAppleWatchのアプリが作れる!と意気込んでみたものの、
プロビジョニングファイルの登録などけっこう前処理が必要なアプリでした。
これができないと実行すらできない。。
ということで、「Lister」を実行するにあたっての前処理をまとめます。

「Lister」はiOSとMacのアプリとして提供されていますが、この記事ではiOSアプリの実行を紹介します。

実行要件(ビルドに必要なもの)

「Lister」を実行するには以下が必要です。

  • Xcode6.2(2015年1月28日現在beta4がダウンロードできます。)
  • iOS Developer Programの登録(2015年1月28日現在年間11,800円掛かるそう)

現在AppleWatchを開発するにはXcode6.2が必要なのでそれをダウンロードします。
「Lister」はToDoリストのデータをiPhone(iPad)とAppleWatchでやりとりするために
「iCloud Document Storage」 と 「App Groups」というAppleのサービスとを利用しているとのことです。
その利用にDeveloper Programの登録が必要です。

サンプルコードダウンロードURL

フォルダ構成

ダウンロードすると以下のフォルダ構成になっていると思います。

ListerforAppleWatchiOSandOSX
│
├About Lister.pdf
│
├iOS and Watch Quick Start.pdf
│
├LICENSE.txt
│
├Mac Quick Start.pdf
│
├Objective-C/
│
├README.md
│
├Swift/

Objective-C/フォルダにObjective-cでのアプリコードが、Swift/フォルダにSwiftのコードがあります。
どちらも同じ機能を持つアプリになってます。

プロビジョニングファイルの作成

さて、いよいよ前処理です。
まず、iOS Member Centerにログインして、【Certificates, Identifiers & Profiles】>【Certificates】
で登録画面に行ってこの「Lister」用のプロビジョニングファイルを作成します。

Identifiers > App IDs で追加で登録する際に、App ID SuffixBundle IDはよく覚えておいてください。
あとでXcodeに登録する際にここのBundle IDをあわせる必要があります。

登録したらProvisioning Profilesからダウンロードします。

参考:[iOS 7] アプリ開発入門 1からはじめるiOS7 – プロビジョニングプロファイルの作り方

ダウンロードしたらXcodeに今ダウンロードしたプロビジョニングファイルが登録しているかを確認します。
Xcode6.2を立ち上げて、以下を確認。

Xcodeタブ>Preferences > Accounts > Apple IDsView Details...をクリックで確認できます。

ListerアプリのbundleIDを5のIDに変更

デフォルトでは、Appleの方でbundleIDのプレフィックスが設定されています。それを先ほど設定した自分のbundleIDへ変更する必要があります。

  1. Xcodeのプロジェクトナビゲーターから「Lister」のターゲットを選択
  2. Build Settings > User-Definedを確認(一番最後にある)
  3. LISTER_BUNDLE_PREFIXの値をcom.example.apple-samplecode(これがデフォルト)から自分のものに変更。

各ターゲットのチームを自分のものに変更

以下のターゲットのIdentityTeamを自分のものに変更

  • Lister(iOSのListerアプリ)
  • ListerToday(iOSのListerのウェジェット)
  • ListerWatch(AppleWatchのためにWatchKit extension)
  • Lister Watch App(AppleWatchアプリ)

キャプチャはListerWatchのもの

プロビジョニングファイルを発行

各ターゲットに自分のチームを設定すると以下のターゲットでワーニングが出ます。

  • Lister
  • ListerToday
  • ListerWatch

Fix Issueボタンを押すとXcodeの方で足りないプロビジョニングファイルを作成してくれます。

iOSのアプリを実行

前処理が終わりました。
うまく行けばアプリを実行できるはずです。
まずiOSのアプリから実行します。

schemeのリストからListerを選択しシュミレーターを選んでRunします。
今回はiPhone6を選びました。

iPhoneのシュミレーターが立ち上がるのを待ちます。

シュミレータのタブからHardware>External Displays>Apple Watch 38mm(42mmでも可)を選択します。
AppleWatchのシュミレーターが立ち上がります。

スキーム変更してWatchAppを実行

次にschemeリストからLister Watch Appを選択してiOSアプリで実行したのと同じデバイス(今回はiPhone6)を選択して実行します。
上手く行けば、AppleWatchのシュミレーターでListerアプリが立ち上がります。

実行結果

こんな風にデータが同期されます。

番外編(エラー)

target specifies product type 'com.apple.product-type.application.watchapp', but there's no such product type for the 'iphonesimulator' platform

Listerのサンプルコードをダウンロードしてプロジェクト開いて実行してみたら、このエラーがでて実行に失敗することがありました。
budleIDその他前処理は大丈夫なはずで、他に不備はないはずと1時間ぐらい悩んでいたんですが、
なんてことはない。実行しているXcodeのバージョンが6.1でした。。

このエラーが出たら、実行しているXcodeのバージョンをご確認ください。

参考:Xcode getting target specifies product type 'com.apple.product-type.application.watchapp'