その後のその後

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

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

昨日、ついに watchOS 2 が正式リリースされました。開発者待望のネイティブ動作するウォッチアプリ対応バージョンです。このアップデートに伴い、WatchKit には多くの機能が追加され、ClockKit や WatchConnectivity 等の新しいフレームワークも登場しました。さらに、iOSでは従来から使えたフレームワーク群(記事末尾にまとめました)もウォッチ側で使えるようになったことから、これらもwatchOSにとっては新APIであるといえます。


新しいAPIはどう実装するのか、実際に何がどこまでできるのか、快適に動作するのか、といった具体的なところを実際にコードを書いて動かして理解すべく、watchOS 2 の新機能のサンプルコード寄せ集めアプリ


watchOS-2-Sampler



をつくりました。ソースコードは GitHub に置いてあります。


実はこのアプリは WWDC15 での発表があったその週につくって公開したのですが、NDA中のためスクショは貼れないし、悪名高い watchOS 2 ベータ版を入れてウォッチが文鎮化するのを恐れ、アップデートを避ける賢明な開発者の方々も多かった(ので本サンプルを試してくれる人も少なかった)ようなので、今回READMEを整備したり未完成のサンプルを除外する等の整理を行い、改めて正式リリースとした次第です。

Contents

今のところ18個のサンプルが入っています。随時追加していきます。機能追加のプルリク大歓迎です!

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 を用いたパス描画やグラデーション描画についての詳細は、こちらのスライド・記事もご参照ください。


Heart Rate

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



kitasuke さんより pull request いただきました。

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

※このへんからウォッチでの挙動が気になるものを随時追加していく予定