Xcode 9:使用 Swift 3.1 编译的模块无法在 Swift 4.0 中导入
Posted
技术标签:
【中文标题】Xcode 9:使用 Swift 3.1 编译的模块无法在 Swift 4.0 中导入【英文标题】:Xcode 9 : Module compiled with Swift 3.1 cannot be imported in Swift 4.0 【发布时间】:2017-11-08 00:11:04 【问题描述】:更新到 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 吗?还是有其他建议?
谢谢!
【问题讨论】:
你可以试试。 Try cleaning the project from Product -> Clean in Xcode 8 and build again. 【参考方案1】:更新:
该解决方案还在 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
【讨论】:
我在使用 Algolia 框架时遇到了同样的错误,并且使用 carthage 和 Xcode 9 命令工具构建它工作正常!谢谢 使用 SwiftyJson 为我工作。谢谢! 使用 Alamofire 为我工作 嗨@xaviPedrals,我需要你的帮助...我正在尝试运行该项目“github.com/swiftingio/SingTest”但收到错误“Swift 4.2.1 编译器无法导入使用 Swift 3.1 编译的模块:/Users/aliapple/Desktop/SingTestByAhtazaz/Pods/AudioKit/iOS/AudioKit.framework/Modules/AudioKit.swiftmodule/arm64.swiftmodule”。你能帮我吗? 嗨@Mr.Ahtazaz 该项目是2年前的,所以它可能是在Swift 3中制作和编译的,首先项目应该更新到Swift 4或5,然后尝试运行carthage命令@ 987654325@更新库,你应该没事【参考方案2】: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。
注意:根据马特的反馈编辑
【讨论】:
仅供参考 - 强制所有 pod 使用 Swift 4.0 有点过于激进。如果 pod 兼容 Swift 3,您可以安全地升级到 Swift 3.2。升级到 4.0 很可能会导致许多 pod 出现编译器问题。【参考方案3】:也许您可以在构建目标之前清理它。 对我来说效果很好。
【讨论】:
对我不起作用,仍在寻找其他解决方案。【参考方案4】:我在 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 年,我们仍然需要重启 Xcode 来解决 bug。谢谢你,苹果。谢谢。【参考方案5】:执行“清理构建文件夹”并重新启动 Xcode 9 为我清除了错误。此外,该错误并没有阻止应用程序在我的设备或模拟器上运行。
【讨论】:
"clean build folder":要访问该选项,请打开 Product 菜单并使用 Option 键显示 Clean Build Folder 选项。【参考方案6】:转到 xcode DerivedData 目录,然后删除其中的所有文件并重新编译您的项目。它对我有用。
默认的 DerivedData 目录是 :~/Library/Developer/Xcode/DerivedData。
【讨论】:
【参考方案7】:如果使用 Carthage ,打开 terminal 和;
carthage update --platform iOS --no-use-binaries
如果使用 Pod ,打开 terminal 和;
pod update
(另外,如果不在 pod 中工作,您可以在 podfile 中更改 SWIFT_VERSION Ex:
config.build_settings['SWIFT_VERSION'] = '3.2'
)
之后;
打开Xcode并使用;
Command+Option+Shift+K
【讨论】:
请不要对多个问题发布相同的答案。发布一个好的答案,然后投票/标记以关闭其他问题作为重复问题。如果问题不是重复的,请调整您对该问题的答案。见meta.stackexchange.com/q/104227/311792 @paper1111 我在回答和作品中解释了一切 我正在使用 carthage,这是对我有用的解决方案。迦太基更新“我的框架”没有删减它。我不得不更新整个迦太基目录。花了很长时间,但成功了。 这个解决方案也对我有用。为了确保在使用 Command+Option+Shift+K 清理构建文件夹后关闭并重新启动 xcode。 @SwiftDeveloperconfig.build_settings
部分去哪儿了?【参考方案8】:
它对我有用。
1.在 Xcode 8 中清理您的项目
2.在 Xcode 9 中构建或运行您的项目
【讨论】:
【参考方案9】:我在 Xcode 9 中清理了项目,然后运行应用程序,它可以工作。
【讨论】:
【参考方案10】:我在使用 Xcode 9 GM 时遇到了同样的问题,这解决了我的问题: 从项目中删除它并再次将其拖到“嵌入式二进制文件”中。
【讨论】:
我遇到了 Alamofire 4.5.1 的问题,并通过pod update
尝试了此页面上的所有其他内容,但没有结果。最后,我将框架直接添加到我的项目中,并将其添加到我的嵌入式二进制文件中【参考方案11】:
清理构建文件夹
Cmd + option + shift + K
【讨论】:
【参考方案12】:我有
pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'
在我的项目和import FBSDKLoginKit
中,清理目标后我没有任何问题
由于您使用的 pod 是 swift 并且是 beta pod,因此您可能会遇到 swift 4 编译器的一些问题,您应该暂时使用 Objective-c 版本的 pod
【讨论】:
【参考方案13】:如果你从 Pod 中使用:
-
在
Podfile
评论FacebookLogin pod
在吊舱安装
Podfile
中取消注释 FacebookLogin 窗格
再次运行您的项目吊舱安装
【讨论】:
【参考方案14】:就我而言 - 实际的 pod 引用了一个静态 zip,其中包含针对 swift 3.1 的预构建二进制文件。 因此,唯一的解决方案是使用 xcode 9 的源代码重建框架。
https://github.com/AudioKit/AudioKit/issues/980
【讨论】:
我有一个类似的问题,即在 pod 中引用 AudioKit。但是,您的解决方案是指在“框架”中找到的 build_frameworks.sh 请添加更多详细信息。我找不到这样的文件。 尝试将 podfile 指向较新的版本。使用最新的 xcode 9 构建的版本 - / 无需更改构建脚本。 github.com/AudioKit/AudioKit/releases 感谢您的提示。我不得不将 cocoapods 中的 AudioKit 版本更新到最新版本,其中包含 build_frameworks.sh。需要 build_frameworks.sh 来“验证”AudioKit,以阻止 Apple 拒绝该应用程序。以上是关于Xcode 9:使用 Swift 3.1 编译的模块无法在 Swift 4.0 中导入的主要内容,如果未能解决你的问题,请参考以下文章
没有这样的模块 'GoogleSignIn' Xcode 9.3 和 Swift 4.1