ios - 如何调试 iOS 框架 dyld "lazy symbol binding failed"崩溃

标签 ios swift xcode

我正在 OS X 10.11.6 上使用 Xcode 8.2.1 为 iOS 10.2 构建 iPad 应用程序,当我尝试调用使用由 Carthage 构建的特定依赖项的代码时,应用程序崩溃并且似乎表明框架二进制文件不在内存中,如预期的那样:

dyld: lazy symbol binding failed: Symbol not found: __TFC12ObjectMapper6MapperCfT7contextGSqPS_10MapContext___GS0_x_
  Referenced from: /Users/me/Library/Developer/CoreSimulator/Devices/<UUID>/data/Containers/Bundle/Application/<UUID>/AppName.app/Frameworks/AlamofireObjectMapper.framework/AlamofireObjectMapper
  Expected in: /Users/me/Library/Developer/CoreSimulator/Devices/<UUID>/data/Containers/Bundle/Application/<UUID>/AppName.app/Frameworks/ObjectMapper.framework/ObjectMapper

dyld: Symbol not found: __TFC12ObjectMapper6MapperCfT7contextGSqPS_10MapContext___GS0_x_
  Referenced from: /Users/me/Library/Developer/CoreSimulator/Devices/<UUID>/data/Containers/Bundle/Application/<UUID>/AppName.app/Frameworks/AlamofireObjectMapper.framework/AlamofireObjectMapper
  Expected in: /Users/me/Library/Developer/CoreSimulator/Devices/<UUID>/data/Containers/Bundle/Application/<UUID>/AppName.app/Frameworks/ObjectMapper.framework/ObjectMapper

我正在使用 Alamofire进行 HTTPS 调用,以及 AlamofireObjectMapper (以及扩展为 ObjectMapper )来解析响应 JSON。它在此应用程序/项目的许多先前运行中运行良好,并且似乎自发地开始崩溃。

奇怪的是,Alamofire 调用do 发出请求并接收响应,但在解析响应(其格式或数据未更改)时发生崩溃。因此,很明显,包括 Carthage 构建的框架适用于某些依赖项,但不适用于其他依赖项。我正在指定 ==在我的 Cartfile以及使用 Cartfile.resolved固定所有依赖项的确切版本。

我尝试过的

  • 将代码回滚到已知良好的提交以验证它不是新引入的错误代码更改
  • 退出并重新启动 Xcode
  • 退出并重新启动 iOS 模拟器
  • 清理 Xcode“派生数据”文件夹
  • 重启机器
  • 删除并重建 Carthage 依赖项 ( carthage update --platform iOS )
  • 验证 ObjectMapper.framework包含在目标的 Link Binary With Libraries 构建阶段以及其他 Carthage 构建的框架中: Link Binary With Libraries Build Phase
  • 已验证路径 $(SRCROOT)/Carthage/Build/iOS/ObjectMapper.framework包含在运行脚本构建阶段的输入文件中以运行/usr/local/bin/carthage copy-frameworks ,以及其他几乎相同(且有效)的框架路径: Copy Frameworks Run Script Build Phase
  • 清理产品并使用 Xcode 重新构建
  • 已验证 ObjectMapper 框架二进制文件存在于 <DerivedData>/AppName.app/Frameworks/ObjectMapper.framework/ObjectMapper 中构建的应用程序包中

我无法理解为什么这个框架显然正在构建、包含但未加载。如何更深入地调试此问题?

最佳答案

我遇到了同样的问题。在 AlamofireObjectMappter Github 上检查这个问题。

https://github.com/tristanhimmelman/AlamofireObjectMapper/issues/179

AlamofireObjectMapper 可能不支持 ObjectMapper 最新版本...修复版本 2.2.1 on carthage github "Hearst-DD/ObjectMapper""2.2.1"

关于ios - 如何调试 iOS 框架 dyld "lazy symbol binding failed"崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41372436/

相关文章:

ios - Xcode 工具是否支持 iOS 6.1.2 升级?

ios - iOS app 提交到 iTunesConnect 内测时,是否需要分发证书

ios - 如何获取中间字符串字符?

ios - 滑动 ViewController 时导航栏错误

ios - 向多个收件人发送消息时,快速/核心数据提取到数组

ios - Swift中使用自定义分段控件时CollectionCell数据显示问题

ios - 在构建阶段运行脚本中使用 Firebase 上传符号时,Xcode 构建永远不会完成

ios - UILocalNotification 自定义 soundName 未播放

ios - 在 UITableViewCell 中自动布局两个标签?

ios - 在 podfile 中添加 'use_frameworks!' 会破坏应用程序