在Xcode 9中编译的应用程序在iOS9和iOS10启动时崩溃 - dyld:未找到符号

时间:2017-10-02 21:10:22

标签: ios swift xcode alamofire xcode9

使用XCode8编译时,我的应用程序在所有iOS版本上运行良好。现在,当使用Xcode 9进行编译时,它在iOS11设备上运行良好,但它会在运行iOS10和iOS9的模拟器和设备上崩溃。我在控制台中收到以下消息:

dyld: Symbol not found: _OBJC_CLASS_$_NSURLSessionStreamTask
Referenced from: /private/var/containers/Bundle/Application/F3BE9A47-374A-4BEA-AC7F-A01F4B0FD87F/MyApp.app/Frameworks/Alamofire.framework/Alamofire
Expected in: /System/Library/Frameworks/Foundation.framework/Foundation
in /private/var/containers/Bundle/Application/F3BE9A47-374A-4BEA-AC7F-A01F4B0FD87F/MyApp.app/Frameworks/Alamofire.framework/Alamofire

正如您所看到的,我正在使用Alamofire。我的应用程序的开发目标是9.3,Alamofire的开发目标也是9.3。 BaseSDK是iOS11(因为它是Xcode 9)。

经过一些研究后,我不认为这是一个Alamofire问题,而是一个Xcode问题。这些是我发现的一些类似的问题,但是尝试了所有提供的解决方案(包括标准的清洁/清理构建文件夹/删除派生数据),它们似乎都不起作用:

有没有人有这方面的解决方案,除了回滚到Xcode 8?

2 个答案:

答案 0 :(得分:5)

找到解决方案。它与同一主题上的其他帖子类似,但有一点扭曲。这就是我的工作方式:

  • 将Foundation.framework添加到 Alamofire iOS目标的链接框架和库中(所以不是您的项目的目标)
  • 将其设为可选。 (我试过要求,但那不起作用)。

答案 1 :(得分:0)

我刚发现问题。在我们的Podfile中,我们有以下设置:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.3'
    end
  end
end

当我删除它时,崩溃消失了。

像其他帖子一样,将Foundation更改为optional也可以解决该问题,但是由于再次运行pod install会覆盖更改并再次需要它,因此不适用于我们的构建过程。