昨日、ついに watchOS 2 が正式リリースされました。開発者待望のネイティブ動作するウォッチアプリ対応バージョンです。このアップデートに伴い、WatchKit には多くの機能が追加され、ClockKit や WatchConnectivity 等の新しいフレームワークも登場しました。さらに、iOSでは従来から使えたフレームワーク群(記事末尾にまとめました)もウォッチ側で使えるようになったことから、これらもwatchOSにとっては新APIであるといえます。
新しいAPIはどう実装するのか、実際に何がどこまでできるのか、快適に動作するのか、といった具体的なところを実際にコードを書いて動かして理解すべく、watchOS 2 の新機能のサンプルコード寄せ集めアプリ
をつくりました。ソースコードは GitHub に置いてあります。
実はこのアプリは WWDC15 での発表があったその週につくって公開したのですが、NDA中のためスクショは貼れないし、悪名高い watchOS 2 ベータ版を入れてウォッチが文鎮化するのを恐れ、アップデートを避ける賢明な開発者の方々も多かった(ので本サンプルを試してくれる人も少なかった)ようなので、今回READMEを整備したり未完成のサンプルを除外する等の整理を行い、改めて正式リリースとした次第です。
Contents
今のところ17個のサンプルが入っています。随時追加していきます。機能追加のプルリク大歓迎です!
Animated Properties
`animateWithDuration:animations:` メソッドを利用して、アニメーションで拡大縮小やフェードイン/アウト、移動(実際には Alignment)を行うサンプル。
Table Animations
WKInterfaceTable のセル(row)をアニメーション付きで insert / remove するサンプル。`insertRowsAtIndexes:withRowType:`, `removeRowsAtIndexes:` メソッドを利用。
Picker Styles
WKInterfacePicker の全スタイル(List, Sequence, Stack)を試せるサンプル。
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 }
Audio Rec & Play
`presentAudioRecordingControllerWithOutputURL:preset:maximumDuration:actionTitle:completion:` メソッドを利用して音声を録音する UI を表示し、録音したファイルを `presentMediaPlayerControllerWithURL:options:completion:` メソッドを利用して再生するサンプル。
参考記事:watchOS 2 のオーディオ録音、再生機能を利用する - Qiita
Animation with Digital Crown
デジタルクラウンの回転に合わせ、WKInterfacePicker にセットしたアニメーションを表示するサンプル。`setCoordinatedAnimations` メソッドを利用。
Draw Paths
Core Graphics を用いてパスを描画するサンプル。
Gradations
Core Graphics を用いてグラデーションを描画するサンプル。
※Core Graphics を用いたパス描画やグラデーション描画についての詳細は、こちらのスライド・記事もご参照ください。
Accelerometer
Core Motion を用いて加速度センサの値を取得するサンプル。
Gyroscope
Core Motion を用いてジャイロスコープの値を取得するサンプル。
※現行 Apple Watch では CMMotionManager の `gyroAvailable` が必ず `false` を返してくるので、今のところ実質的に利用できません。(API的には利用可能であるためサンプルに残してあります)
Device Motion
Core Motion を用いてデバイスのモーションデータを取得するサンプル。
※現行 Apple Watch では CMMotionManager の `deviceMotionAvailable` が必ず `false` を返してくるので、今のところ実質的に利用できません。(API的には利用可能であるためサンプルに残してあります)
Pedometer
CMPedometer を用いて歩数や距離、階の昇り降り情報を取得するサンプル。
Alert
`presentAlertControllerWithTitle:message:preferredStyle:actions:` メソッドで指定できる全アラートスタイル(WKAlertControllerStyle)を試せるサンプル。
ちなみに WKAlertControllerStyle は次のように定義されています。
enum WKAlertControllerStyle : Int { case Alert case SideBySideButtonsAlert case ActionSheet }
Interactive Messaging
iPhone と Apple Watch で相互にメッセージをやりとりするサンプル。Watch Connectivity フレームワークを利用。
Audio File Player
WKAudioFilePlayer を利用してオーディオファイルを再生するサンプル。
※要Bluetoothヘッドセット
Open System URL
WKExtension の `openSystemURL:` メソッドを利用して、電話およびSMSアプリを開くサンプル。
Network Access
NSURLSession を用いてネットワーク経由で画像データを取得するサンプル。KAMEDAkyosuke さんより pull request いただきました。
おわりに
iOS 9 のサンプル集はこちら!
おまけ:watchOS 2 で使えるようになった従来フレームワークのリスト
- MapKit
- UIKit
- WatchKit
- CoreGraphics
- ImageIO
- CFNetwork
- Contacts
- CoreData
- CoreFoundation
- CoreLocation
- CoreMotion
- EventKit
- Foundation
- HealthKit
- HomeKit
- MobileCoreServices
- PassKit
- SystemConfiguration
- Core OS Layer
- Security
※このへんからウォッチでの挙動が気になるものを随時追加していく予定