80

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

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

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

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

添加了屏幕截图

我想我需要等待 Facebook 更新他们的 pod 吗?或任何其他建议?

谢谢 !

4

14 回答 14

73

更新:

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

原来的:

我想补充一点,如果您使用Carthage在 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
于 2017-08-01T10:11:19.813 回答
26

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。

注意:根据马特的反馈编辑

于 2017-06-07T14:17:46.380 回答
19

也许您可以在构建目标之前清理它。这对我来说可以。

于 2017-06-07T09:04:59.783 回答
11

我在 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. `
于 2017-07-12T19:20:18.633 回答
10

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

于 2017-06-07T17:51:26.263 回答
8

如果使用Carthage,打开终端和;

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

如果使用Pod,打开终端和;

pod update

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

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

)

后;

打开Xcode并使用;

Command+Option+Shift+K

在此处输入图像描述

于 2017-09-14T11:34:56.277 回答
8

转到 xcode DerivedData 目录,然后删除其中的所有文件并重新编译您的项目。它对我有用。

默认 DerivedData 目录是:~/Library/Developer/Xcode/DerivedData。

于 2017-07-11T10:32:58.270 回答
4

这个对我有用。

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

2.在 Xcode 9 中构建或运行您的项目

于 2017-07-04T05:20:32.980 回答
3

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

于 2017-09-21T13:02:03.143 回答
2

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

于 2017-09-18T18:11:14.140 回答
2

清理构建文件夹

Cmd + option + shift + K
于 2018-01-04T15:59:31.480 回答
1

我有

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

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

由于您使用的 pod 是 swift 并且是 beta pod,因此您可能会遇到 swift 4 编译器的一些问题,您应该暂时使用 pod 的 Objective-c 版本

于 2017-06-07T16:00:42.883 回答
0

就我而言 - 实际的 pod 引用了一个静态 zip,其中包含针对 swift 3.1 的预构建二进制文件。因此,唯一的解决方案是使用来自 xcode 9 的源代码重建框架。

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

于 2017-08-09T19:21:33.537 回答
0

如果您从 Pod 使用:

  1. Podfile评论 FacebookLogin pod
  2. 吊舱安装

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

  5. 再次运行您的项目
于 2017-07-30T14:25:38.763 回答