watchOS2なアプリを始めるための用語理解
watchOS 2になって時計再度ででいろいろ処理できるようになったからいろいろアプリ作れるやないか!
と思ってたけど、いろいろバタバタしてもう3ヶ月くらい。困ってたこと思い出しながら、ドキュメントも充実してきてるのでメモメモ。
始めるにあたって、ささっとやるだけであっても、用語理解とライフサイクルの理解等は、真剣にやっとかなあかんなぁと思いました。
内容はこれの要約の要約みたいなもんです。
https://developer.apple.com/library/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/index.html#//apple_ref/doc/uid/TP40014969-CH8-SW1
環境
OS | Version |
---|---|
Mac OS | Mac OS X Yosemite |
iOS | 9.1 |
watchOS | 2.0 |
Xcode | 7.1.1 |
基礎用語
用語 | 説明 |
---|---|
Watchアプリケーション | 実際のAppleWatchのアプリケーション |
WatchKitExtention | WatchアプリケーションでUIやらリソースを保持しているもの |
グランス | 下から画面をスワイプしたときに出てくるやつ。1画面で完結する必要有り。 |
コンプリケーション | 時計の画面に出てくる小さい要素 |
基本的なフレームワークの立ち位置。
下図で言うところのwatch OSとiOSの会話をConnectivityFrameworkでやっている。
簡単な実装を行うための用語準備
まず必要なクラスとしてInterface ControllerというWKInterfaceControllerを継承したクラス。
iOSで言うところのViewControllerに似ているが、描画を直に担当してるわけじゃなさそう。
画面遷移(インターフェースナビゲーション)
基本的にはページベースと階層型ってのに分かれるらしい。
モーダルって便利アイテムもアリ。
(個人的には「ページベースの中で階層型を使うためのもの」に誓い解釈をしている。)
ページベース 並列に並んでる感じ(下にチョボがあって横スライドする感じのやつ)
storyboardでControlドラッグして別のInterfaceControllerに繋げば実装可(iOSでmodalとかする感じ)このつながりをセグエって言うらしい。
didAppearやらwillDisappearメソッドでビューがアクティブかどうかを判別
階層型 読んで字のごとく(左上に戻る<的なのがあるやつ)
pushControllerWithName:context:メソッドで遷移
モーダル 上記2個とは別枠で、iOSと同じく親子な感じで遷移するやつ
presentControllerWithName:context:メソッドで単一InterfaceControllerをモーダル
presentControllerWithNames:contexts:メソッドで複数をページベースでモーダル
グランス
常に最新情報が必要なのでwillActivateに更新処理を含めると吉
StoryBoardにて、右下からGlance Interface Controllerを引っ張ってきて乗せれば基本的にOK
「1画面でわかりやすく表示するぜ!」というポリシーで作成しろとのこと。
通知
通知の種類(ローカルorリモート)
通知 | 仕組み |
---|---|
ローカル通知 | iOS側で完結 |
リモート通知 | 外部からのプッシュ通知 |
通知の種類(通知画面の種類)
通知画面 | 仕組み |
---|---|
ショートルック | 通知来た時に出るやつ。あんまりカスタマイズできない。 |
ロングルック | ショートルックの中でも詳細見たいときのやつ。レスポンスの変更も可(スタンプ送る、的な) |
通知の画面での表示領域
通知の画面で出てくる表示を3つに領域分けしている
領域 | 内容 |
---|---|
sash領域 | アイコンとラベル |
content領域 | 内容。カスタムロングルックインターフェースで設定可 |
bottom領域 | ボタンが配置される場所なイメージ |
content領域の表示方式
・スタティックインターフェース 必須 下記ケースで表示される
ダイナミックインターフェイスがない
電力が不足している
開発者が明示的に表示しないよう指示
・ダイナミックインターフェース categoryが一致しているものを表示する。ちょっとおしゃれな感じに加工できる。
1.WKUserNotificationInterfaceControllerのサブクラス作成
2.Has Dynamic Interfaceをon
3.インターフェースにクラスを関連付け
まとめ
基本的にこれだけのイメージが最初にあれば、設計もある程度できる気がするしとっつきやすい気がする。
ドキュメントがいかに整備されてても、「どうスタートしたものか....」ってなるのがAppleやなぁ(玄人志向やなぁ)と俺は思う。
まぁ日本語ドキュメントがあんま無いからってだけやから、英語勉強せぇ言う話やねんけどね。
気が向いたらぼちぼち実装してgithubにでも