Independent WatchOS Appsを作成したときに調べた内容や感想(結果的にはストア未公開)
あらさんだよ,最近涙もろくなってきて大変大変。最近技術ブログも頑張って書いているけど英語がいつもネック,頑張っていきたい。
今回はWatchOS Appを作成したときに色々詰まって調べたことや,悩んだことを書いていきます。
作ったもの
先日,家全体で利用している電力を電力メータから取得できるHEMS機器(Home Energy Management System)のNature Remo E Liteというガジェットを購入しました。このガジェットはどこからでもWeb APIを利用して自宅の消費電力量を観測できるという素晴らしいシステムを提供しています。これを使っていつでもApple Watchで自宅の消費電力量を計測できると色々捗りそうだと思ったのでIndependent Watch Appsを作ってみようとした記録になります。
そもそもIndependent Watch Appsは結構最近のものでWWDC2019にて発表されました。今まではWatchOSだけのアプリであってもiOSアプリの拡張として作成する必要がありました。これを本当の意味でWatchOSだけで使えるアプリとして切り出したものになります。
実際に作成したアプリとしては,最小機能として瞬間消費電力量が見れることだけが欲しかったため,Tokenの入力画面と現在の電力量を見られるのみです。
トップ画面 | 設定画面 |
---|---|
開発した感想
Independent Watch Apps自体の記事がそもそも少ないのでコピペで実装などは難しいです。幸いSwiftUIが使えるので画面の構築はかなり楽にできるようです。SwiftOnTapというサイトがSwiftUIの非公式解説サイトとして優秀です。WatchOS自体の細かい制御などはWatchKitを参考にすると良さそうです。
全体的に,画面の作成やプロジェクトの構成は通常のiOSアプリと大きく変わらないため詰まることなくアプリの作成できます。
辛いポイント
TextField(SecureField)の取り扱い
WatchOSには何か情報を入力するためにはマイクでの入力,手書き入力(スクリブル),QWERTY配列の小さなキーボードを使えます。Handoffが有効になっている場合には近くのiPhoneやiPadで入力できます。
- 1つ目のつまりポイント: Tokenの入力をSecureFieldに投げてiPhoneでトークンを入力しようと考えていました。トークンなので手入力ではかなり辛いためiPhoneのパスワードマネージャーからクリップボード経由でHandoffのテキストフィールドに投げようとしています。これはできません。
問題として発生した現象はHandoffで開かれたテキストフィールドは文字を送信するフィールドではなく,キー入力のイベントを送信するような挙動を示しました。そのためテキストフィールドにクリップボードからペーストを行ってもWatchOS側には文字列が送信されませんでした。
- 2つ目のつまりポイント: Tokenが難しいため,WatchOS側からWebサイトのパスワードとしてトークンを取得しようとしました(Shared iOS Keychain)。これはできません。
当初はiOS Keychainとして登録している場合に,WatchOSの挙動としてWatchを身に着けている間はパスコードが解除されている判定となっているためセキュア情報も管理できるじゃん,と思っていたのですがフォーラムにてWatchOSからiOS Keychainにアクセスできないという報告が上がっていました。試したところ無理だったので辛いことになりました。
結局のところ,この問題はIndependent Watch Appsだと解消できないのでは…??となり迷宮入りしました。iOSアプリも作成して設定画面を作成しない限り難しそうです。
コンプリケーションの取り扱い
イマイチ使える情報がなかった部分になります。コンプリケーション自体もiOSのWidgetより制限が厳しい紙芝居アプリを要求してくるものになっているためWeb APIを介したリアルタイムの情報を提供には使えなさそうです。制限事項として外部通信はコンプリケーションがある場合には15分に1度などがありました。
- つまりポイント: 資料があてにならない。
つらみは以下のブログに書いてあった内容を参考にしています。実際にアプリを作成している中でも要領を得ない解説・紹介がかなり多くOS差分なのかな?と疑ったりもしましたが深入りしていないため迷宮入りです。
おわりに
iOSアプリの拡張として作成するWatchOSアプリよりも,WatchOSのみをターゲットにした目的のアプリであれば良さそうに見えました。
利用に適しているアプリとして考えられるものには,ローカルで完結する計算機やメモ帳などのアプリのようです。
利用に適していないアプリとしては,Web APIなどの外部との連携のため設定情報が必要なアプリと感じました。
Discussion