宣伝
前評判が良くなかったので期待してなかったApple Watchですが、いざ触ってみるといい感じ。(僕が今回スマートウォッチ自体を持つのが初めてのため、ハードルが下がっているというのもありそうです。)
しばらくはWatchアプリを出して遊んでみようと思っています。
手始めにミニゲームなアプリを公開してみました。(Lights Outのクローン)
Apple Watch対応のミニゲームアプリ「反転一色(Flip One Color)」をリリースしました - UPDATE - SpriteKit.jp
ソースコード(Swift)はGitHubで公開しています。
https://github.com/tnantoka/FlipOneColor
メモ
基本的なこと
アプリをApple Watchに対応させる
プロジェクトを選択して、Targetの最下部の+からWatch Appを追加。
Notificationのチェックはいらなければ外す。Activateする?って聞かれるのでYes。
画面遷移
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)の値が1
と1.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 別投稿したいと思います。