その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

watchOS 2 の新機能のサンプルコード集『watchOS-2-Sampler』を公開しました

(2015年10月追記)watchOS 2 正式リリースに伴い、各サンプルのスクショ付きで新たに紹介記事を公開しました:


以下はベータリリース時の古い記事になります。


先週の WWDC15 にて watchOS 2 が発表され、ついに待望のネイティブ動作する Apple Watch アプリがつくれるようになりました。それに伴い、WatchKit には多くの機能が追加され、ClockKit や WatchConnectivity 等の新しいフレームワークも登場しました。さらにいえば、従来フレームワークもウォッチ側で動作するようになったことから、これらもある意味新APIであるといえます。*1


そんなわけで、数が少なすぎてびっくりした 初代 watchOS の発表時とは打って変わって、今回は遥かに多くの「新機能」があります。どんな機能が追加されたのかは既に多くのキーノートのまとめ記事などで紹介されてはいますが、新しいAPIはどう使うのか、実際に何がどこまでできるのか、快適に動作するのか、といった具体的なところが、英語のドキュメントや動画や記事をながめているだけだと正直あまりよくわかりません。やはり実際にコード書いて動かしてみるのが一番わかりやすい、ということで、


watchOS 2 の新機能のサンプルコード集『watchOS-2-Sampler


をつくりました。オープンソースなのでどなたでも GitHub から clone してお試しいただけます。


このアプリで、とあるアメリカのハッカソンにて賞をいただきました!それについては最後に。

Contents

今のところ17個のサンプルが入っています。まだまだ少ないですが、随時追加していく予定です。あと今回から Swift で書いています。機能追加のプルリク大歓迎です!


アイコンデザインはいつものように okazu 氏にお願いしました!




各サンプルのスクリーンショットはAppleの正式リリースまで控えます。代替として、WWDCの動画などAppleによる公開資料からの画像を一部用いています)

Accelerometer

Core Motion を用いて加速度センサの値を取得するサンプル。

Gyroscope

Core Motion を用いてジャイロスコープの値を取得するサンプル。

Pedometer

CMPedometer を用いて歩数や距離、階の昇り降り情報を取得するサンプル。

Heart Rate

HealthKit を用いて心拍数を取得するサンプル。

Table Animations

WKInterfaceTable のセル(row)をアニメーション付きで insert / remove するサンプル。`insertRowsAtIndexes:withRowType:`, `removeRowsAtIndexes:` メソッドを利用。

Animated Properties

`animateWithDuration:animations:` メソッドを利用して、アニメーションで拡大縮小やフェードイン/アウト、移動(実際には Alignment)を行うサンプル。

Draw Paths

Core Graphics を用いてパスを描画するサンプル。

Gradations

Core Graphics を用いてグラデーションを描画するサンプル。


※Core Graphics を用いたパス描画やグラデーション描画についての詳細は、こちらのスライド・記事もご参照ください。


Audio Rec & Play

`presentAudioRecordingControllerWithOutputURL:preset:maximumDuration:actionTitle:completion:` メソッドを利用して音声を録音する UI を表示し、


(WWDCのセッション動画より)

録音したファイルを `presentMediaPlayerControllerWithURL:options:completion:` メソッドを利用して再生するサンプル。


(WWDCのセッション動画より)


参考記事:watchOS 2 のオーディオ録音、再生機能を利用する - Qiita

Picker Styles

WKInterfacePicker の全スタイル(List, Sequence, Stack)を試せるサンプル。


(WWDCのセッションスライドより)

Taptic Engine

WKInterfaceDevice の `playHaptic` メソッドに指定できる全タイプ(WKHapticType)を試せるサンプル。


ちなみに WKHapticType は次のように定義されています。

enum WKHapticType : Int {
    
    case Notification
    case DirectionUp
    case DirectionDown
    case Success
    case Failure
    case Retry
    case Start
    case Stop
    case Click
}
Alert

`presentAlertControllerWithTitle:message:preferredStyle:actions:` メソッドで指定できる全アラートスタイル(WKAlertControllerStyle)を試せるサンプル。


ちなみに WKAlertControllerStyle は次のように定義されています。

enum WKAlertControllerStyle : Int {
    
    case Alert
    case SideBySideButtonsAlert
    case ActionSheet
}
Animation with Digital Crown

デジタルクラウンの回転に合わせ、WKInterfacePicker にセットしたアニメーションを表示するサンプル。`setCoordinatedAnimations` メソッドを利用。


(WWDCのセッションスライドより)

Interactive Messaging

iPhone と Apple Watch で相互にメッセージをやりとりするサンプル。Watch Connectivity フレームワークを利用。


Open System URL

WKExtension の `openSystemURL:` メソッドを利用して、電話およびSMSアプリを開くサンプル。

Audio File Player

WKAudioFilePlayer を利用してオーディオファイルを再生するサンプル。


参考記事:watchOS 2 のオーディオ録音、再生機能を利用する - Qiita

Network Access

NSURLSession を用いてネットワーク経由で画像データを取得するサンプル。KAMEDAkyosuke さんより pull request いただきました。

Known Issues

ハッカソンでガッと仕上げたこともあり、既に入っているサンプルも以下の点がまだ未完成です。

  • Audio Rec & Play
    • 実機での録音ができない。シミュレータでは可
    • 録音音声をshared containerに保存する必要がある。そうするとOSSとして試すハードルが上がってしまうのが悩みどころ。。
  • HeartRate
    • 完全に未完成。いつかやります
  • Open System URL
    • Phoneを押しても電話アプリが起動しない
    • ドキュメント通りにやってるつもりだけど・・・?
    • `sms:` は同様のやり方で動作している


あと、ジャイロは実機でもとれてませんが、実装は正しいと思ってるので一応サンプルとしては成立してるのかなと(実装間違ってたらプルリクください!)


ClockKit、WatchConnectivity は試してサンプルを入れる予定です。(2015.6.16追記:Watch Connectivity はひとつ追加しましたが、引き続きファイル送信等も試して追加する予定)

サンフランシスコで開催された  Watch Hackathon で入賞しました!

WWDC会期中にドキュメント読みつつちまちまサンプル実装はしてたのですが、WWDC終了直後の週末に Apple Watch のハッカソン がタイミングよくサンフランシスコで開催されていたので、そこでいったん仕上げて GitHub で公開し、緊張しつつ英語でプレゼンしたところ・・・なんと!賞をいただいてしまいました!!!!



コミュニティへの貢献を評価していただけたようです。英語力はプレゼンター随一の下手さだったと思いますが、ちゃんと伝わったようで、プレゼン直後、いろんな人が寄ってきてくれて「あんた、ナイスだ!」「7、8の頃から見てるよ、会えて嬉しいよ」みたいなことを言っていただけたのがとても嬉しかったです。



こんなときの挨拶用にと iOS Sampler ステッカーをつくって持っていったのが役立ちました。



あと少し残ってるので、欲しい方はお声がけください!(iOS 9 が出るまでしか使えないデザインなのでw)


関連記事:

FAQ: iOS-9-Sampler も出すの?

今回はたまたまハッカソンがあったのと、watchOS 2 のサンプルは基本的なものが多いので、早く出すことにこそ意味があるだろう、ということで即時公開しましたが、iOS-9-Sampler はいつも通り正式リリースに合わせて公開する予定です。




そんなわけで、引き続き watchOS-2-Sampler をよろしくお願いします!

*1:たとえば watchOS 1 から WatchKit Extension では Core Motion は使えましたが、それは単にiPhone側の機能を利用するだけのものなので「新機能」であるとはいえません。が、watchOS 2 ではウォッチ側で動作するようになったので、watchOS にとっては「新機能」です。実際、WWDC 以降、iOS Developer Library とは別に watchOS Developer Library がオープンし、watchOS 側で利用できるフレームワーク群のドキュメント類が別途管理されるようになっています。(Mac。には以前からあった Core Image が、iOS では 5 から新機能として加わった、みたいなもの。・・・というたとえは余計わかりにくいでしょうか・・・?)