Apple Watch,WatchKit Extension和主要应用程序

时间:2014-11-28 14:37:30

标签: ios main watchkit

主要应用逻辑,我们将应用程序扩展到Apple Watch。

添加目标xCode后,再创建2个应用程序:扩展代码和监视工具包应用程序。

问题:扩展程序中的代码如何重用已准备好的主要iOS应用程序的逻辑?扩展程序应用程序如何与主应用程序通信并发送命令。

2 个答案:

答案 0 :(得分:10)

要与包含的iPhone应用程序通信,您可以使用

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

WKInterfaceController

来自Apple Docs

  

使用此方法与您收录的iOS应用进行通信。调用   该方法使iOS在后台启动应用程序(根据需要)   并调用application:handleWatchKitExtensionRequest:reply:方法   其应用代表。该方法具有以下特征:

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

app委托接收您传递给userInfo的字典   参数并使用它来处理您提出的任何请求。如果它   提供回复,WatchKit执行你提供的块   回复此方法的参数。

答案 1 :(得分:4)

目前Apple Watch Extension的状态:

  • 您可以在iOS主应用程序和WatchKit Extension之间共享信息。使用App Groups和NSUserDefaults访问共享信息对象。

  • 无法执行iOS应用中的代码,该代码是从Apple Watch上的操作触发的。

至少还没有。

编辑:从Xcode 6.2 Beta 2开始

现在可以与Apple Watch的父iOS应用程序进行通信。

在WatchKit Extension中,通过openParentAppentApplicion调用父应用程序。可以将值字典传递给父应用程序,父应用程序可以返回值字典。

Watchkit扩展:

// 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)
}