【问题标题】:Which is the cause for dyld`dyld_fatal_error, a incompatible api on iOS?dyld`dyld_fatal_error,iOS 上不兼容的 api 的原因是什么?
【发布时间】:2012-05-06 17:16:46
【问题描述】:

我正在将我的部分项目迁移到 iOS 5 / ARC。最古老的项目之一(iOS 4.2,用于支持 iPod Touch 2g 的 armv6)正在给我:

dyld`dyld_fatal_error:
0x8feb1070:  int3   
0x8feb1071:  nop    

就在启动图像之后,但在进入主之前。必须将一些库/代码更新到 iOS 5,但是哪一个?有可能使用比猜测更好的方法吗??

【问题讨论】:

标签: ios5 ios4 crash xcode4.2 automatic-ref-counting


【解决方案1】:

我自己尝试使用带有 SDK iOS5.1 的 Xcode4.3.2 重现 this project 时遇到了这个问题。问题是 Xcode4.3.2 上的标准项目模板是为 iOS5 配置的,它有一些早期 iOS 版本不支持的功能。在我的例子中,GLKit 框架被引入,并且在我运行 iOS4.2 的 iPhone3G 上不受支持。我得到的错误和你的一样:

dyld`dyld_fatal_error:
0x2fe01080:  trap   
0x2fe01084:  mov    r0, r0

仔细查看控制台输出后,您可以看到导致应用崩溃的原因:

dyld: Library not loaded: /System/Library/Frameworks/GLKit.framework/GLKit
Referenced from: /var/mobile/Applications/A60A53B1-F87D-467D-BB0B-82C603049202/HiJackInTheBox.app/HiJackInTheBox
  Reason: image not found
(lldb) 

该错误意味着在安装应用程序的目标上的 iOS 中找不到 GLKit 框架。该框架被拉入到 Project->BuildPhases->LinkBinaryWithLibraries 下的构建中。

所以为了纠正这个问题,我需要删除 GLKit 框架和所有引用它的代码。然后构建成功并在目标设备上运行。希望这会有所帮助!

【讨论】:

  • 是的,我确认这是在 IOS 4 设备中使用 IOS5 不兼容的库/调用时发生的
  • 您怎么会看到未加载库的消息?我收到同样的错误,但找不到可读的消息。
  • 它在控制台输出窗口中。您可以过滤“dyld”字符串,看看是否有助于找到它。
【解决方案2】:

如果您转到控制台输出,您会看到一个错误,告诉您设备中缺少哪个框架并导致问题(就像 grundyoso 在他的回答中所说的那样)。

因此,为了解决此问题,您可以转到目标的 General 选项卡并在 Embedded Binaries 部分添加缺少的框架。

这会将框架复制到应用程序中,因此在任何设备上都不会丢失。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,当我在我的 iPhone 6s 上运行该应用程序时发生了这种情况,并且之前它可以工作..

    只需转到产品 -> 清理并再次运行它...

    我希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      我对 Reachability.framework 有同样的问题。它在 iPhone 5 上运行良好,但在 iPhone 7S Plus 上运行相同的代码时,它会显示错误。

      这个问题的解决方法是: 1. 转到常规 -> 嵌入式二进制文件。 2.添加相同的框架(在我的例子中是Reachability.framework) 3. 然后,在 Linked Frameworks and Libraries 中添加 libc++.tbd。

      希望它对你有用。

      【讨论】:

        【解决方案5】:

        当我在装有 iOS 4.2 的 iPhone 3GS 上进行测试时,我的 xCode 4.3(基于 cocos3d) 项目遇到了同样的问题。

        转到您的项目设置并更新:
        目标(s) |总结 |链接的框架和库 | GLKit.framework可选
        (而不是必需)然后再次测试。

        进行此更改后,我现在似乎一切都很好。

        祝你好运!

        【讨论】:

          【解决方案6】:

          如果您使用 Carthage,您可能忘记在“复制框架”中添加框架 转到目标 -> 构建阶段 -> 复制框架 -> 将框架添加到列表中。

          【讨论】:

            【解决方案7】:

            您的主要目标似乎正在链接到 XCTest.framework 但失败了。

            1) 转到项目设置 -> 2) 转到您的应用程序主目标 -> 其他链接器标志 3) 删除“-framework XCTest” 4) 确保您的测试目标的“其他链接器标志”字段仍然包含“ -framework XCTest'

            2) 检查 Images.xcassets 和其他资源,在文件检查器(右侧面板)中,查看“目标成员资格”,检查您是否选择了测试目标。

            3) 尝试在你的项目中搜索 XCTest,看看你设置了什么。

            尝试删除测试

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-07-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-08-29
              • 2023-03-29
              • 1970-01-01
              • 2018-03-01
              相关资源
              最近更新 更多