【问题标题】:Sharing classes between iphone and the apple watch在 iphone 和 Apple Watch 之间共享课程
【发布时间】:2015-04-04 16:37:21
【问题描述】:

我希望有人能对此有所了解。我已经尝试过研究,但实际上找不到任何东西......

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

假设在手表扩展中我有一个课程myClass;我无法在电话应用程序中使用此类。有没有办法解决这个问题?

【问题讨论】:

    标签: swift watchkit


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      希望这会有所帮助!

      【讨论】:

        【解决方案3】:

        如果您希望在 Watch App Extension 中以 Swift 代码共享 iPhone 应用中的 Obj-C 类:

        1. 将您希望从 iPhone 应用程序共享的所有 .m 文件包含在 WatchKit 扩展应用的 Target(即在 Target Membership 中)。

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

        3. 包含WatchKit中包含的与.m对应的所有.h文件 扩展目标作为桥接头文件中的导入(例如 #import "MyLogger.h")。
        4. 您已准备好在 WatchKit 扩展应用程序代码中使用 Obj-C 类 现在。

        【讨论】:

          【解决方案4】:

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

          • 打开您的项目设置并选择您的 WatchKit 扩展。

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多