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,你现在可能不走运。
在途中您可能仍会遇到一些问题,这里有一些最佳做法可以避免出现更多问题。
- 完全删除 cartfile.resolved 和 Carthage 文件夹
- 确保删除之前添加到项目中的所有库副本。
- 从 Targets > Yourapp > General 中删除嵌入式库和链接的框架和库。
- 产品 > 清理构建文件夹
- 使用 Carthage 更新命令更新购物车文件并获取新源
- 现在将库导入回您的项目。
希望它有效。
我想使用 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 文件夹,获取并生成,然后将新的框架文件夹导入您的项目。
这就是帮助我的原因。
例如:
我正在尝试按照说明将第三方应用程序集成到项目中 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,你现在可能不走运。
在途中您可能仍会遇到一些问题,这里有一些最佳做法可以避免出现更多问题。
- 完全删除 cartfile.resolved 和 Carthage 文件夹
- 确保删除之前添加到项目中的所有库副本。
- 从 Targets > Yourapp > General 中删除嵌入式库和链接的框架和库。
- 产品 > 清理构建文件夹
- 使用 Carthage 更新命令更新购物车文件并获取新源
- 现在将库导入回您的项目。
希望它有效。
我想使用 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 文件夹,获取并生成,然后将新的框架文件夹导入您的项目。 这就是帮助我的原因。
例如: