WatchOS 2应用程序无法在装有dyld_fatal_error的设备上启动,而我的Framework Library未加载:未find图像

我刚刚遵循苹果转换指南将我的ObjectiveC应用程序升级到WatchOS 2

https://developer.apple.com/library/watchos/documentation/General/Conceptual/AppleWatch2TransitionGuide/ConfiguretheXcodeProject.html

在“iOS应用程序和watchOS应用程序之间共享代码”一节中,描述了如何将现有的iOS框架复制到WatchOS使用的WatchOS框架目标中,如下所示。

“如果你已经有一个与你的iOS应用程序共享框架的watchOS 1应用程序,请复制你的iOS框架目标并修改它以支持watchOS 2。

复制和configuration您的watchOS 2的框架目标

  1. 打开Xcode的项目编辑器窗格。 (窗格通常是closures的。)
  2. 按住Control键单击目标以使用“重复”命令显示上下文菜单。
  3. 更改目标的名称,以便以后可以轻松识别。
  4. 在“生成设置”中,更改以下值:
    • 将支持的平台设置更改为watchOS。
    • 将Base SDK设置更改为最新的watchOS。
    • 更改产品名称设置,使其与您的iOS框架的名称相匹配。 你希望两个框架都用相同的名字来构build。
  5. 将框架添加到WatchKit扩展的链接框架列表中。“

我已经按照这些步骤克隆了我的框架,其中iOS框架被称为MyFramework,现在新的WatchOS框架被称为MyFrameworkWatch。 但是如上所述,产品名称被设置为MyFramework而不是MyFrameworkWatch。 我认为这个命名的转变是我可以从我的框架使用包括

#import <MyFramework/SharedUtils.h> 

而不是想必不得不改变它

 #import <MyFrameworkWatch/SharedUtils.h> 

我不介意后者,但我会承认它更好的保持框架名称相同。

在经过了最初的自动转换之后,我设法让我的应用程序在模拟器上工作得非常好,但是现在切换到设备,我无法启动它。

在设备上启动我的应用程序导致它旋转几秒钟,然后就崩溃了。 启动一下就会导致它无限期地旋转。 试图运行它从Xcode和运行应用程序导致应用程序最终启动和旋转,旋转可以无限期地持续有时,但最终它通过,我得到的实际错误报告如下

 dyld_fatal_error - dyld: Library not loaded: @rpath/MyFramework.framework/MyFramework referenced from WatchKit Extension Reason: image not found 

所以这是我的Watch App Extension尝试链接到Watch框架,并且这样做是为了查找MyFramework名称,而不是MyFrameworkWatch名称。 我不知道这个名字的冲突是否使它感到困惑?

当我尝试find在Xcode中的Products文件夹下引用的框架时,我可以看到两个框架

 MyFramework MyFramework 

他们都参照相同的path

 /Users/jim/Library/Developer/Xcode/DerivedData/MyApp-byegspjumgwlfpahhwjgzpmfkcdx/Build/Products/Debug-iphoneos/MyFramework.framework 

虽然你可以看到目标成员正在分离两个框架,但是最上面的MyFramework与主应用程序,今天的部件和框架testing项目相关联。 较低的MyFramework只与我的Watch扩展相关联。 这是不正确的,这些都是确切的参考完全相同的path?

最后,当谷歌search这个问题时,我发现有类似问题的CocoaPods参考,虽然根据他们的网站在这里

https://github.com/CocoaPods/CocoaPods/issues/4180

自9月份以来,版本0.39.0已经修复,这是pod –version报告的版本。 所以我想我有他们的修复。 我试图从我的框架中删除cocoa豆荚,看看是否有帮助。

有没有其他人遵循过渡指导build议创build一个重复的框架,然后设法得到应用程序和框架实际安装在他们的手表好吗?

有没有什么办法来分析构build是做了尝试,看看我是否可以看到与构build文件的问题,所以我不必等待手表失败启动应用程序来debugging它。

任何帮助都一如既往地受到赞赏! 干杯!

编辑:我想我已经设法从违规的MyFrameworkWatch目标中删除cocoa豆荚通过注释我的pod文件中的目标部分和运行pod更新/ pod安装…它似乎并没有很好地清理目标我不得不在后期构build步骤中手动删除cocoa豆荚的步骤。 也许我还没有正确地把它删除,我觉得有点混淆,知道发生什么事情在cocoa豆荚下。 无论发生的是同样的错误,所以要么我没有正确移除它,要么对这个特定的问题没有影响

好的,这是由于苹果文档转换错误造成的,或者我解释错了。 它说

将框架添加到WatchKit扩展的链接框架列表中。

实际上,正确的解决方法是将框架添加到embedded式二进制文件部分(无论如何自动向链接的框架添加条目),并将框架正确放置在框架目录下的监视扩展内。 哪个应用程序然后加载罚款! 这么多的挫折,我花了几个小时这几天!