在Xcode/Cocoapods项目中更新Swift版本的正确方法是什么?

23

我有一个使用Swift 4.2编写的Xcode项目,其中包含Cocoapods(RealmSwift)。

我已经将Xcode更新到10.2,现在正在提示我将我的代码(以及RealmSwift代码)转换为Swift 5,并且会为Realm Swift生成大量警告(例如,在公共扩展中声明的实例方法的“public”修饰符是多余的)。

更新Cocoapods代码的正确方法是什么?我需要指定/升级到更新版本的RealmSwift(如何知道它是否与Swift 5兼容?),还是有一种推荐的方法可以抑制警告,如果我不想升级到Swift 5?

如果有关于处理xcode/swift/cocoapods更新的最佳方式的文档,请提供任何指针。

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
16

当更新Xcode版本时,确保不会陷入无法工作的情况。

你可以在同一台Mac上安装两个版本的Xcode,并尝试使用新版本。

现在,你可以通过从此处https://developer.apple.com/download/more下载以前的版本来回到以前的Xcode。解压缩下载的存档文件并将App文件复制到macOS中的应用程序文件夹中。

在升级所有内容之前,我建议你先删除Xcode 10.2并返回安装10.1或10.0(可以从上面的链接下载)。

等项目构建完成且稳定后,你可以尝试升级所有内容(Xcode、Swift和PODs)。首先,检查项目能否使用当前的Swift版本构建,这个Swift版本可以在Target > Build Settings > Swift Language Version下找到。

如果此时项目无法构建,请使用之前的Xcode版本使其构建,以简化生活并确保通过升级不会出现破损功能,因为其他POD可能已更改其实现方式与你的项目配合使用。

当项目成功构建后并想要升级到新的Swift版本时:

  • 研究你的PODs的最新版本以及它们支持的Swift版本。
  • 尝试仅升级项目而不升级PODs。如果可以,请稍后再升级PODs,以确保它们保持与当前适用于你的Swift版本(例如,Swift 3.2)的版本一致。
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.2'
    end
  end
end
  • 如果您只想将项目转换为较新的Swift版本,请前往编辑 -> 转换 -> 转换为当前的swift语法。弹出窗口将显示包括Pod在内的目标列表。取消选择除了您的项目目标、单元测试和UI测试之外的所有内容,然后按下转换按钮。等待项目构建并生成预览,应用更改。修复由新的Swift版本要求创建的所有问题和警告。

  • 要更新支持新Swift版本的所有POD,您需要使用每个POD的正确版本,并且对于尚不支持新Swift版本的POD,您可以在Podfile中替换代码片段以实现更新。

  • post_install do |installer|
        installer.pods_project.targets.each do |target|
            if ['UnsupportedPod1', 'RxSwift', 'RxCocoa'].include? target.name
                target.build_configurations.each do |config|
                    config.build_settings['SWIFT_VERSION'] = '3.2'
                end
            end
        end
    end
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,