在 iPhone 和 Apple Watch 之间共享类

22

我希望有人可以解决这个问题。我已经尝试过研究,但实际上并没有找到什么有用的信息...

是否有办法在iPhone应用程序和Apple Watch扩展之间共享类?

比如说,在watch扩展中我有一个myClass类;但我无法在手机应用程序中使用这个类。有没有什么办法绕过这个问题呢?

5个回答

44

iPhone应用和Apple手表扩展在您的项目中是基本不同的目标。对于每个文件(.h文件除外),您可以指定要包含它的目标。

有至少两种方法可以做到这一点。

1)从顶部菜单中选择“View-> Utilities-> File Inspector”。右侧面板将显示出来,您应该找到“Target Membership”部分,并在可用目标旁边找到复选框。选中要包含此文件的目标。在这种情况下,是iPhone应用程序和WatchKit扩展。

2)您还可以单击项目以进入项目设置选择您想要的目标。(即iPhone应用程序或WatchKit扩展),单击“Build Phases”选项卡。在编译源中,您可以单击“+”图标以为目标添加更多文件。(在您的情况下是myClass.m)

希望这可以帮助到您!


7
另一个可能的解决方案(并最终解决了我的问题)是确保你的Watch Target知道你的桥接文件的位置!
  • 打开项目设置,选择你的WatchKit扩展。

  • 在构建设置中,搜索关键字“bridging”

  • 确保Objective-C桥接头文件已经设置好 enter image description here


6

有两种方法可以实现这个。

  1. 创建一个带有共享代码的框架,并将该框架链接到您的WatchKit扩展和iPhone应用程序中。 这是最干净和推荐的方法。

  2. 将MyClass的源文件(以及依赖项)添加到您的iPhone和WatchKit扩展目标中。


1
如果您希望在Watch App Extension的Swift代码中共享iPhone应用程序中的Obj-C类,请执行以下操作:
  1. 将所有希望从iPhone应用程序共享的.m文件包含在WatchKit Extension应用程序的目标中(即在Target Membership中)。
  2. 创建一个桥接头文件(一个新的.h文件),通常命名为[projectName]-Bridging-Header.h。您可以选择将其命名为[projectName]-Watch-Bridging-Header.h(或任何其他适当的名称)。
  3. 在桥接头文件中导入与WatchKit Extension目标中包含的.m对应的所有.h文件(例如#import "MyLogger.h")。
  4. 现在,您可以在WatchKit Extension应用程序代码中使用Obj-C类了。

0
请使用最简单的方法,选择3个数字复选框。

enter image description here

当你选择这个复选框时,你会将这个类添加到另一个目标上。此外,你可以从另一个目标(即Apple Watch侧)访问这个类。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接