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

在更新到 Xcode 9之后,我尝试构建我的一个项目。

我用的是 Facebook 登录分离舱。 我在 FacebookLogin/LoginButton.swift 中有一个编译器错误

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

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

Screenshot added

我想我需要等待 Facebook 更新他们的播放器? 或者其他建议?

谢谢!

36958 次浏览

也许你可以在制造之前清理掉目标。 我觉得挺好的。

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

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

如果你正在使用 cocoapods,你可以将它添加到你的 pod 文件的末尾,强制 pods 使用 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 的反馈进行编辑

是的

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

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

由于您使用的 pod 是在迅速,是一个 beta pod,很可能你会有一些问题与迅速4编译器,你应该使用的目标-c 版本的 pod 的时间

执行“干净的构建文件夹”并重新启动 Xcode 9为我清除了错误。此外,这个错误并没有阻止应用程序在我的设备或模拟器上运行。

对我有用。

在 Xcode 8中清理项目

2. 用 Xcode 9构建或运行项目

然后删除其中的所有文件并重新编译您的项目。对我有用。

默认的衍生数据目录是: ~/Library/Developer/Xcode/ 衍生数据。

我在 Xcode 9 Beta 3中遇到了同样的问题,它指向“ Alamofire”,并尝试了一些不同的解决方案,我发现最简单的是

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

如果你使用 Pod:

  1. Podfile注释中的 FacebookLogin 吊舱
  2. 吊舱安装

  3. Podfile中取消注释 FacebookLogin 吊舱
  4. 吊舱安装

  5. 再次运行您的项目

更新:

解决方案也在 Swift 5和 Xcode 11中进行了测试和工作。

原文:

我想补充的是,如果你使用 迦太基在 Swift 3.2中编译一个模块,你应该到一个终端并运行:

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

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

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

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

注意

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

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

在我的案例中,实际的 pod 引用了一个静态 zip,并预先构建了针对 Swift 3.1的二进制文件。 因此,唯一的解决方案是使用来自 xcode 9的源代码重新构建框架。

Https://github.com/audiokit/audiokit/issues/980

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

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

如果使用 波德,打开 晚期和;

pod update

(如果不在 pod 中工作,可以在 podfile Ex 中更改 SWIFT _ VERION:

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

)

之后;

开放 Xcode 和使用;

Command+Option+Shift+K

enter image description here

我在 Xcode 9 GM 上遇到了同样的问题,这解决了我的问题: 将其从项目中删除,并将其再次拖动到“嵌入式二进制文件”中。

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

清除生成文件夹

Cmd + option + shift + K