gpt4 book ai didi

ios - WatchOS 2 App无法在带有dyld_fatal_error的设备上启动,但未加载我的框架库:找不到图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:59:00 27 4
gpt4 key购买 nike

我刚刚按照苹果的过渡指南将我的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。

为watchOS 2复制和配置框架目标

  • 打开Xcode的项目编辑器窗格。 (窗格通常是关闭的。)
  • 按住Control键并单击目标以显示带有Duplicate命令的上下文菜单。
  • 更改目标的名称,以便以后可以轻松识别它。
  • 在“构建设置”中,更改以下值:
  • 将“支持的平台”设置更改为watchOS。
  • 将基本SDK设置更改为最新的watchOS。
  • 更改产品名称设置,使其与您的iOS框架的名称匹配。您希望两个框架都使用相同的名称构建。
  • 将框架添加到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名称。我想知道这个名称冲突是否引起混淆?

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

    他们都引用相同的路径
    /Users/jim/Library/Developer/Xcode/DerivedData/MyApp-byegspjumgwlfpahhwjgzpmfkcdx/Build/Products/Debug-iphoneos/MyFramework.framework

    尽管您可以看到目标成员资格将两个框架分开,但是顶部的MyFramework与主应用程序(今天是窗口小部件和框架测试项目)相关联。较低的MyFramework仅与我的Watch扩展相关。难道这些肯定会引用完全相同的路径吗?

    最后,当谷歌搜索这个问题时,我发现参考了CocoaPods也有类似的问题,尽管根据他们的站点

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

    自9月以来,此问题已在Pod --version报告的版本0.39.0中修复。所以我想我已经解决了。我很想从我的框架中删除可可豆荚,看看是否有帮助。

    是否有其他人遵循过渡指南的建议创建一个重复的框架,然后设法使应用程序和框架真正安装在他们的手表上?

    有什么方法可以分析已完成的构建,以尝试查看是否可以看到已构建文件的问题,因此我不必等待手表未能启动应用程序对其进行调试。

    一如既往的感谢任何帮助!干杯!

    编辑:我认为我已经通过注释掉我的pod文件中的目标部分并运行pod update / pod install来从有问题的MyFrameworkWatch目标中删除了可可豆荚...它似乎没有很好地清理目标我必须在构建后步骤中手动删除可可豆步骤。也许我没有正确删除它,我发现知道可可豆荚的内在发生了什么让我有些困惑。无论是否发生了相同的错误,所以我没有正确删除它,或者它对这个特定问题没有影响

    最佳答案

    好的,这是由于苹果文档转换错误或我将其解释为错误引起的。它说

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

    实际上,正确的解决方法是将框架添加到嵌入式二进制文件部分(无论如何它都会自动向链接的框架添加条目),并将框架正确地放在watchs扩展中的Frameworks目录下。然后哪个应用程序加载正常!如此无奈,几天之内,我为此付出了数小时!

    关于ios - WatchOS 2 App无法在带有dyld_fatal_error的设备上启动,但未加载我的框架库:找不到图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34167278/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com