ios - 创建和使用可在 Apple Watch 扩展中使用的框架是否需要特殊步骤?

标签 ios xcode runtime apple-watch

我正在尝试创建一个可以在我的 Apple Watch Extension 以及应用程序本身中使用的框架。我通过在 XCode 中创建一个“Watch Framework”类型的新项目来做到这一点,并成功构建了一个框架。

我将它拖到我的 Apple Watch 项目中,并验证它在“将二进制文件与库链接”和“复制捆绑资源”中,并且能够构建并部署到设备上。

但是,我在运行时收到以下错误消息。

Oct 30 08:14:30 My-s-AppleWatch ReportCrash[187] <Error>: Dyld Error Message:
Dyld Message: Library not loaded:     @rpath/SimpleWatchFramework.framework/SimpleWatchFramework
  Referenced from: /private/var/mobile/Containers/Bundle/Application/8E7660C0-B741-497C-8251-88D9243234BF/Apple Watch Extension.app/PlugIns/Apple Watch Extension Extension.appex/Apple Watch Extension Extension
  Reason: image not found
  Dyld Version: 369.12

我查看了我的主项目的 .app 目录(在产品下),可以看到框架目录与我的 Apple Watch Extension 的二进制文件处于同一级别(在 ../Watch/xxx/PLugins/yyy/), 所以我不确定为什么它说找不到它。

Apple 的文档似乎暗示你可以这样做,但我不确定我是否必须做任何特殊的事情才能让它工作。

最佳答案

我通过确保将框架添加到监视扩展目标的嵌入式二进制文件部分而不是链接框架来解决此问题。在此处添加它会自动在链接框架中创建一个条目。您也可以删除复制捆绑资源步骤,该步骤将其复制到错误的位置(在应用程序扩展的根目录中)。嵌入式二进制文件将框架放置在扩展根目录中的 frameworks 文件夹下,这是您的应用程序正确加载而不会出现 dyld 错误所需的全部内容

关于ios - 创建和使用可在 Apple Watch 扩展中使用的框架是否需要特殊步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33437513/

相关文章:

android - 如何在从应用程序注销时强制使 JWT token 过期而不存储在数据库中?

iphone - 我可以在 XCode 4.3.2 中禁用 "Upgrade debugger from GDB to LLDB"警告吗?

c++ - C++ 运行时系统如何知道对象何时超出范围

arraylist - Big O 运行时 - indexOf LinkedList/ArrayList

ios - 每个应用 iOS 的连续递增数字

ios - - (id) 来自 Swift 中的 Obj-C Lib?

ios - 匿名闭包参数不能在具有显式参数的闭包内使用

iphone - 核心数据轻量级迁移——不能合并模型

ios - Xcode 不允许我上传我的应用程序

java - 如何将更改从 IDE Eclipse 更改为插件的运行时执行