4

我有一个 iPhone 应用程序并添加了一个 WatchKitExtension。从 iPhone 应用程序中,我想将 a 传递String给应该更改手表上的图像的 WatchApp。

  • 我已经做的是下载源文件并导入MMWormhole.m& .h。它们是用 Obj-C 编写的,所以 Xcode自动为我桥接了它们。
  • 我还添加了一个应用程序组并为我的 WatchExtension 和我的 iPhone 目标激活它

GitHub 上的教程中,它说我必须使用以下命令初始化虫洞:

self.wormhole = [[MMWormhole alloc] initWithApplicationGroupIdentifier:@"group.com.mutualmobile.wormhole"
                                                                          optionalDirectory:@"wormhole"];

...并使用以下方式发送消息:

[self.wormhole passMessageObject:@{@"titleString" : title} 
                         identifier:@"messageIdentifier"];

我实际上不知道把它放在哪里,我在我的 iPhone 应用程序WatchExtension 中使用 Swift。

有人可以帮我吗?

4

2 回答 2

5

我想这取决于不同的应用程序,但是对于一个应用程序,我将侦听器放在didFinishLaunchingWithOptions主 iOS 应用程序中的应用程序委托的方法中。这是因为用户会使用手表,他们会将信息传递到手机

有很多听众...

var wormhole = MMWormhole(applicationGroupIdentifier: "group", optionalDirectory: nil)

wormhole.listenForMessageWithIdentifier("identifier", listener: { (message) -> Void in
                //do stuff
})

wormhole.listenForMessageWithIdentifier("identifier2", listener: { (message) -> Void in
            //do stuff
})

wormhole.listenForMessageWithIdentifier("identifier3", listener: { (message) -> Void in
            //do stuff
})

然后在a中WKInterfaceController,我发送了一条消息。有时在一个动作中,有时在willActivate方法中。这实际上取决于您的应用程序的流程

var wormhole = MMWormhole(applicationGroupIdentifier: "group", optionalDirectory: nil)
    @IBAction func buttonPushed(){            
        wormhole.passMessageObject("object", identifier: "identifier1")
    }

不过,这可以双向工作,我可以很容易地在我的手表中放置一个监听器,它会等待手机上某个接口控制器发起的消息。

于 2015-04-24T16:14:38.633 回答
5

这是我的指示。希望他们可以帮助您处理最简单的用例,然后您可以从那里扩展。(请记住构建您的代码,使其真正有意义!)

  • 将 MMWormhole(.h 和 .m)添加到您的项目中。如果您知道如何使用 Cocoapods,请这样做,否则,只需使用 git 子模块。(我使用 git submmodules)
  • 因为您需要 .h 从 Swift 中可见,所以您需要使用桥接头。
  • 设置应用组,这需要使用开发者门户。链接在这里
  • 在您的 iPhone 构建目标 -> 功能 -> 应用程序组中并添加您的组。如果所有三个复选框都不完美,请返回 Developer Portal 并确保一切正常或重新开始。

毫米虫洞,iPhone 侧

在可以到达的地方设置虫洞。注意:您的组 ID 必须是上面的那个!

let wormhole = MMWormhole(applicationGroupIdentifier: "group.testMe.now", optionalDirectory: nil)
wormhole.listenForMessageWithIdentifier("wormholeMessageFromWatch", listener: { (message ) -> Void in
    if let messageFromWatch = message as? String {
          // do something with messageFromWatch
    }
})

iPhone 应用程序发送字符串

wormhole.passMessageObject("message from phone to watch", identifier: "wormholeMessageFromPhone")

iPhone 应用注册以通过 MMWormhole 在回调中再次接收和发送(异步但很酷)

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    universe.initWormhole(.phone, messageHandler: { (message) -> () in
        universe.wormhole.passMessageObject("the phone got \(message)", identifier: "wormholeMessageFromPhone")
    })
    return true
}

MMWormhole,Apple Watch 侧面

在可以到达的地方设置虫洞。注意:您的组 ID 必须是上面的那个!

let wormhole = MMWormhole(applicationGroupIdentifier: "group.testMe.now", optionalDirectory: nil)
wormhole.listenForMessageWithIdentifier("wormholeMessageFromPhone", listener: { (message ) -> Void in
    if let messageFromPhone = message as? String {
          // do something with messageFromPhone
    }
})

MMWormhole,手表应用注册接收

override func awakeWithContext(context: AnyObject?) {
    super.awakeWithContext(context)
    universe.initWormhole(.watch, messageHandler: { (message) -> () in
        println("MMWormhole Message Came to Watch: \(message)")
    })
}

MMWormhole,手表应用发送

// force open the parent application because otherwise the message goes nowhere until the app is opened
WKInterfaceController.openParentApplication(["":""], reply: nil) 
universe.wormhole.passMessageObject("[from watch to phone]", identifier: "wormholeMessageFromWatch")
于 2015-05-20T20:14:51.550 回答