Xcode 9:使用Swift 3.1编译的模块不能在Swift 4.0中导入

更新到Xcode 9之后,我试图build立我的一个项目。

我使用FacebookLogin窗格。 我在FacebookLogin / LoginButton.swift中有一个编译器错误

@testable import FacebookCore ❌ Module compiled with Swift 3.1 cannot be imported in Swift 4.0 

在我的目标的构build设置中,Swift语言版本设置为Swift 3.2

我想我需要等待Facebook更新他们的pod? 还是有其他build议?

谢谢 !

我想补充一点,如果你使用Carthage在Swift 3.2中编译模块,你应该去一个terminal并运行:

 sudo xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer 

要使用Xcode 9命令行工具,可以运行:

 carthage update NameOfTheLibrary --platform iOS --no-use-binaries 

这将使用当前的命令行工具编译库,它可能有点慢,但现在应该build立项目。

注意

要恢复和使用稳定的Xcode命令行工具,只需运行:

 sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer 

Xcode 9带有一个Swift 4编译器,可以理解Swift 3.2和Swift 4,它甚至可以让你在两个版本之间进行混搭。 不幸的是,其他版本不支持。

即使你将语言设置为Swift 3.2,它也使用Swift 4编译器。

如果你使用的是cocoapods,你可以把它添加到你的pod文件的最后,强制这个pod使用Swift 3.2或者4.0:

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

或者,您可以将来自Pod的文件直接放到您的项目中,直到FacebookLogin更新为Swift 3.2或4。

注意:根据Matt的反馈进行编辑

也许你可以在构build目标之前清理目标。 这对我来说可以。

做一个“干净的生成文件夹”,重新启动Xcode 9为我清理错误。 此外,错误并没有阻止应用程序在我的设备或模拟器上运行。

转到xcode DerivedData目录然后删除它里面的所有文件,并重新编译你的项目。 它为我工作。

默认的DerivedData目录是〜/ Library / Developer / Xcode / DerivedData。

我在Xcode 9 Beta 3上遇到了同样的问题,它指向“Alamofire”并尝试了几个不同的解决scheme,我发现的最简单的方法是

 1. CMD+SHIFT+K to clean the build 2. Restart Xcode 9 <-- make sure you do this step, that's critical. ` 

这个对我有用。

1.在Xcode 8中清理你的项目

2.在Xcode 9中build立或运行你的项目

如果使用迦太基 ,打开terminal和;

 carthage update --platform iOS --no-use-binaries 

如果使用Pod ,打开terminal和;

 pod update 

(如果在pod中不工作,则可以在podfile中更改SWIFT_VERSION例如:

 config.build_settings['SWIFT_VERSION'] = '3.2' 

后;

打开Xcode并使用;

 Command+Option+Shift+K 

在这里输入图像说明

我有同样的问题与Xcode 9 GM,这解决了我的问题:从项目中删除它,并再次拖到“embedded式二进制文件”。

我在Xcode 9中清理了项目,然后运行该应用程序,它工作。

我有

 pod 'FBSDKCoreKit' pod 'FBSDKLoginKit' pod 'FBSDKShareKit' 

在我的项目中import FBSDKLoginKit ,清理目标后我没有任何问题

由于你使用的窗口是快速的,并且是一个testing版,所以你很可能会在swift 4编译器中遇到一些问题,你应该暂时使用pod的objective-c版本

如果你从Pod使用:

  1. Podfile留言评论FacebookLogin pod
  2. 荚安装

  3. Podfile取消注释FacebookLogin窗格
  4. 荚安装

  5. 再次运行你的项目

对于我的情况 – 实际的pod引用了一个静态的zip,带有swift 3.1的预编译的二进制文件。 所以唯一的解决scheme是用xcode 9的源代码重build框架。

https://github.com/AudioKit/AudioKit/issues/980