Swift 4.2.1 编译的模块无法被 Swift 5.0 编译器导入

Module compiled with Swift 4.2.1 cannot be imported by the Swift 5.0 compiler

我正在尝试按照说明将第三方应用程序集成到项目中 https://github.com/Paytm-Payments/Paytm_iOS_App_Kit/tree/master/Swift/BitCodeDisabled/PaytmNativeSDK

我在构建中看到以下错误

Module compiled with Swift 4.2.1 cannot be imported by the Swift 5.0 compiler

我试过工具链https://medium.com/xcblog/switching-swift-versions-inside-xcode-using-toolchains-755b28831c43 错误变为 Reason: Incompatible library version: PaytmNativeSDK requires version 1.0.0 or later, but libswiftCore.dylib provides version 0.0.0

如何设置 XCode 或库以使其正常工作。供应商没有机会为 Swift 5.0 更新库并使其在 POD 上可用。

对于 Carthage 用户: 升级到 Xcode 10.2 后,我 运行 遇到了同样的问题,我使用 Carthage 导入的框架。

我通过重建框架解决了:

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

正确的解决办法是下载Xcode10.1,等待苹果补丁修复bug。

不要浪费时间修复第三方错误。


我的项目的问题是我们正在使用 Carthage 无法更新的 Alamofire。

如果您的项目中有仍然使用 4.2 编译器构建的外部库,而新的 Xcode 尝试在 5.0 编译器中构建您的项目,则会发生这种情况。

就我而言,我使用 Carthage 导入的库很少。幸运的是,我使用的库在过去几天发布了更新,使其与 Swift 5.0 编译器兼容。如果那些外部库没有更新它以支持 Swift 5.0,你现在可能不走运。

在途中您可能仍会遇到一些问题,这里有一些最佳做法可以避免出现更多问题。

  1. 完全删除 cartfile.resolved 和 Carthage 文件夹
  2. 确保删除之前添加到项目中的所有库副本。
  3. 从 Targets > Yourapp > General 中删除嵌入式库和链接的框架和库。
  4. 产品 > 清理构建文件夹
  5. 使用 Carthage 更新命令更新购物车文件并获取新源
  6. 现在将库导入回您的项目。

希望它有效。

我想使用 Swift 4.2(Xcode 10.2 应该仍然支持,我已经在 Swift 语言版本中设置了它),但它仍然给我一个关于Swift 5.0 编译器。因此,在尝试清除构建文件夹、派生数据等所有内容后,我得出的结论是它在 Xcode 10.2.

上不起作用

我恢复到 Xcode 10.1,您可以下载 here。这行得通。因此,在 Apple 修复此错误之前,我不得不继续使用 Xcode 10.1.

我的 Carthage 问题与 xcode 阶段有关,该阶段将二进制文件复制到 "carthage copy-frameworks"阶段。

我有一个与 中评论的解决方案略有不同的解决方案,因为该解决方案在某些情况下还会更新依赖项版本。

所以,我刚刚执行了"carthage build"。我还包括一个 Carthage 的缓存清理,以修复子任务中可能出现的错误(在我的例子中,git 克隆与 "exit code 1" 失败)

rm -rf ~/Library/Caches/org.carthage.CarthageKit
carthage build --no-use-binaries --platform iOS --verbose

框架的开发者需要提供更新,内置于Xcode 10.2。

框架开发人员说明:
即使您在 Xcode 10.2 或使用 CI 使用的默认版本创建框架,您的用户仍可能遇到此类错误。您应该确保 Xcode 10.2 是您的默认命令行工具。您可以使用命令 xcodebuild -version 在终端中检查它。 默认版本可以在Xcode -> Preferences -> Locations -> Command Line Tools.

中调整

该库的提供者应使用 BUILD_LIBRARY_FOR_DISTRIBUTION = YES; 重建它(在 Xcode 11.3 中 构建设置 -> 构建选项 中可用)。已经要求这样做 in the corresponding GitHub issue。之后 PaytmNativeSDK 将与下一个 Swift 版本兼容。

看来问题已在 804152caae76245d96548eb74ea87a6150239407 中得到解决。

只需删除所有 *.framework 文件夹,获取并生成,然后将新的框架文件夹导入您的项目。 这就是帮助我的原因。

例如: