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

主要的应用程序与逻辑,我们扩展到苹果手表的应用程序。

添加目标后xCode创build2个更多的应用程序:扩展与代码和手表套件应用程序。

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

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

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

在你的WKInterfaceController

从苹果文件

使用此方法与您的包含iOS应用程序进行通信。 调用该方法会导致iOS在后台启动应用程序(根据需要),并调用其应用程序委托的application:handleWatchKitExtensionRequest:reply :方法。 该方法有以下签名:

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

应用程序委托收到您传递给userInfo参数的字典,并使用它来处理您提出的任何请求。 如果提供了回复,WatchKit将执行您在此方法的回复参数中提供的块。

在Apple Watch Extension目前的状态下:

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

  • 无法从Apple Watch上的操作触发的iOS应用程序执行代码。

至less还没有。

编辑:从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应用程序:

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