初めて作ったApple Watchアプリが無事リリースされたので、宣伝とソースコードとメモ

  • 23
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

宣伝

前評判が良くなかったので期待してなかったApple Watchですが、いざ触ってみるといい感じ。(僕が今回スマートウォッチ自体を持つのが初めてのため、ハードルが下がっているというのもありそうです。)
しばらくはWatchアプリを出して遊んでみようと思っています。

手始めにミニゲームなアプリを公開してみました。(Lights Outのクローン)

42.png
Apple Watch対応のミニゲームアプリ「反転一色(Flip One Color)」をリリースしました - UPDATE - SpriteKit.jp

ソースコード(Swift)はGitHubで公開しています。
https://github.com/tnantoka/FlipOneColor

メモ

基本的なこと

アプリをApple Watchに対応させる

プロジェクトを選択して、Targetの最下部の+からWatch Appを追加。
Notificationのチェックはいらなければ外す。Activateする?って聞かれるのでYes。

参考:https://developer.apple.com/library/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/ConfiguringYourXcodeProject.html#//apple_ref/doc/uid/TP40014969-CH2-SW1

画面遷移

http://qiita.com/gladenjoy/items/aaec7306d7135f64cdab
http://www.toyship.org/archives/2043
などのとおりにやればできる。

iOSと違って、戻るボタンの右に表示されるのが現在の画面のタイトル。微妙…。

複数のボタンを1行に並べる

Groupに入れて、WidthをRelative to Containerにして1以下の値にすれば分割できる。

参考:http://qiita.com/shu223/items/e704f70abc50da32ba38

DEBUGフラグ

Other Swift Flags-D DEBUGなどする時は、WatchKit Extensionにも設定する。

アイコン

Watch AppのImages.xcassetsに設定する。

スクリーンショット

External Displaysを表示したままでCommand + SすればiPhoneの画面と一緒に撮れる。(iPhoneだけを取りたい時に邪魔だったりもするけど。)
ストアに必要なのは42mmの方だけ。

バージョン番号

プロジェクト初期状態のままだと、バージョン(Build)の値が11.0でずれてるので合わせる。(そのままだとValidateでWargingが出た)

willActivateはviewWillAppear:とは用途が違う

名前の通り、スリープからの復帰とか、他アプリから戻ってきた時とか、色々呼ばれる。

困ったこと

複数のボタンに同じような処理をさせたい時

  • IBActionに引数senderは渡ってこない。
  • tagが設定できない。
  • IBOutletCollectionは未サポート。

ということで、今回は25個のボタンにせっせとOutletとAction設定しました。

WatchKit AppをBuildしてもSimulatorがアクティブにならない

iPhoneの画面をタップしてもダメ。
Command+TabかDockアイコンクリックなら行ける。
地味に困るけど、仕方ない。

no paired Apple Watch?

最初、Device名の後ろに(no paired Apple Watch)が表示されて実機インストールできなかった。
USBケーブルを繋ぎ直したらDevise登録とかXcodeが勝手にやってくれて解消した。

application:handleWatchKitExtensionRequest:reply:で落ちてた

この中でiPhoneアプリがクラッシュしても、以下のエラーが発生するだけ。
凡ミスに気づくのが遅れた。

The UIApplicationDelegate in the iPhone App never called reply() in -[UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]

iPhone上のApple Watchアプリで表示される名前が変わらない

iPhoneアプリ側のCFBundleNameが使われる。
Apple Watchの実機上に表示されるのはWatch AppのCFBundleDisplayName
ややこしい…。

参考:https://developer.apple.com/library/ios/qa/qa1892/_index.html

二重開発感

Viewの使い回しはできないので、ゲーム画面をiPhoneとWatch用にそれぞれ作業。
ゲームのロジック部分は共通化したけど、それでも残るこれさっきもやったぞ?感…。

ただいま次のアプリを開発中なので、また何かあれば追記 or 別投稿したいと思います。