watchos 2 新機能の細かい話

Post on 29-Jul-2015

6.924 Views

Category:

Mobile

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

• iOS専業フリーランス

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

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

自己紹介

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

Music for the Deaf

iOS Sampler シリーズ

iOS Sampler シリーズ

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

iOS Sampler シリーズ

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

iOS Sampler シリーズ

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

• 累計5,000スター超!

iOS Sampler シリーズ

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

• 累計5,000スター超!

• github.com/shu223

watchOS-2-Sampler

watchOS-2-Sampler• 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

今日話すこと

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

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

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

- 全部で5つ

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

- 全部で5つ

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

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

使い分け

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

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

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

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

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

→ Watch Extension の Asset Catalog も、Watch App の

Asset Catalog もウォッチ側にある

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

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

→ Watch Extension の Asset Catalog も、Watch App の

Asset Catalog もウォッチ側にある

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

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

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

→ Watch Extension の Asset Catalog も、Watch App の

Asset Catalog もウォッチ側にある

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

→ そんなことはない!

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

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

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

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

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

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

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

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

• Watch App 側リソースを利用

• Watch App 側リソースを利用

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

で参照する場合

• Watch App 側リソースを利用

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

で参照する場合

- IB からセットする場合

• Watch App 側リソースを利用

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

で参照する場合

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

• Watch App 側リソースを利用

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

で参照する場合

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

• Watch Extension 側リソースを利用

• Watch App 側リソースを利用

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

で参照する場合

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

• Watch Extension 側リソースを利用

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

• Watch App 側リソースを利用

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

で参照する場合

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

• Watch Extension 側リソースを利用

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

• 参考

• Watch App 側リソースを利用

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

で参照する場合

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

• Watch Extension 側リソースを利用

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

• 参考

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

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

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

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

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

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

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

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

→ documents 配下のパスを渡す

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

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

→ documents 配下のパスを渡す

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

Must use a shared container

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

Must use a shared container

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

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

Must use a shared container

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

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

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

Must use a shared container

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

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

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

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

Must use a shared container

3/5 WKAudioFilePlayer

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

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

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

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

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

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

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

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

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

×

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

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

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

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

×

4/5 ウォッチ側 Bluetooth の

(直接)利用

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

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

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

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

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

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

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

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

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

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

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

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

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

5/5 Watch Connectivity

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

• Watch Connectivity

• Watch Connectivity

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

• Watch Connectivity

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

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

• Watch Connectivity

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

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

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

Reachable なケース その1:

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

Reachable なケース その2:

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

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

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

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

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

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

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

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

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

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

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

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

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

• 参考:WWDC15 セッション713 “Introducing Watch Connectivity”

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

top related