从Swift 3.2迁移到Swift 4会导致“无法导入桥接头”错误

时间:2017-07-24 07:16:07

标签: ios swift4 xcode9

Apple已发布支持Swift 4.0的Xcode 9 beta版。我一直在尝试从Swift 3.2升级我的代码到Swift 4.0。但它不断给我failed to import bridging header错误,而我的项目成功构建。

Xcode错误详情:

  

转换为当前Swift语法失败

     

在尝试迁移之前,请确保使用当前配置的Swift版本成功构建所有选定目标。

在将代码库升级到swift 4时,是否有任何人遇到类似错误。

7 个答案:

答案 0 :(得分:5)

我的一个项目中遇到了类似的问题,接下来我解决了这个问题:

我发现CocoaPods就是问题所在。

  1. 我从我的项目中移除了CocoaPods(如果你不知道如何检查这个How to remove CocoaPods from a project?

  2. 别忘了如果你有单位& ui测试你必须从它们上面的链接重复第4步。

  3. 将您的代码库升级到Swift 4

  4. 再次安装pod,您就完成了。

  5. 希望有所帮助:)

答案 1 :(得分:0)

确保编译所有目标,包括测试。从项目中删除Cocoapods后删除NAME.xcworkspace

这为我解决了。

答案 2 :(得分:0)

对我来说,我从3.2迁移到4.0失败了,当我尝试编辑>时,我总是收到此错误消息转换>当前的Swift语法......

我的修复很简单,将项目设置的快速版本从4.0设置回3.2或者您使用的任何版本。

这是因为虽然第一次迁移失败,但Xcode已在项目设置中将swift版本更改为4.0。

答案 3 :(得分:0)

您在桥接头文件中放置的至少一个目标c类可能没有编译 - 在桥接头文件中注释掉所有条目,然后编译 - 它应该能够立即导入桥接头,但是因为找不到类,会产生很多错误。现在逐个取消注释这些行,找出哪些导致导入失败,然后修复这些文件。

答案 4 :(得分:0)

在项目的构建设置和所有目标中更改 Swift语言版本之后,我不得不在中更改此函数声明> AppDelegate.swift 至:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return true }

答案 5 :(得分:0)

对我们来说,有效的方法是删除UnitTest和UITests

点击项目,然后单击“右键”->删除两个依赖项

希望有帮助

答案 6 :(得分:0)

我的所有代码都在Swift 5中,除了我的Pod之一,这几年没有更新。该吊舱使用Swift 4。

当我添加一个新的Swift5容器时,发生了这个错误。

所以,我要做的就是:

  1. 更改受影响的Pod的Swift版本以匹配项目的其余部分

enter image description here

  1. 清洁项目