ConnectivityProvider - 애플워치와 iOS앱 간 통신 및 데이터 송수신을 담당하는 모듈

기본 정보

ConnectivityProvider 모듈은 애플워치 앱과 iOS 앱 간의 통신을 관리하는 객체입니다. 번핏 애플워치 앱에서 이 객체의 핵심적인 역할은 운동 데이터 수신 및 송신입니다.
이 객체를 통해서 번핏 앱에서 데이터가 수신되었을 때 필요한 처리를 하고, 또 유저가 운동완료처리한 데이터를 다시 번핏 iOS앱으로 전송할 수 있습니다.
ConnectivityProvider 파일은 Connectivity 폴더 내에 위치하고 있습니다.

주요 로직 명세

객체 개요

ConnectivityProvider 는 앱 실행 시 인스턴스가 하나만 초기화되어 앱이 종료될 때까지 사용되는 싱글톤 객체입니다.
이 싱글톤 객체가 iOS앱간 데이터 송수신을 처리하도록 하기 위해서는 WCSessionDelegate 프로토콜을 상속하는 객체로 선언되어야 합니다. 또한 애플워치와 iOS앱 간 소통을 위해서 각각 기기에서 WCSession 이라는 객체의 인스턴스가 하나 생성되어야 하는데, WCSession 객체 인스턴스 초기화 작업도 ConnectivityProvider 객체의 init 함수 안에서 이루어집니다.
// 외부에서 shared라는 변수를 통해 동일한 인스턴스에 접근해서 사용하는 싱글톤 객체입니다. // WCSessionDelegate 프로토콜을 상속합니다. class ConnectivityProvider: NSObject, ObservableObject, WKExtendedRuntimeSessionDelegate { static private(set) var shared: ConnectivityProvider = ConnectivityProvider() // 객체 초기화 시 WCSession 인스턴스 생성하고, 활성화시킵니다. private init(session: WCSession = .default) { self.session = session super.init() self.session.delegate = self guard WCSession.isSupported() else { print("WCSession이 지원되지 않는 기기입니다.") return } session.activate() } //...다른 속성 및 메서드 }
JavaScript
복사

주요 메서드 명세

애플워치와 iOS앱이 데이터를 주고 받기 위해서 제공되는 데이터 형식이 몇 가지 있습니다. (자세한 내용은 WCSession 공식문서 의 Communicating with the Counterpart App 부분을 참고하면 됩니다.)
이 중 번핏 애플워치 앱은 applicationContext 라는 데이터 형식을 채택해서 사용하고 있습니 다. applicationContext 는 간단하게 말해서 String 타입의 key와 Any 타입의 value로 구성된 객체 형식의 데이터라고 볼 수 있습니다.
ConnectivityProvider 객체 안에 applicationContext 형식의 데이터를 수신하는 함수와, 송신하는 함수가 구현되어 있습니다.
session(_:didReceiveApplicationContext:)
update(applicationContext: [String: Any])