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

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

どんな機能が追加されたのかは既に多くのキーノートのまとめ記事などで紹介されてはいますが、<b>新しいAPIはどう使うのか、実際に何がどこまでできるのか、快適に動作するのか</b>、といった具体的なところが、英語のドキュメントや動画や記事をながめているだけだと正直あまりよくわかりません。やはり実際にコード書いて動かしてみるのが一番わかりやすい、ということで、


<b>watchOS 2 の新機能のサンプルコード集『[watchOS-2-Sampler](https://github.com/shu223/watchOS-2-Sampler)』</b>


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


##Contents

今のところ**18個**のサンプルが入っています。まだまだ少ないですが、随時追加していく予定です。機能追加等のプルリク大歓迎です！

<img src="http://f.st-hatena.com/images/fotolife/s/shu223/20150614/20150614131615.jpg" width="242">


###Animated Properties

`animateWithDuration:animations:` メソッドを利用して、<span class="deco" style="font-weight:bold;">アニメーションで拡大縮小やフェードイン／アウト、移動（実際には Alignment）</span>を行うサンプル。


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/animation.gif">


###Table Animations

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


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/tableanim.gif">


###Picker Styles

WKInterfacePicker の<b>全スタイル（List, Sequence, Stack）</b>を試せるサンプル。


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/picker.png" width="136">


###Taptic Engine

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


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/taptic.png" width="136">


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


```swift:swift
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:` メソッドを利用して再生するサンプル。


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/rec_play.png" width="275">


参考記事：

- http://qiita.com/shu223/items/6fdc1ecf9e8c56de454d


###Animation with Digital Crown

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


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/crownanim.gif">


###Draw Paths

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


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/bezier.png" width="136">


###Gradations

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


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/gradation.png" width="136">


<span class="deco" style="font-size:small;">※Core Graphics を用いたパス描画やグラデーション描画についての詳細は、こちらの記事・スライドもご参照ください。</span>

- http://d.hatena.ne.jp/shu223/20150714/1436875676
- http://www.slideshare.net/t26v0748/core-graphics-on-watchos-2



###Heart Rate

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


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/heartrate.png" width="136">


[kitasuke](https://github.com/kitasuke) さんより pull request いただきました。


###Accelerometer

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


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/acc.png" width="136">


###Gyroscope

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


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/gyro.png" width="136">


[^1]: 現行 Apple Watch では CMMotionManager の `gyroAvailable` が必ず `false` を返してくるので、<span class="deco" style="color:#FF0000;">今のところ実質的に利用できません</span>。（API的には利用可能であるためサンプルに残してあります）


###Device Motion

Core Motion を用いてデバイスのモーションデータを取得するサンプル。 [^2] 


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/devmotion.png" width="136">


[^2]: 現行 Apple Watch では CMMotionManager の `deviceMotionAvailable` が必ず `false` を返してくるので、<span class="deco" style="color:#FF0000;">今のところ実質的に利用できません</span>。（API的には利用可能であるためサンプルに残してあります）


###Pedometer

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


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/pedometer.png" width="136">


###Alert

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


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/alert.png" width="414">


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


```swift:swift
enum WKAlertControllerStyle : Int {
    
    case Alert
    case SideBySideButtonsAlert
    case ActionSheet
}
```


###Interactive Messaging

<span class="deco" style="font-weight:bold;">iPhone と Apple Watch で相互にメッセージをやりとり</span>するサンプル。Watch Connectivity フレームワークを利用。


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/interactive.png" width="136">


###Audio File Player

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


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/audiofile.png" width="136">


<span class="deco" style="color:#FF0000;font-size:small;">※要Bluetoothヘッドセット</span>


###Open System URL

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


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/open.png" width="136">


###Network Access

NSURLSession を用いてネットワーク経由で画像データを取得するサンプル。[KAMEDAkyosuke](https://github.com/shu223/watchOS-2-Sampler/pulls/KAMEDAkyosuke) さんより pull request いただきました。


<img src="https://raw.githubusercontent.com/shu223/watchOS-2-Sampler/master/ResourcesForREADME/network.png" width="136">


##おまけ：watchOS 2 で使えるようになった従来フレームワークのリスト

- MapKit
- UIKit
- WatchKit
- CoreGraphics
- ImageIO
- CFNetwork
- Contacts
- CoreData
- CoreFoundation
- CoreLocation
- CoreMotion
- EventKit
- Foundation
- HealthKit
- HomeKit
- MobileCoreServices
- PassKit
- SystemConfiguration
- Core OS Layer
- Security


##iOS-9-Sampler

iOS 9 の新機能のサンプル集はこちらにあります。

- [iOS 9 の新機能のサンプルコード集](http://qiita.com/shu223/items/467dc48b9624d3195be2)

<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/map.gif">

<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/imagefilters.gif">

<img src="https://raw.githubusercontent.com/shu223/iOS-9-Sampler/master/ResourcesForREADME/uistackview.gif">


##関連

- [watchOS 2 で本当にウォッチ側で処理されているのか確認する](http://qiita.com/shu223/items/f6f3f70c87eb3e465750)
- [iOS 8 の新機能のサンプルコード集『iOS8-Sampler』](http://qiita.com/shu223/items/5c5df2ad9484c7abdb30)
- [iOS 7 の新機能のサンプルコード集『iOS7 Sampler』](http://qiita.com/shu223/items/3d139133c9116f115d59)