在 iphone 和 Apple Watch 之间共享 类

Sharing classes between iphone and the apple watch

我希望有人能对此有所启发。我试过研究但找不到任何东西...

有没有办法在 iPhone 应用程序和 Apple Watch 扩展程序之间共享 class?

假设在手表扩展中我有一个 class myClass;我无法在 phone 应用程序中使用此 class。无论如何要解决这个问题?

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

  1. 使用您的共享代码创建一个框架,然后 link 该框架到您的 WatchKit 扩展和 iPhone 应用程序。这是最干净和推荐的方式。

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

iPhone 应用程序和 Apple Watch 扩展在您的项目中是根本不同的目标。对于每个文件(.h 文件除外),您可以指定要将其包含到哪个目标。

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

1) 从顶部菜单 select 查看 -> 实用程序 -> 文件检查器。右侧面板将出现,您应该找到 Target Membership 部分,在您项目的可用目标旁边带有复选框。检查要将此文件包含到的目标。在本例中,iPhone 应用程序和 WatchKit 扩展。

2) 您也可以点击项目进入项目设置Select你想要的目标。 (即 iPhone 应用程序或 WatchKit 扩展),单击 Build Phases 选项卡。在 Compile sources 中,您可以单击“+”图标以添加更多文件以构建目标。 (即 myClass.m 在你的情况下)

希望对您有所帮助!

如果您想在 Watch App Extension 的 Swift 代码中从 iPhone 应用分享 Obj-C 类:

  1. 包括您希望从 iPhone 应用程序共享的所有 .m 文件,在 WatchKit 扩展应用程序的目标(即在目标成员资格中)。

  2. 创建桥接 header(一个新的 .h 文件)文件(通常命名为 [项目名称]-Bridging-Header.h)。您可以选择将其命名为 [projectName]-Watch-Bridging-Header.h(或任何其他 合适)。

  3. 包含WatchKit包含的.m对应的所有.h文件 扩展目标作为 bridging-header 文件中的导入(例如 #import "MyLogger.h").
  4. 您可以在 WatchKit Extension App 代码中使用 Obj-C 类 现在。

另一个可能的解决方案(最终解决了我的问题)是确保您的 Watch Target 也知道您的桥接文件所在的位置!

  • 打开您的项目设置和 select 您的 WatchKit 扩展。

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

  • 确保 Objective-C 桥接头文件已设置