【问题标题】:dyld: Symbol not found: _UITransitionContextFromViewControllerKeydyld:找不到符号:_UITransitionContextFromViewControllerKey
【发布时间】:2015-05-02 04:41:50
【问题描述】:

我收到了关于我的应用在 iOS 6 中加载时崩溃的报告。它是使用 iOS 8 SDK 构建的,在 7 和 8 上运行良好。 我刚刚设法拿到一个 iOS 6 设备进行测试,它实际上在启动时崩溃并出现错误:

dyld:未找到符号:_UITransitionContextFromViewControllerKey
参考自: /var/mobile/Applications/895BC1B3-A362-42C9-8560-5CF40A682A10/myapp.app/MyApp 预期在:/System/Library/Frameworks/UIKit.framework/UIKit 中 /var/mobile/Applications/895BC1B3-A362-42C9-8560-5CF40A682A10/myapp.app/MyApp

我知道dyld 是一个链接器问题,但不知道从哪里开始。 我已经取消链接并重新添加了 UIKit,但仍然无法正常工作。

谢谢

【问题讨论】:

    标签: ios iphone ios6 crash dyld


    【解决方案1】:

    这是因为UITransitionContextFromViewControllerKey 不存在until iOS 7。解决这个问题可能不值得付出努力——这意味着放弃所有 UIViewControllerContextTransitioning 的使用,因为该协议是 iOS 7 中的新协议,或者为 iOS 6 创建单独的代码路径。如果这是你想要的,请查看 @ 987654322@,虽然这可能是result in slow startup

    【讨论】:

    • 谢谢,我在我的代码中找不到对UITransitionContextFromViewControllerKey 的任何引用,这就是我感到困惑的原因。将UIKit 框架设置为可选会阻止崩溃,但是在这里这样做是正确的吗?
    • 可能是一些生成的代码,例如来自 Interface Builder,正在使用该符号。如果您要链接到任何静态库,它们可能会导入符号。如果您的应用正在导入UITransitionContextFromViewControllerKey,那么这意味着有一些代码路径,不一定是您编写的代码,使用它。在 iOS 6 上,它将是 NULL。这可能会或可能不会导致坏事发生。如果您想深入挖掘,您可以使用otool -tvV 来反汇编您的应用程序并查看引用 UITCFVCK 的位置并评估您的风险级别。我可能只是不支持 iOS 6。
    • 感谢您的解释。我会试试 otool 并权衡我的选择。
    • 罪魁祸首是 Aviary aviary.com 它在他们的文档中确实提到了 UIKit 的弱链接,但我想经过多年的更新,人们不会每次都阅读安装文档。
    【解决方案2】:

    看起来你正在使用 UIViewControllerContextTransitioning。它仅适用于 iOS 7+。

    更多详情请查看此问题Restore pre-iOS7 UINavigationController pushViewController animation

    【讨论】:

      猜你喜欢
      • 2020-04-18
      • 2016-06-01
      • 2021-12-30
      • 2020-07-22
      • 2019-08-18
      • 2020-02-13
      • 2017-01-29
      • 2019-01-01
      • 1970-01-01
      相关资源
      最近更新 更多