Apple Watch, WatchKit Extension and main application

前端 未结 2 1035
失恋的感觉
失恋的感觉 2020-12-09 00:13

There is main application with logic and we extend app to Apple Watch.

After adding target xCode creates 2 more applications: extension with code and watch kit appl

相关标签:
2条回答
  • 2020-12-09 00:35

    To communicate to the containing iPhone app you can use

    (BOOL)openParentApplication:(NSDictionary *)userInfo
                            reply:(void (^)(NSDictionary *replyInfo,
                                            NSError *error))reply
    

    In your WKInterfaceController

    From the Apple Docs

    Use this method to communicate with your containing iOS app. Calling the method causes iOS to launch the app in the background (as needed) and call the application:handleWatchKitExtensionRequest:reply: method of its app delegate. That method has the following signature:

    - (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo
    reply:(void(^)(NSDictionary *replyInfo))reply
    

    The app delegate receives the dictionary you pass into the userInfo parameter and uses it to process whatever request you made. If it provides a reply, WatchKit executes the block you provided in the reply parameter of this method.

    0 讨论(0)
  • 2020-12-09 00:56

    At current state of Apple Watch Extension:

    • You can share information between iOS main appliation and WatchKit Extension. Use App Groups and NSUserDefaults to access the shared information objects.

    • You can not execute code from your iOS app which is trigged from actions on the Apple Watch.

    At least not yet.

    EDIT: As of Xcode 6.2 Beta 2

    It is now possible to communicate with the parent iOS app from Apple Watch.

    In WatchKit Extension call the parent application via openParentAppentApplicion. One can pass a value dictionary to the parent application and the parent application can return a value dictionary.

    Watchkit Extension:

    // Call the parent application from Apple Watch
    
    // values to pass
    let parentValues = [
        "value1" : "Test 1",
        "value2" : "Test 2"
    ]
    
    WKInterfaceController.openParentApplication(parentValues, reply: { (replyValues, error) -> Void in
        println(replyValues["retVal1"])
        println(replyVaiues["retVal2"])
    })
    

    iOS App:

    // in AppDelegate.swift
    func application(application: UIApplication!, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]!, reply: (([NSObject : AnyObject]!) -> Void)!) {
        // retrieved parameters from Apple Watch
        println(userInfo["value1"])
        println(userInfo["value2"])
    
        // pass back values to Apple Watch
        var retValues = Dictionary<String,String>()
    
        retValues["retVal1"] = "return Test 1"
        retValues["retVal2"] = "return Test 2"
    
        reply(retValues)
    }
    
    0 讨论(0)
提交回复
热议问题