首页 > 解决方案 > 当项目构建在更高的 swift 版本中时,可以在 cocoapod 上使用更低的 swift 版本吗?

问题描述

我需要升级一个项目以在 swift 5 上运行,上次有人升级它是在 swift 4 上构建的项目。所以我完成了 Xcode 项目更新,但是当我尝试编译时,我的一些可可豆荚说它们是使用 swift 5 但 pod 本身还没有为 5 构建。这导致编译错误。

所以我认为我需要做的是浏览每个 pod 构建菜单并手动将 swift 版本设置为构建 pod 的最后一个 swift 版本。这是解决此问题的正确方法吗?我这样做会不会产生任何影响?

PS我发现这样做是可以的。然而,我的一个 pod 应该是在 swift 3 中构建的,因为它说其中一个代码行在 swift 4 中已被弃用。当我弄清楚在这种情况下该怎么做时,我会更新这个,但是如果你们中的一个大师想在这个很棒的地方带头。

标签: swiftxcodecocoapods

解决方案


所以是的,解决这个问题的正确方法是转到每个只能在较低版本的 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

推荐阅读