watchOS Watch Connectivity

12776 단어 SwiftwatchOSiOS

개시하다


이 기사는 이와테(岩手)현립대advent 달력 2016년 10일째 기사다.
워치OS 앱을 수정할 때 워치OS 1에서 사용할 수 있는 프레임워크 중 일부는 워치OS 2와 워치OS 3에서 사용할 수 없는 것으로 나타났다.
예를 들어, SystemConfiguration입니다.framework 및 CFNetwork.프레임워크 등.
나는 이러한 프레임 기능을 사용하는 방법을 고려했다.

Watch Connectivity


Watch Connectivity 프레임워크(Watch Connectivit. 프레임워크)는 아이폰(iOS 앱)과 애플 워치(watch OS 앱) 사이에 데이터 송수신을 제공한다.
OS에서 데이터 송수신을 결정하는 백그라운드 트랜스퍼와 즉시 데이터를 전송하는 인터랙티브 메시지가 있다.

이루어지다


이번에는 Interactive 메시지를 설치합니다.
실행 환경은 다음과 같습니다.
  • Xcode 8.1
  • iPhone 7(iOS 10.1.1)
  • Apple Watch(watchOS 3.1)
  • watchOS 측의 설치는 다음과 같다.
    InterfaceController.swift
    import WatchKit
    import Foundation
    import WatchConnectivity
    
    class InterfaceController: WKInterfaceController, WCSessionDelegate {
        override func awake(withContext context: Any?) {
            super.awake(withContext: context)
        }
    
        override func willActivate() {
            super.willActivate()
    
            if WCSession.isSupported() {
                // Watch Connectivityをサポートしているとき
                let session = WCSession.default()
                session.delegate = self
                session.activate()
                if session.isReachable {
                    // iPhoneと通信可能のとき
                    session.sendMessage([:], replyHandler: {(replay) -> Void in
    
                        let buttonAction = WKAlertAction(title:"OK", style: .default) { () -> Void in
                        }
                        self.presentAlert(withTitle: "タイトル", message: replay.description, preferredStyle: .alert, actions: [buttonAction])
                    }){(error) -> Void in
                        print(error)
                    }
                }
            }
        }
    
        override func didDeactivate() {
            super.didDeactivate()
        }
    
        func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
        }
    
    }
    
    다음은 iOS 설치입니다.
    AppDelegate.swif
    import UIKit
    import WatchConnectivity
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate, WCSessionDelegate {
    
        @available(iOS 9.3, *)
        public func sessionDidDeactivate(_ session: WCSession) {
    
        }
    
        @available(iOS 9.3, *)
        public func sessionDidBecomeInactive(_ session: WCSession) {
    
        }
    
        var window: UIWindow?
    
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            if WCSession.isSupported() {
                let session = WCSession.default()
                session.delegate = self
                session.activate()            
            }        
            return true
        }
    
        func applicationWillResignActive(_ application: UIApplication) {
        }
    
        func applicationDidEnterBackground(_ application: UIApplication) {
        }
    
        func applicationWillEnterForeground(_ application: UIApplication) {
        }
    
        func applicationDidBecomeActive(_ application: UIApplication) {
        }
    
        func applicationWillTerminate(_ application: UIApplication) {
        }
    
        func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
            if session.isReachable {
              // Apple Watchに結果を送信する
              replyHandler(["Hello":"World"])
            }
        }
    
        func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
        }
    }
    

    실행 결과


    watchOS 응용 프로그램을 시작합니다.

    경고를 표시하고 데이터를 전송합니다.
    이때 iOS 애플리케이션을 시작하지 않아도 데이터를 받을 수 있습니다.
    이 메커니즘을 사용하면 iOS 앱으로 워치OS가 준비하지 않은 프레임워크 기능을 처리하고 결과를 워치OS 앱에 넘길 수 있다.

    좋은 웹페이지 즐겨찾기