SlideShare una empresa de Scribd logo
1 de 51
Descargar para leer sin conexión
Watch Connectivityについて
成田 元輝
自己紹介
自己紹介
• 成田元輝(@mo_to_44)
• 株式会社ネクストでHOME SのiOS
アプリを開発しています
引越しの際に使っ
ていただけると
嬉しいです!
HOME Sアプリ作ってます!
Apple Watch対応!
現在地から家賃相場を検索したり、
全国の家賃相場を当てる家賃相場
クイズ機能!
WWDC2015行ってきました!
WWDC ホテルがなかった で検索すると
ブログが出てくるので読んでみてください
Watch Connectivity
watchOS1をおさらい
watchOS1のiPhoneとAppleWatch
WatchKit
App
iOS App
WatchKit
Extension
watchOS 1
Data
Store
Introducing Watch Connectivityより
watchOS1まで
• ExtensionがiPhone側にあった
• 基本的にiPhoneで処理される
• データもiPhone側に置かれていた(Apple Watch
側に置かれるのはStoryboardとリソースファイル
のみ)
• iPhoneからデータを取って来る際は
openParentApplication:を使用していた
watchOS2から
watchOS2からのiPhoneとAppleWatch
Introducing Watch Connectivityより
iOS App
WatchKit
App
WatchKit
Extension
watchOS 2
Data
Store
Data
Store
watchOS2から
• ExtensionがAppleWatchに置かれ
るようになった→ネイティブ!
• Watch側にデータが保存可能に!
• iPhoneからデータを取って来る際は
WatchConnectivityを使う
Introducing Watch Connectivityより
WatchConnectivity NSURLSession
WatchConnectivity
• iPhone ⇄ Apple Watchでデータのやり取
りを可能にする
• リアルタイムでの通信とバックグラウンド
での通信の2種類
Watch Connectivity で検索すればリファレンス見つかります
https://developer.apple.com/library/prerelease/ios/documentation/WatchConnectivity/Reference/WatchConnectivity_framework/index.html
WatchConnectivity.Frameworkに

含まれるクラス
WCSession

&

WCSessionDelegate
WCSession
• データ通信を可能にするにはセッションを
アクティベートする必要がある
• iPhoneとApple Watchの接続状態をトラッ
キングするためのプロパティが定義されて
いる
WCSessionを開始
Introducing Watch Connectivityより
Setup
Always set your apps up to receive incoming WatchConnectivity content
if (WCSession.isSupported()) {
let session = WCSession.defaultSession()
session.delegate = self // conforms to WCSessionDelegate
session.activateSession()

}
WCSessionDelegate
• iPhone or Apple Watchから送信したデータをApple
Watch or iPhoneで受け取るデリゲートメソッド
• WCSessionオブジェクトの状態変わったことを確認
するためのデリゲートメソッド
• データ転送が終わったタイミングを知るためのデリ
ゲートメソッド
iPhoneとApple Watchの

接続状態を知る
• paird

→ iPhoneとApple Watchがペアリングさ
れているか
• watchAppInstalled

→ そのアプリのWatch appがインストー
ルされているか
接続状態を知るための

WCSessionのプロパティ
• complicationEnabled

→ complicationがApple Watchのフェイ
スに設定されているか
• reachable

→ 対応するiPhoneアプリ/Watch appがア
クティブで通信可能な状態になっているか
接続状態を知るための

WCSessionのプロパティ
• sessionWatchStateDidChange

→ paired, watchAppInstalled,
complicationEnabled, watchDirectoryURLなど
に変化があった際に呼ばれる
• sessionReachabilityDidChange

→ 対になるアプリのreachabilityに変化があった際
に呼ばれる
接続状態が変わったことを受け取る

WCSessionDelegateのデリゲートメソッド
iPhone⇄Apple Watch

データのやり取り
データを送る方法
• Background Transfers
• Interactive Messaging
• OSがいい感じのタイミングで転送し
てくれるらしい
Background Transfers
Interactive Messaging
• すぐに転送してくれる
• Application Context
• User Info Transfer
• File Transfer
Background Transfers
Background Transfers
Application Context
• 押さえておくべきこと
• 更新すると上書きされる
• Dictionary([String:AnyObject])型のデータが格納可能
• session:didReceiveApplicationContextで対
になるアプリからのデータを受け取る
Background Transfers
Application Context
• updateApplicationContext:error:メソッドを使用して
applicationContextを更新
• WCSessionオブジェクトのapplicationContextプロパティで
updateApplicationContext:error:で送ったデータの確認が可能
• updateApplicationContext:error:を呼ぶごとにデータが上書きされる
• session:didReceiveApplicationContextで対になるアプリからのデー
タを受け取る
Background Transfers
• 押さえておくべきこと
• Application Contextと異なり上書きされずキューイ
ングされる
• Dictionary([String:AnyObject])型のデータが格納可能
• session:didReceiveUserInfo:で対になるアプリから
のデータを受け取る
User Info Transfer
Background Transfers
User Info Transfer
• transferUserInfo:メソッドを使用してデータをキューイングする
• WCSessionオブジェクトのoutstandingUserInfoTransfersプロパティで
キューイングされているデータを確認することが可能
• WCSessionUserInfoTransferというオブジェクトで
outstandingUserInfoTransfersプロパティに保存されている
• session:didReceiveUserInfo:で対になるアプリからのデータを受け取る
• session:didFinishUserInfoTransfer:error:で転送完了、あるいはエラーが
発生した場合の処理
Background Transfers
• 押さえておくべきこと
• キューイングなどはUserInfoと基本的に同じ
• ファイルの転送が可能
• メタデータを付与することが可能([String:AnyObject])
• session:didReceiveFile:で対になるアプリからのデータを
受け取る
File Transfer
Background Transfers
File Transfer
• transferFile:メソッドを使用してファイルの送信が可能
• データ容量の大きいファイル(画像、ドキュメントなど)を転送したい場合に転送する
• WCSessionオブジェクトのoutstandingFileTransfersプロパティでキューイングされて
いるデータを確認することが可能
• WCSessionFileTransferというオブジェクトでoutstandingFileTransfersプロパティに保
存されている
• session:didReceiveFile:で対になるアプリからのデータを受け取る
• session:didFinishFileTransfer:error:で転送完了、あるいはエラーが発生した場合の処理
をする
Interactive Messaging
Interactive Messaging
• リアルタイムにやり取りができる
• テキストのやり取りだけでなく、画像などのデータのやり取りも
可能(大きすぎるデータはダメ)
• iPhone/Apple Watchが通信可能な状態(reachable)であること
が条件
• Apple Watch→iPhoneの場合のみ、iPhoneアプリをBackground
で動作させることが可能
通信可能な状態とは?
• iPhone側でWCSessionオブジェクトの
reachable=trueになるのは、Bluetoothで
Apple Watchと通信が可能な状態で、なお
かつWatch appがフォアグラウンドにある
状態
iPhone側でreachableな状態
Interactive Messaging
Reachability:iPhone
Devices connected
Watch app foreground
iOS App
Watch
App
session.reachable == true
Introducing Watch Connectivityより
通信可能な状態とは?
• Apple Watch側でWCSessionオブジェク
トのreachable=trueになるのは、
BluetoothでiPhoneと通信が可能な状態

→iPhoneアプリがフォアグラウンドであるかどうかは関係ない
Interactive Messaging
Devices connected
WatchKit extension foreground
Watch
App
WatchKit
Extension
session.reachable == true
Reachability:Apple Watch
Apple Watch側でreachableな状態
Introducing Watch Connectivityより
iOSはバックグラウンド動作可能
• Apple Watch → iPhoneの場合はiPhone
をバックグラウンドで動作させることが可
能
• watchOS1のopenParentApplication:と
同じようにデータを取ってくることも可能
Interactive Messaging
Interactive Messaging
Background launching:iOS app only
Run Tracker
App
WatchKit
Extension
iOS App
Background
Introducing Watch Connectivityより
Interactive Messaging
• 送信可能なデータ
• Dictionary([String:AnyObject])型のデータが格
納可能
• NSData=画像なども送信可能
Interactive Messaging
• 以下のメソッドを使用してデータ送信
• sendMessage:replyHandler:errorHandler:
• sendMessageData:replyHandler:errorHandler:
Interactive Messaging
• 以下のメソッドを使用してデータを受け取る
• session:didReceiveMessage:
• session:didReceiveMessage:replyHandler:
• session:didReceiveMessageData:
• session:didReceiveMessageData:replyHandler:
Interactive Messaging
• 以下のメソッドを使用してデータを受け取る
• session:didReceiveMessage:
• session:didReceiveMessage:replyHandler:
• session:didReceiveMessageData:
• session:didReceiveMessageData:replyHandler:
replyHandlerを利用して通信結果などの情報を送信側に

返した方が良さそう
• 押さえておくべきこと
• データ送信前に通信可能であること
(=reachable)であることを確認する
• Apple Watch→iPhoneの場合はiOSアプリを
バックグランドで動作させることが可能
• Dictionary([String:AnyObject])に加えて、NSData
型データの送信も可能
Interactive Messaging
おわり

Más contenido relacionado

La actualidad más candente

論文の書き方・読み方
論文の書き方・読み方論文の書き方・読み方
論文の書き方・読み方
Satoshi Miura
 

La actualidad más candente (20)

カメラでの偏光取得における円偏光と位相遅延の考え方
カメラでの偏光取得における円偏光と位相遅延の考え方カメラでの偏光取得における円偏光と位相遅延の考え方
カメラでの偏光取得における円偏光と位相遅延の考え方
 
Tokyo.R #46 Cox比例ハザードモデルとその周辺
Tokyo.R #46  Cox比例ハザードモデルとその周辺Tokyo.R #46  Cox比例ハザードモデルとその周辺
Tokyo.R #46 Cox比例ハザードモデルとその周辺
 
Neuro2019 ランチョン大討論会「日本の若手研究者の現状」
Neuro2019 ランチョン大討論会「日本の若手研究者の現状」Neuro2019 ランチョン大討論会「日本の若手研究者の現状」
Neuro2019 ランチョン大討論会「日本の若手研究者の現状」
 
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
 
Pcapngを読んでみる
Pcapngを読んでみるPcapngを読んでみる
Pcapngを読んでみる
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
論文の書き方・読み方
論文の書き方・読み方論文の書き方・読み方
論文の書き方・読み方
 
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
 
TurtleBot3でROSを始めよう
TurtleBot3でROSを始めようTurtleBot3でROSを始めよう
TurtleBot3でROSを始めよう
 
社会心理学者のための時系列分析入門_小森
社会心理学者のための時系列分析入門_小森社会心理学者のための時系列分析入門_小森
社会心理学者のための時系列分析入門_小森
 
筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション
 
継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
 
【Unity道場 建築スペシャル2】点群ビジュアライゼーション
【Unity道場 建築スペシャル2】点群ビジュアライゼーション【Unity道場 建築スペシャル2】点群ビジュアライゼーション
【Unity道場 建築スペシャル2】点群ビジュアライゼーション
 
Unityとシェーダで描く360度フラクタル
Unityとシェーダで描く360度フラクタルUnityとシェーダで描く360度フラクタル
Unityとシェーダで描く360度フラクタル
 
ROSを用いた歩行ロボットの脚の開発
ROSを用いた歩行ロボットの脚の開発ROSを用いた歩行ロボットの脚の開発
ROSを用いた歩行ロボットの脚の開発
 
Zotero紹介
Zotero紹介Zotero紹介
Zotero紹介
 
オックスフォード図書館制作奮闘記
オックスフォード図書館制作奮闘記オックスフォード図書館制作奮闘記
オックスフォード図書館制作奮闘記
 
世界へ向けたゲーム開発 〜ローカライズ支援ツール『LION』〜
世界へ向けたゲーム開発  〜ローカライズ支援ツール『LION』〜世界へ向けたゲーム開発  〜ローカライズ支援ツール『LION』〜
世界へ向けたゲーム開発 〜ローカライズ支援ツール『LION』〜
 
Steamで同人ゲームをリリースする ~パブリッシャーになって検証してみた~
Steamで同人ゲームをリリースする ~パブリッシャーになって検証してみた~Steamで同人ゲームをリリースする ~パブリッシャーになって検証してみた~
Steamで同人ゲームをリリースする ~パブリッシャーになって検証してみた~
 
初期研修医のための学会スライドのキホン
初期研修医のための学会スライドのキホン初期研修医のための学会スライドのキホン
初期研修医のための学会スライドのキホン
 

Similar a Watch connectivity

【社内LT】iPhoneアプリ開発のすすめ
【社内LT】iPhoneアプリ開発のすすめ【社内LT】iPhoneアプリ開発のすすめ
【社内LT】iPhoneアプリ開発のすすめ
Vitalify.Inc
 
iphone5 発表イベント 最速まとめLT
iphone5 発表イベント 最速まとめLTiphone5 発表イベント 最速まとめLT
iphone5 発表イベント 最速まとめLT
VOYAGE GROUP
 
iphone5 発表イベント 速報まとめ
iphone5 発表イベント 速報まとめiphone5 発表イベント 速報まとめ
iphone5 発表イベント 速報まとめ
VOYAGE GROUP
 

Similar a Watch connectivity (14)

watchOS1 to watchOS2
watchOS1 to watchOS2watchOS1 to watchOS2
watchOS1 to watchOS2
 
Apple Watch 間通信
Apple Watch 間通信Apple Watch 間通信
Apple Watch 間通信
 
iOS 8 App Extension
iOS 8 App ExtensioniOS 8 App Extension
iOS 8 App Extension
 
watchOS2 - iPhone Appとのデータ同期について
watchOS2 - iPhone Appとのデータ同期についてwatchOS2 - iPhone Appとのデータ同期について
watchOS2 - iPhone Appとのデータ同期について
 
iOS豆知識ver0.0.5
iOS豆知識ver0.0.5iOS豆知識ver0.0.5
iOS豆知識ver0.0.5
 
iBeacon Applications
iBeacon ApplicationsiBeacon Applications
iBeacon Applications
 
自作アプリを watchOS 2 対応した話 〜FastCheckin編〜
自作アプリを watchOS 2 対応した話 〜FastCheckin編〜自作アプリを watchOS 2 対応した話 〜FastCheckin編〜
自作アプリを watchOS 2 対応した話 〜FastCheckin編〜
 
watchOS 2 新機能の細かい話
watchOS 2 新機能の細かい話watchOS 2 新機能の細かい話
watchOS 2 新機能の細かい話
 
tvOS開発前に確認すべきこと
tvOS開発前に確認すべきことtvOS開発前に確認すべきこと
tvOS開発前に確認すべきこと
 
AppleWatch発売!Apple Watch WatchKit勉強会-Notification
AppleWatch発売!Apple Watch WatchKit勉強会-NotificationAppleWatch発売!Apple Watch WatchKit勉強会-Notification
AppleWatch発売!Apple Watch WatchKit勉強会-Notification
 
[20140625]wwdc2014 feedback
[20140625]wwdc2014 feedback[20140625]wwdc2014 feedback
[20140625]wwdc2014 feedback
 
【社内LT】iPhoneアプリ開発のすすめ
【社内LT】iPhoneアプリ開発のすすめ【社内LT】iPhoneアプリ開発のすすめ
【社内LT】iPhoneアプリ開発のすすめ
 
iphone5 発表イベント 最速まとめLT
iphone5 発表イベント 最速まとめLTiphone5 発表イベント 最速まとめLT
iphone5 発表イベント 最速まとめLT
 
iphone5 発表イベント 速報まとめ
iphone5 発表イベント 速報まとめiphone5 発表イベント 速報まとめ
iphone5 発表イベント 速報まとめ
 

Más de Motoki Narita

Más de Motoki Narita (12)

Type safety WCSession
Type safety WCSessionType safety WCSession
Type safety WCSession
 
NullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくする
NullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくするNullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくする
NullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくする
 
できることから始めるOss活動
できることから始めるOss活動できることから始めるOss活動
できることから始めるOss活動
 
Enumerate
EnumerateEnumerate
Enumerate
 
Swift3.0に向けて enumerateを使い始めよう
Swift3.0に向けて enumerateを使い始めようSwift3.0に向けて enumerateを使い始めよう
Swift3.0に向けて enumerateを使い始めよう
 
About Swift-Clean
About Swift-CleanAbout Swift-Clean
About Swift-Clean
 
Swift bondさわってみた
Swift bondさわってみたSwift bondさわってみた
Swift bondさわってみた
 
watchOS2 tips
watchOS2 tipswatchOS2 tips
watchOS2 tips
 
個人で開発したアプリがベスト新着に選ばれた話
個人で開発したアプリがベスト新着に選ばれた話個人で開発したアプリがベスト新着に選ばれた話
個人で開発したアプリがベスト新着に選ばれた話
 
Xcode tips
Xcode tipsXcode tips
Xcode tips
 
Complication
ComplicationComplication
Complication
 
Optionalの使い方 第1回 Swift勉強会@ネクスト
Optionalの使い方 第1回 Swift勉強会@ネクストOptionalの使い方 第1回 Swift勉強会@ネクスト
Optionalの使い方 第1回 Swift勉強会@ネクスト
 

Último

Último (12)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

Watch connectivity