watchos 2 新機能の細かい話
TRANSCRIPT
![Page 1: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/1.jpg)
watchOS 2 新機能の細かい話堤 修一 @shu223 2015.6.16 potato tips #18
![Page 2: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/2.jpg)
• 堤 修一(つつみ しゅういち)
• iOS専業フリーランス
• ブログ『Over&Out その後』
• 著書『iOS×BLE Core Bluetoothプログラミング』『iOSアプリ開発 達人のレシピ100』
自己紹介
![Page 3: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/3.jpg)
お手伝いしたプロダクト(BLE関連)
Music for the Deaf
![Page 4: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/4.jpg)
iOS Sampler シリーズ
![Page 9: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/9.jpg)
watchOS-2-Sampler
![Page 10: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/10.jpg)
watchOS-2-Sampler• watchOS 2 新機能のサンプルコード集
![Page 11: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/11.jpg)
watchOS-2-Sampler• watchOS 2 新機能のサンプルコード集
• 現在の収録サンプル:14種類 - Accelerometer - Gyroscope - Pedometer - Heart Rate - Table Animations - Animated Properties - Audio Rec & Play - Picker Styles - Taptic Engine - Alert - Animation with Digital Crown - Interactive Messaging - Open System URL - Audio File Player
![Page 12: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/12.jpg)
今日話すこと
![Page 13: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/13.jpg)
今日話すこと• watchOS-2-Sampler 実装にあたって気付いた細かい諸々について
![Page 14: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/14.jpg)
今日話すこと• watchOS-2-Sampler 実装にあたって気付いた細かい諸々について- 新機能やそのサンプルをひとつひとつ紹介するのではなく、実装上の注意点とか、調べてわかったこととか
![Page 15: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/15.jpg)
今日話すこと• watchOS-2-Sampler 実装にあたって気付いた細かい諸々について- 新機能やそのサンプルをひとつひとつ紹介するのではなく、実装上の注意点とか、調べてわかったこととか
- 全部で5つ
![Page 16: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/16.jpg)
今日話すこと• watchOS-2-Sampler 実装にあたって気付いた細かい諸々について- 新機能やそのサンプルをひとつひとつ紹介するのではなく、実装上の注意点とか、調べてわかったこととか
- 全部で5つ
※用いている画像はすべてAppleによる公開ドキュメント(WWDCセッション動画やスライドetc..)からのものです
![Page 17: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/17.jpg)
1/5 2つのアセットカタログの
使い分け
![Page 18: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/18.jpg)
watchOS 2 から、ネイティブ動作するようになった!
![Page 19: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/19.jpg)
watchOS 2 から、ネイティブ動作するようになった!
→ Extension のコードもウォッチ側で実行される
![Page 20: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/20.jpg)
watchOS 2 から、ネイティブ動作するようになった!
→ Extension のコードもウォッチ側で実行される
→ Watch Extension の Asset Catalog も、Watch App の
Asset Catalog もウォッチ側にある
![Page 21: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/21.jpg)
watchOS 2 から、ネイティブ動作するようになった!
→ Extension のコードもウォッチ側で実行される
→ Watch Extension の Asset Catalog も、Watch App の
Asset Catalog もウォッチ側にある
→ どっちに置いてもいいんじゃ・・・?
![Page 22: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/22.jpg)
watchOS 2 から、ネイティブ動作するようになった!
→ Extension のコードもウォッチ側で実行される
→ Watch Extension の Asset Catalog も、Watch App の
Asset Catalog もウォッチ側にある
→ どっちに置いてもいいんじゃ・・・?
→ そんなことはない!
![Page 23: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/23.jpg)
Watch Extension 側リソースを利用するケース
• wathOS-2-Sampler の Coordinated Animations サンプル
![Page 24: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/24.jpg)
Watch Extension 側リソースを利用するケース
• wathOS-2-Sampler の Coordinated Animations サンプル
![Page 25: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/25.jpg)
Watch App 側リソースを利用するケース
• wathOS-2-Sampler の Picker Styles サンプル
![Page 26: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/26.jpg)
Watch App 側リソースを利用するケース
• wathOS-2-Sampler の Picker Styles サンプル
![Page 27: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/27.jpg)
• Watch App 側リソースを利用
![Page 28: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/28.jpg)
• Watch App 側リソースを利用
- WKImage や WKInterfaceImage 等の WatchKit のクラスから name
で参照する場合
![Page 29: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/29.jpg)
• Watch App 側リソースを利用
- WKImage や WKInterfaceImage 等の WatchKit のクラスから name
で参照する場合
- IB からセットする場合
![Page 30: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/30.jpg)
• Watch App 側リソースを利用
- WKImage や WKInterfaceImage 等の WatchKit のクラスから name
で参照する場合
- IB からセットする場合- (名前をセットしたものがプレビューされてるだけなので、結局は上と同じ)
![Page 31: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/31.jpg)
• Watch App 側リソースを利用
- WKImage や WKInterfaceImage 等の WatchKit のクラスから name
で参照する場合
- IB からセットする場合- (名前をセットしたものがプレビューされてるだけなので、結局は上と同じ)
• Watch Extension 側リソースを利用
![Page 32: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/32.jpg)
• Watch App 側リソースを利用
- WKImage や WKInterfaceImage 等の WatchKit のクラスから name
で参照する場合
- IB からセットする場合- (名前をセットしたものがプレビューされてるだけなので、結局は上と同じ)
• Watch Extension 側リソースを利用
- UIImage 等の WatchKit 以外のクラスから参照する場合
![Page 33: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/33.jpg)
• Watch App 側リソースを利用
- WKImage や WKInterfaceImage 等の WatchKit のクラスから name
で参照する場合
- IB からセットする場合- (名前をセットしたものがプレビューされてるだけなので、結局は上と同じ)
• Watch Extension 側リソースを利用
- UIImage 等の WatchKit 以外のクラスから参照する場合
• 参考
![Page 34: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/34.jpg)
• Watch App 側リソースを利用
- WKImage や WKInterfaceImage 等の WatchKit のクラスから name
で参照する場合
- IB からセットする場合- (名前をセットしたものがプレビューされてるだけなので、結局は上と同じ)
• Watch Extension 側リソースを利用
- UIImage 等の WatchKit 以外のクラスから参照する場合
• 参考
- WWDC15 セッション 207 “WatchKit in depth Part1” スライドp40~
![Page 35: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/35.jpg)
2/5 メディアデータの 保存場所
![Page 36: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/36.jpg)
新たに追加されたマイク録音UI
![Page 37: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/37.jpg)
新たに追加されたマイク録音UI• presentAudioRecordingControllerWithOutputURL:preset:maximumDuration:actionTitle:completion: を呼ぶ
![Page 38: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/38.jpg)
新たに追加されたマイク録音UI• presentAudioRecordingControllerWithOutputURL:preset:maximumDuration:actionTitle:completion: を呼ぶ
• 第1引数にオーディオファイル出力先の NSURL オブジェクトを渡す
![Page 39: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/39.jpg)
新たに追加されたマイク録音UI• presentAudioRecordingControllerWithOutputURL:preset:maximumDuration:actionTitle:completion: を呼ぶ
• 第1引数にオーディオファイル出力先の NSURL オブジェクトを渡す
→ documents 配下のパスを渡す
![Page 40: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/40.jpg)
新たに追加されたマイク録音UI• presentAudioRecordingControllerWithOutputURL:preset:maximumDuration:actionTitle:completion: を呼ぶ
• 第1引数にオーディオファイル出力先の NSURL オブジェクトを渡す
→ documents 配下のパスを渡す
→ シミュレータでは動作するのに、実機で動作しない!
![Page 41: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/41.jpg)
Must use a shared container
![Page 42: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/42.jpg)
• って WWDC15 セッション207 “WatchKit in depth part1” スライド p59 に書いてある
Must use a shared container
![Page 43: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/43.jpg)
• って WWDC15 セッション207 “WatchKit in depth part1” スライド p59 に書いてある
• “WatchKitAudioRecorder” の実装もそうなってる
Must use a shared container
![Page 44: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/44.jpg)
• って WWDC15 セッション207 “WatchKit in depth part1” スライド p59 に書いてある
• “WatchKitAudioRecorder” の実装もそうなってる
• Watch の Extension と App で “App Groups” を有効にする
Must use a shared container
![Page 45: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/45.jpg)
• って WWDC15 セッション207 “WatchKit in depth part1” スライド p59 に書いてある
• “WatchKitAudioRecorder” の実装もそうなってる
• Watch の Extension と App で “App Groups” を有効にする
• なぜ?(メディアリソースは Extension と App で共用するから?)
Must use a shared container
![Page 46: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/46.jpg)
3/5 WKAudioFilePlayer
![Page 47: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/47.jpg)
• 要ウォッチとの Bluetooth Headset ペアリング
![Page 48: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/48.jpg)
• 要ウォッチとの Bluetooth Headset ペアリング
- ウォッチ側スピーカーからのオーディオファイル再生は presentMediaPlayerControllerWithURL:options:completion: を利用しないとできない?
![Page 49: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/49.jpg)
• 要ウォッチとの Bluetooth Headset ペアリング
- ウォッチ側スピーカーからのオーディオファイル再生は presentMediaPlayerControllerWithURL:options:completion: を利用しないとできない?
• WKAudioFilePlayerItem: でオブジェクト生成直後に play しようとしてはいけない
![Page 50: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/50.jpg)
• 要ウォッチとの Bluetooth Headset ペアリング
- ウォッチ側スピーカーからのオーディオファイル再生は presentMediaPlayerControllerWithURL:options:completion: を利用しないとできない?
• WKAudioFilePlayerItem: でオブジェクト生成直後に play しようとしてはいけない
×
![Page 51: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/51.jpg)
• 要ウォッチとの Bluetooth Headset ペアリング
- ウォッチ側スピーカーからのオーディオファイル再生は presentMediaPlayerControllerWithURL:options:completion: を利用しないとできない?
• WKAudioFilePlayerItem: でオブジェクト生成直後に play しようとしてはいけない
• status プロパティが ReadyToPlay になれば再生OK
×
![Page 52: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/52.jpg)
4/5 ウォッチ側 Bluetooth の
(直接)利用
![Page 53: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/53.jpg)
• watchOS Developer Library には Core Bluetooth のドキュメントはない
![Page 54: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/54.jpg)
• watchOS Developer Library には Core Bluetooth のドキュメントはない
• ドキュメントは置き忘れてるだけかもしれない
![Page 55: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/55.jpg)
• watchOS Developer Library には Core Bluetooth のドキュメントはない
• ドキュメントは置き忘れてるだけかもしれない
• ということで「念のため」 Watch Extension 側のコードで import してみた
![Page 56: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/56.jpg)
• watchOS Developer Library には Core Bluetooth のドキュメントはない
• ドキュメントは置き忘れてるだけかもしれない
• ということで「念のため」 Watch Extension 側のコードで import してみた
![Page 57: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/57.jpg)
• watchOS Developer Library には Core Bluetooth のドキュメントはない
• ドキュメントは置き忘れてるだけかもしれない
• ということで「念のため」 Watch Extension 側のコードで import してみた
• (やはり)ダメでした・・・
![Page 58: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/58.jpg)
5/5 Watch Connectivity
のメッセージ送信可否の条件
![Page 59: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/59.jpg)
• Watch Connectivity
![Page 60: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/60.jpg)
• Watch Connectivity
- Phone - Watch 間で相互にメッセージやデータを送れる
![Page 61: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/61.jpg)
• Watch Connectivity
- Phone - Watch 間で相互にメッセージやデータを送れる
- 前からあった openParent~ は Watch → Phone だけ(ただし Phone から Reply を返すことは可)
![Page 62: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/62.jpg)
• Watch Connectivity
- Phone - Watch 間で相互にメッセージやデータを送れる
- 前からあった openParent~ は Watch → Phone だけ(ただし Phone から Reply を返すことは可)
• メッセージ送信可否のチェック
![Page 63: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/63.jpg)
Reachable なケース その1:
両者共にフォアグラウンド
![Page 64: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/64.jpg)
Reachable なケース その2:
iOS側だけバックグラウンド
![Page 65: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/65.jpg)
• 要は、Watch App がバックグラウンドのときは iPhone
側からのメッセージを受け取れない
![Page 66: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/66.jpg)
• 要は、Watch App がバックグラウンドのときは iPhone
側からのメッセージを受け取れない
• あくまで WCSession の reachable の話。Application
context や User info transfer, File transfer を使えば Wacth
App がバックグラウンドのときも Phone → Watch へ情報を送れるかも(後日試してサンプル追加予定)
![Page 67: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/67.jpg)
• 要は、Watch App がバックグラウンドのときは iPhone
側からのメッセージを受け取れない
• あくまで WCSession の reachable の話。Application
context や User info transfer, File transfer を使えば Wacth
App がバックグラウンドのときも Phone → Watch へ情報を送れるかも(後日試してサンプル追加予定)
• 参考:WWDC15 セッション713 “Introducing Watch Connectivity”
![Page 68: watchOS 2 新機能の細かい話](https://reader030.vdocuments.pub/reader030/viewer/2022013108/55b7ce0ebb61eb38758b46af/html5/thumbnails/68.jpg)
watchOS-2-Sampler
GitHub: shu223/watchOS-2-Sampler
Blog: watchOS 2 の新機能のサンプルコード集『watchOS-2-Sampler』
- Accelerometer - Gyroscope - Pedometer - Heart Rate - Table Animations - Animated Properties - Audio Rec & Play - Picker Styles - Taptic Engine - Alert - Animation with Digital Crown - Interactive Messaging - Open System URL - Audio File Player