4

我的 Apple Watch 项目使用 Swift。我使用 CocoaPods 安装了 MMWormhole,并按照以下链接中的说明创建了桥接头:

http://bencoding.com/2015/04/15/adding-a-swift-bridge-header-manually/

如何从 Swift 调用 Objective-C 代码

当我创建桥接头时,我将它定位到我的 iphone 应用程序,并观看 Extension。

桥接 header.h,我有这个:

#import "MMWormhole.h"

在我的 iPhone 应用程序视图控制器中,我有这个:

import UIKit
import Foundation 

let wormhole = MMWormhole(applicationGroupIdentifier: "group.cocoShareData", optionalDirectory: "wormhole")

并且没有抱怨。

但是,在我的手表接口控制器中,我有这个:

import WatchKit
import Foundation

...

override func willActivate() {
        // This method is called when watch view controller is about to be visible to user
        super.willActivate()
        let wormhole = MMWormhole(applicationGroupIdentifier: "group.cocoShareData", optionalDirectory: "wormhole")
}

它抱怨“使用未解析的标识符MMWormhole”。

我什至尝试使用#import "MMWormholeClient.h" 但没有什么可以解决这个问题。

我也尝试在创建桥接头时,只针对 iphone App。但是……还是不行。

我还在 WatchExtension 的 podfile 目标中制作了 pod 'MMWormhole', '~> 1.2.0'。但在Watch interfaceController中仍然没有识别出MMWormhole

我错过了什么吗?

这是我的项目:https ://www.dropbox.com/s/tsajeoopnghyl1g/MyTestCocoData.zip?dl=0

4

1 回答 1

2

这是我的答案。经过几天的奋斗和代码导师的帮助:

问题是:

1) The Objective-C bridge has to set the correct path and header search path so both IOS & WatchExt can use
2) The PodFile in MMWormhole must target for both iOS & WatchExt. 
3) The code in MMWormhole npm page is not correct.  Move the instantiation of MMWormhole out and be a class Variable.

这是一步一步的简短说明:

Objective C 桥

  • 为 iPhone App 和 Watch Ext 添加 App Groups
  • 添加目标 C
  • 瞄准两者
  • 构建设置:在 iOS 和 Watch Ext 的相对路径中设置 *.h。设置 *.h 相对路径。例如../MMWormholeTest/MMWormholeTest/MMWormholeTest-Bridging-Header.h
  • 添加标题搜索路径: ${PRODS_ROOT}/Headers ,对于两个 IOS 7 Watch Ext 都是递归的

虫洞

  • 可可豆荚它。
  • 在 Podfile 中为 iOS 和 Watch Ext 设置 pod 'MMWormhole'、'~> 1.2.0' 目标
  • 在桥接头文件中设置#import “MMWormhole.h”。
  • 在 ViewController 和 InterfaceOController 中,将 wormhole 设置为类范围变量。例如 var wormhole:MMWormhole!
  • 在 ViewDidLoad 中实例化 MMWormhole,在 WatchExt 中实例化 awakeWithContext,在 awakeWithContext 中设置监听器,并使用 self.lable.setText 因为关闭。例如 self.label.setText(messageObject!as!String)
  • 无需注册接收器,如堆栈溢出中的其他一些 MMWormhole 示例所示。
于 2015-06-22T01:12:46.100 回答