Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

watchOS 2 新機能の細かい話

21,874 views

Published on

watchOS-2-Sampler 実装にあたって気付いた細かい諸々について(実装上の注意点、調べてわかったこと etc..)

Published in: Mobile

watchOS 2 新機能の細かい話

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

×