watchos 2 新機能の細かい話

68
watchOS 2 新機能の細かい話 修一 @shu223 2015.6.16 potato tips #18

Upload: shuichi-tsutsumi

Post on 29-Jul-2015

6.924 views

Category:

Mobile


2 download

TRANSCRIPT

Page 1: watchOS 2 新機能の細かい話

watchOS 2 新機能の細かい話堤 修一 @shu223 2015.6.16 potato tips #18

Page 2: watchOS 2 新機能の細かい話

• 堤 修一(つつみ しゅういち)

• iOS専業フリーランス

• ブログ『Over&Out その後』

• 著書『iOS×BLE Core Bluetoothプログラミング』『iOSアプリ開発 達人のレシピ100』

自己紹介

Page 3: watchOS 2 新機能の細かい話

お手伝いしたプロダクト(BLE関連)

Music for the Deaf

Page 4: watchOS 2 新機能の細かい話

iOS Sampler シリーズ

Page 5: watchOS 2 新機能の細かい話

iOS Sampler シリーズ

• iOS新機能のサンプルコード集

Page 6: watchOS 2 新機能の細かい話

iOS Sampler シリーズ

• iOS新機能のサンプルコード集

Page 7: watchOS 2 新機能の細かい話

iOS Sampler シリーズ

• iOS新機能のサンプルコード集

• 累計5,000スター超!

Page 8: watchOS 2 新機能の細かい話

iOS Sampler シリーズ

• iOS新機能のサンプルコード集

• 累計5,000スター超!

• github.com/shu223

Page 9: watchOS 2 新機能の細かい話

watchOS-2-Sampler

Page 10: watchOS 2 新機能の細かい話

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

Page 11: watchOS 2 新機能の細かい話

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 新機能の細かい話

今日話すこと

Page 13: watchOS 2 新機能の細かい話

今日話すこと• watchOS-2-Sampler 実装にあたって気付いた細かい諸々について

Page 14: watchOS 2 新機能の細かい話

今日話すこと• watchOS-2-Sampler 実装にあたって気付いた細かい諸々について- 新機能やそのサンプルをひとつひとつ紹介するのではなく、実装上の注意点とか、調べてわかったこととか

Page 15: watchOS 2 新機能の細かい話

今日話すこと• watchOS-2-Sampler 実装にあたって気付いた細かい諸々について- 新機能やそのサンプルをひとつひとつ紹介するのではなく、実装上の注意点とか、調べてわかったこととか

- 全部で5つ

Page 16: watchOS 2 新機能の細かい話

今日話すこと• watchOS-2-Sampler 実装にあたって気付いた細かい諸々について- 新機能やそのサンプルをひとつひとつ紹介するのではなく、実装上の注意点とか、調べてわかったこととか

- 全部で5つ

※用いている画像はすべてAppleによる公開ドキュメント(WWDCセッション動画やスライドetc..)からのものです

Page 17: watchOS 2 新機能の細かい話

1/5 2つのアセットカタログの

使い分け

Page 18: watchOS 2 新機能の細かい話

watchOS 2 から、ネイティブ動作するようになった!

Page 19: watchOS 2 新機能の細かい話

watchOS 2 から、ネイティブ動作するようになった!

→ Extension のコードもウォッチ側で実行される

Page 20: watchOS 2 新機能の細かい話

watchOS 2 から、ネイティブ動作するようになった!

→ Extension のコードもウォッチ側で実行される

→ Watch Extension の Asset Catalog も、Watch App の

Asset Catalog もウォッチ側にある

Page 21: watchOS 2 新機能の細かい話

watchOS 2 から、ネイティブ動作するようになった!

→ Extension のコードもウォッチ側で実行される

→ Watch Extension の Asset Catalog も、Watch App の

Asset Catalog もウォッチ側にある

→ どっちに置いてもいいんじゃ・・・?

Page 22: watchOS 2 新機能の細かい話

watchOS 2 から、ネイティブ動作するようになった!

→ Extension のコードもウォッチ側で実行される

→ Watch Extension の Asset Catalog も、Watch App の

Asset Catalog もウォッチ側にある

→ どっちに置いてもいいんじゃ・・・?

→ そんなことはない!

Page 23: watchOS 2 新機能の細かい話

Watch Extension 側リソースを利用するケース

• wathOS-2-Sampler の Coordinated Animations サンプル

Page 24: watchOS 2 新機能の細かい話

Watch Extension 側リソースを利用するケース

• wathOS-2-Sampler の Coordinated Animations サンプル

Page 25: watchOS 2 新機能の細かい話

Watch App 側リソースを利用するケース

• wathOS-2-Sampler の Picker Styles サンプル

Page 26: watchOS 2 新機能の細かい話

Watch App 側リソースを利用するケース

• wathOS-2-Sampler の Picker Styles サンプル

Page 27: watchOS 2 新機能の細かい話

• Watch App 側リソースを利用

Page 28: watchOS 2 新機能の細かい話

• Watch App 側リソースを利用

- WKImage や WKInterfaceImage 等の WatchKit のクラスから name

で参照する場合

Page 29: watchOS 2 新機能の細かい話

• Watch App 側リソースを利用

- WKImage や WKInterfaceImage 等の WatchKit のクラスから name

で参照する場合

- IB からセットする場合

Page 30: watchOS 2 新機能の細かい話

• Watch App 側リソースを利用

- WKImage や WKInterfaceImage 等の WatchKit のクラスから name

で参照する場合

- IB からセットする場合- (名前をセットしたものがプレビューされてるだけなので、結局は上と同じ)

Page 31: watchOS 2 新機能の細かい話

• Watch App 側リソースを利用

- WKImage や WKInterfaceImage 等の WatchKit のクラスから name

で参照する場合

- IB からセットする場合- (名前をセットしたものがプレビューされてるだけなので、結局は上と同じ)

• Watch Extension 側リソースを利用

Page 32: watchOS 2 新機能の細かい話

• Watch App 側リソースを利用

- WKImage や WKInterfaceImage 等の WatchKit のクラスから name

で参照する場合

- IB からセットする場合- (名前をセットしたものがプレビューされてるだけなので、結局は上と同じ)

• Watch Extension 側リソースを利用

- UIImage 等の WatchKit 以外のクラスから参照する場合

Page 33: watchOS 2 新機能の細かい話

• Watch App 側リソースを利用

- WKImage や WKInterfaceImage 等の WatchKit のクラスから name

で参照する場合

- IB からセットする場合- (名前をセットしたものがプレビューされてるだけなので、結局は上と同じ)

• Watch Extension 側リソースを利用

- UIImage 等の WatchKit 以外のクラスから参照する場合

• 参考

Page 34: watchOS 2 新機能の細かい話

• Watch App 側リソースを利用

- WKImage や WKInterfaceImage 等の WatchKit のクラスから name

で参照する場合

- IB からセットする場合- (名前をセットしたものがプレビューされてるだけなので、結局は上と同じ)

• Watch Extension 側リソースを利用

- UIImage 等の WatchKit 以外のクラスから参照する場合

• 参考

- WWDC15 セッション 207 “WatchKit in depth Part1” スライドp40~

Page 35: watchOS 2 新機能の細かい話

2/5 メディアデータの 保存場所

Page 36: watchOS 2 新機能の細かい話

新たに追加されたマイク録音UI

Page 37: watchOS 2 新機能の細かい話

新たに追加されたマイク録音UI• presentAudioRecordingControllerWithOutputURL:preset:maximumDuration:actionTitle:completion: を呼ぶ

Page 38: watchOS 2 新機能の細かい話

新たに追加されたマイク録音UI• presentAudioRecordingControllerWithOutputURL:preset:maximumDuration:actionTitle:completion: を呼ぶ

• 第1引数にオーディオファイル出力先の NSURL オブジェクトを渡す

Page 39: watchOS 2 新機能の細かい話

新たに追加されたマイク録音UI• presentAudioRecordingControllerWithOutputURL:preset:maximumDuration:actionTitle:completion: を呼ぶ

• 第1引数にオーディオファイル出力先の NSURL オブジェクトを渡す

→ documents 配下のパスを渡す

Page 40: watchOS 2 新機能の細かい話

新たに追加されたマイク録音UI• presentAudioRecordingControllerWithOutputURL:preset:maximumDuration:actionTitle:completion: を呼ぶ

• 第1引数にオーディオファイル出力先の NSURL オブジェクトを渡す

→ documents 配下のパスを渡す

→ シミュレータでは動作するのに、実機で動作しない!

Page 41: watchOS 2 新機能の細かい話

Must use a shared container

Page 42: watchOS 2 新機能の細かい話

• って WWDC15 セッション207 “WatchKit in depth part1” スライド p59 に書いてある

Must use a shared container

Page 43: watchOS 2 新機能の細かい話

• って WWDC15 セッション207 “WatchKit in depth part1” スライド p59 に書いてある

• “WatchKitAudioRecorder” の実装もそうなってる

Must use a shared container

Page 44: watchOS 2 新機能の細かい話

• って WWDC15 セッション207 “WatchKit in depth part1” スライド p59 に書いてある

• “WatchKitAudioRecorder” の実装もそうなってる

• Watch の Extension と App で “App Groups” を有効にする

Must use a shared container

Page 45: watchOS 2 新機能の細かい話

• って WWDC15 セッション207 “WatchKit in depth part1” スライド p59 に書いてある

• “WatchKitAudioRecorder” の実装もそうなってる

• Watch の Extension と App で “App Groups” を有効にする

• なぜ?(メディアリソースは Extension と App で共用するから?)

Must use a shared container

Page 46: watchOS 2 新機能の細かい話

3/5 WKAudioFilePlayer

Page 47: watchOS 2 新機能の細かい話

• 要ウォッチとの Bluetooth Headset ペアリング

Page 48: watchOS 2 新機能の細かい話

• 要ウォッチとの Bluetooth Headset ペアリング

- ウォッチ側スピーカーからのオーディオファイル再生は presentMediaPlayerControllerWithURL:options:completion: を利用しないとできない?

Page 49: watchOS 2 新機能の細かい話

• 要ウォッチとの Bluetooth Headset ペアリング

- ウォッチ側スピーカーからのオーディオファイル再生は presentMediaPlayerControllerWithURL:options:completion: を利用しないとできない?

• WKAudioFilePlayerItem: でオブジェクト生成直後に play しようとしてはいけない

Page 50: watchOS 2 新機能の細かい話

• 要ウォッチとの Bluetooth Headset ペアリング

- ウォッチ側スピーカーからのオーディオファイル再生は presentMediaPlayerControllerWithURL:options:completion: を利用しないとできない?

• WKAudioFilePlayerItem: でオブジェクト生成直後に play しようとしてはいけない

×

Page 51: watchOS 2 新機能の細かい話

• 要ウォッチとの Bluetooth Headset ペアリング

- ウォッチ側スピーカーからのオーディオファイル再生は presentMediaPlayerControllerWithURL:options:completion: を利用しないとできない?

• WKAudioFilePlayerItem: でオブジェクト生成直後に play しようとしてはいけない

• status プロパティが ReadyToPlay になれば再生OK

×

Page 52: watchOS 2 新機能の細かい話

4/5 ウォッチ側 Bluetooth の

(直接)利用

Page 53: watchOS 2 新機能の細かい話

• watchOS Developer Library には Core Bluetooth のドキュメントはない

Page 54: watchOS 2 新機能の細かい話

• watchOS Developer Library には Core Bluetooth のドキュメントはない

• ドキュメントは置き忘れてるだけかもしれない

Page 55: watchOS 2 新機能の細かい話

• watchOS Developer Library には Core Bluetooth のドキュメントはない

• ドキュメントは置き忘れてるだけかもしれない

• ということで「念のため」 Watch Extension 側のコードで import してみた

Page 56: watchOS 2 新機能の細かい話

• watchOS Developer Library には Core Bluetooth のドキュメントはない

• ドキュメントは置き忘れてるだけかもしれない

• ということで「念のため」 Watch Extension 側のコードで import してみた

Page 57: watchOS 2 新機能の細かい話

• watchOS Developer Library には Core Bluetooth のドキュメントはない

• ドキュメントは置き忘れてるだけかもしれない

• ということで「念のため」 Watch Extension 側のコードで import してみた

• (やはり)ダメでした・・・

Page 58: watchOS 2 新機能の細かい話

5/5 Watch Connectivity

のメッセージ送信可否の条件

Page 59: watchOS 2 新機能の細かい話

• Watch Connectivity

Page 60: watchOS 2 新機能の細かい話

• Watch Connectivity

- Phone - Watch 間で相互にメッセージやデータを送れる

Page 61: watchOS 2 新機能の細かい話

• Watch Connectivity

- Phone - Watch 間で相互にメッセージやデータを送れる

- 前からあった openParent~ は Watch → Phone だけ(ただし Phone から Reply を返すことは可)

Page 62: watchOS 2 新機能の細かい話

• Watch Connectivity

- Phone - Watch 間で相互にメッセージやデータを送れる

- 前からあった openParent~ は Watch → Phone だけ(ただし Phone から Reply を返すことは可)

• メッセージ送信可否のチェック

Page 63: watchOS 2 新機能の細かい話

Reachable なケース その1:

両者共にフォアグラウンド

Page 64: watchOS 2 新機能の細かい話

Reachable なケース その2:

iOS側だけバックグラウンド

Page 65: watchOS 2 新機能の細かい話

• 要は、Watch App がバックグラウンドのときは iPhone

側からのメッセージを受け取れない

Page 66: watchOS 2 新機能の細かい話

• 要は、Watch App がバックグラウンドのときは iPhone

側からのメッセージを受け取れない

• あくまで WCSession の reachable の話。Application

context や User info transfer, File transfer を使えば Wacth

App がバックグラウンドのときも Phone → Watch へ情報を送れるかも(後日試してサンプル追加予定)

Page 67: watchOS 2 新機能の細かい話

• 要は、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 新機能の細かい話

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