当项目构建在更高的 swift 版本时,可以在 cocoapod 上使用较低的 swift 版本吗?

Is it ok to use a lower swift version on a cocoapod when the project is built in a higher swift version?

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

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

P.S。 我发现这样做是可以的。然而,我的 pods 中的一个应该内置在 swift 3 中,因为它说其中一行代码在 swift 4 中已被弃用。当我弄清楚时我会更新它在那种情况下该怎么做,但如果你们中的一位专家想在这方面发挥带头作用,那就太好了。

所以是的,解决这个问题的正确方法是转到每个只能 运行 在较低版本 swift 上的 pod,然后手动更改 swift 中的版本建立菜单。我遇到的问题是,当我 运行 将自动更新代码更改为 swift 5 时,Xcode 也将所有 pods 更改为 swift 5。因为那些 pods 无法在 Swift 5 上 运行 直到它导致构建错误。

还有关于我的 P.S。请注意发生这种情况的原因是因为 pods 命令之一需要更改为他们在安装选项中更新的命令。

希望这对遇到此问题的其他人有所帮助。

编辑: 更准确地说,每次我 运行 pod install 时,都会有一些 pods 重置为 swift 5在 swift 中是 运行 4. 这是因为 pods 的作者没有将 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