読者です 読者をやめる 読者になる 読者になる

Apple Watch Appをつくる

これの25日分です。

www.adventar.org

アドベントカレンダーって普通24日までなんじゃ…

 

いまさらApple Watchを買った

ボーナスがでて浮かれてApple Watch買った。

www.apple.com

ゴルフとランニング用と思って買ったけど、せっかくなら普段使いもしたい。

そんなに便利なアプリは無いけど、

  • メッセージとかLineなどのメッセージアプリと
  • 駅.Locky

はめちゃめちゃ使う。

きっと、

  • 通知された内容を見逃したくないアプリ
  • ちらちら情報みたいアプリ

はWatch App向きな気がする。

 

自分でWatch Appを作ってみよう

とはいえ値段分の価値は得られていない気がする。

そこで自分でWatch Appつくっておもちゃにしてみた。

つくったのはポモドーロタイマー。つぎのリンクで紹介されてるポモドーロテクニック用のタイマーです。

d.hatena.ne.jp

普段職場ではChromeのExtensionやiPhoneアプリのタイマーを使ってるけど、

通知が弱くて仕事しすぎたり、休みすぎたりしちゃう悩みがありました。

通知が優秀なWatch Appとして実現できればポモドーロ生活が捗りそうという発想です。

 

Watch App開発

そもそもiOSアプリもつくったことが無いので、ドットインストールで動画を何本かみてわかった気になるところから始めました。再生速度を細かく変更できるので効率良く勉強できました。

http://dotinstall.com/

 Watch Appは、ほぼiOS Appと同じノリで、

storyboardで画面をつくって必要な動きをSwiftで書けばOKです。

storyboardにはButtonのような基本的なパーツに加えて、WatchっぽいPayment ButtonやTimer、Activity Ringなんかがあります。

f:id:smzkun:20161225221741p:plain

 

ポモドーロタイマーでは、Button、Label、Timerを使いました。

f:id:smzkun:20161225221811p:plain

「Start」Buttonが押下されたら、Timerでカウントダウンを初め、終わったらLabelを変えて次のカウントダウンを始める動きをつくります。

 

WKInterfaceTimerで設置したTimerを制御します。次のようにしてTimerを動かします。


timer.setDate(Date(timeIntervalSinceNow: 25 * 60))
timer.start()

※timerはWKInterfaceTimerのインスタンス

 

 

 

ただ、WKInterfaceTimerはカウントダウン終了時になにか実行したりする機能はありません。これをやりたい場合はシステムタイマーを同時に動かし、実行したい処理を設定する必要があります。

ポモドーロタイマーでは。カウントダウンが終わったら次のタイマーを動かしたいので、次のような処理も一緒に書いてやります。

Timer.scheduledTimer(timeInterval: cond.range, target: self, selector: #selector(self.nextTimerStart), userInfo: nil, repeats: false)

同じ設定で動かすならrepeatsをtrueにするだけで、別にタイマーを立ち上げる必要はありません。実現したいタイマーは回数によってIntervalが違うので、リピートはせず、nextTimerStartの中で別のタイマーを立ち上げる動きにしています。

f:id:smzkun:20161225221946p:plain

 

こんな感じで実装して通知なしのタイマーをつくれたのですが、肝心の通知機能は連携するiOSアプリで作り込む必要があるとわかり今日は挫折。とりあえず出来たものを使いつつ、シンプルで使いやすいタイマーに仕上げていこうと思います。

 

はじめてiOS App/Watch Appを開発しましたが、今回つくったくらいのタイマーなら、慣れてるひとは30分くらいでつくれる作業量で、ずいぶん手軽につくれるんだなと驚きました。せっかくおもちゃを手に入れたので、活用できるように自作アプリ作りを続けようとおもいます。