swift - 当项目构建在更高的 swift 版本中时,可以在 cocoapod 上使用更低的 swift 版本吗?
问题描述
我需要升级一个项目以在 swift 5 上运行,上次有人升级它是在 swift 4 上构建的项目。所以我完成了 Xcode 项目更新,但是当我尝试编译时,我的一些可可豆荚说它们是使用 swift 5 但 pod 本身还没有为 5 构建。这导致编译错误。
所以我认为我需要做的是浏览每个 pod 构建菜单并手动将 swift 版本设置为构建 pod 的最后一个 swift 版本。这是解决此问题的正确方法吗?我这样做会不会产生任何影响?
PS我发现这样做是可以的。然而,我的一个 pod 应该是在 swift 3 中构建的,因为它说其中一个代码行在 swift 4 中已被弃用。当我弄清楚在这种情况下该怎么做时,我会更新这个,但是如果你们中的一个大师想在这个很棒的地方带头。
解决方案
所以是的,解决这个问题的正确方法是转到每个只能在较低版本的 swift 上运行的 pod,并在构建菜单中手动更改 swift 版本。我遇到的问题是,当我将自动更新代码运行到 swift 5 时,Xcode 还将所有 pod 更改为 swift 5。由于这些 pod 无法在 Swift 5 上运行,因此导致构建错误。
另外关于我的 PS 说明,发生这种情况的原因是因为其中一个 pods 命令需要更改为他们在安装选项中更新的命令。
希望这对遇到此问题的其他人有所帮助。
编辑:更准确地说,每次我运行时,都会pod install
有一些 pod 在应该在 swift 4 中运行时重置回 swift 5。这是因为 pod 的作者有未将swift_version
参数设置为 pod 应使用的 swift 版本。这会导致应用程序无法编译并出现构建时错误。
要解决此问题,请将此代码添加到您的 Podfile 中,它将每次手动设置 swift 版本。请记住在更新后为每个 pod 删除它,因为您将覆盖创建者 pod swift 版本(如果他们想添加它)
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == 'KMPlaceholderTextView' || target.name == 'TagWriteView' || target.name == 'UILoadControl'
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '4.0'
end
end
end
end
推荐阅读
- azure - Azure OAuth2 代码流,组声明不在访问令牌中,而是在 id 令牌中
- python - Python在合并两个json文件时将额外的paratheses []添加到json文件中
- performance - StreamBuilder 更新性能(一个 vs 多个)
- python - PyTorch 张量切片和内存使用情况
- visual-studio-code - Windows 上的远程容器 - 如何?
- javascript - 在 REACT 中通过 API 构建无限加载时,即使我向下滚动很多页码也不会在控制台中更新
- haskell - Learn you a Haskell for Great Good 中的错字?
- c# - c#中的下拉框记事本如何在按下按钮时加载文本文件?
- python - pySpark 映射多个变量
- linux - 按作者过滤并计算所有数字 im txt 文件 - Linux 终端,bash