SlideShare a Scribd company logo
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
• presentAudioRecordingContr
ollerWithOutputURL:preset:
maximumDuration:actionTitl
e:completion: を呼ぶ
新たに追加されたマイク録音UI
• presentAudioRecordingContr
ollerWithOutputURL:preset:
maximumDuration:actionTitl
e:completion: を呼ぶ
• 第1引数にオーディオファイル
出力先の NSURL オブジェクト
を渡す
新たに追加されたマイク録音UI
• presentAudioRecordingContr
ollerWithOutputURL:preset:
maximumDuration:actionTitl
e:completion: を呼ぶ
• 第1引数にオーディオファイル
出力先の NSURL オブジェクト
を渡す
→ documents 配下のパスを渡す
新たに追加されたマイク録音UI
• presentAudioRecordingContr
ollerWithOutputURL:preset:
maximumDuration:actionTitl
e: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

More Related Content

watchOS 2 新機能の細かい話