如何在Swift中使用MMWormhole?

时间:2015-04-24 15:45:03

标签: ios objective-c swift watchkit mmwormhole

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

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

GitHub 的教程中,它说我必须用以下内容初始化虫洞:

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

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

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

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

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:5)

我认为这取决于不同的应用程序,但是对于一个应用程序,我将监听器放在我的app appate的didFinishLaunchingWithOptions方法中。这是因为用户将使用手表,他们会将信息转发到手机

有多个听众......

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

然后在WKInterfaceController中,我发了一条消息。有时在动作中,有时在willActivate方法中。这真的取决于你的应用程序的流程

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

这可以兼顾两种方式,我可以很容易地在我的手表中放置一个监听器,它会等待手机上某个接口控制器发出的消息。

答案 1 :(得分:3)

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

  • 将MMWormhole(.h和.m)添加到您的项目中。如果您知道如何使用Cocoapods,请执行此操作,否则,只需使用git子模块即可。 (我使用git submododules)
  • 因为你需要从Swift中看到.h,你需要使用桥接头。
  • 设置应用程序组,该程序组需要使用Developer Portal。 Link is here
  • 在您的iPhone构建目标中 - >能力 - >应用程序组并添加您的组。如果所有三个复选框都不完美,请返回Developer Portal并确保一切正常或重新开始。

MMWormhole,iPhone Side

将虫洞设置在可以到达的地方。 注意:您的论坛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 App发送字符串

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 Side

将虫洞设置在可以到达的地方。 注意:您的论坛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,观看app注册接收

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

MMWormhole,观看app发送

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