迁移到 Swift 4.2

Xcode 10.0 配备了 Swift 迁移工具,可帮助您将项目迁移到 Swift 4.2。

有关先前版本的迁移指南,请参阅 迁移到 Swift 4

迁移前准备

确保您要迁移的项目在 Swift 3 或 Swift 4 模式下成功构建,并且所有测试都通过。您可能需要首先解决由于编译器更改而导致的错误。

强烈建议在源代码控制下管理您的项目。这将使您能够轻松查看通过迁移助手应用的更改,并在需要时放弃它们并重新尝试迁移。

您可以决定何时以及是否在每个目标的基础上进行迁移,这对于您的项目来说是有意义的。虽然绝对鼓励迁移到 Swift 4.2,但这并非一个全有或全无的过程,因为 Swift 3、4 和 4.2 目标可以共存并链接在一起。

迁移助手会执行迁移器构建以收集更改,使用您选择的 scheme,因此将要处理的目标是 scheme 中包含的目标。要查看和修改 scheme 中包含的内容,请调用编辑 Scheme…表单,并从左侧的列中选择Build选项卡,并确保包含所有目标及其单元测试。

如果您的项目依赖于 Carthage 或 CocoaPods 提供的其他开源项目,请查阅 使用 Carthage/CocoaPods 项目 部分。

Swift 迁移助手

当您首次使用 Xcode 10 打开您的项目时,您将在 Issue Navigator 中看到一个迁移机会项目:单击它以激活一个工作表,询问您是否要迁移。您可以稍后提醒自己,或从菜单Edit -> Convert -> To Current Swift Syntax…手动调用迁移器。

您将看到要迁移的目标列表。不包含任何 Swift 代码的目标将不会被选中。

如果所有选定的目标都处于 Swift 4 模式,则只有一个迁移工作流程,但对于 Swift 3 目标,@objc 推断有两种选择

有关这两种选择的更多信息和含义,请参阅 Xcode 帮助文章 迁移到 Swift 4 @objc 推断

单击Next将弹出Generate Preview表单,助手将启动迁移构建以获取源代码更改。完成后,您将看到一旦单击“Save”后将应用的所有更改。 这还将把迁移目标的Swift Language Version构建设置更改为Swift 4.2

处理目标时可能存在问题,这将对迁移过程产生负面影响。切换到Report Navigator并选择添加的Convert条目;这是转换构建日志。检查日志中可能出现的错误。

如果您看到关于无法对目标进行代码签名的错误,请尝试从目标的构建设置中禁用代码签名。如果您看到其他错误,请提交错误报告并包含详细信息。强烈建议您附加一个项目,以说明可能的错误迁移。

Swift 4.2 迁移更改概览

迁移器建议的大部分更改来自对先前 SDK 和当前 SDK 的比较生成的数据,这可能会导致标识符和类型重命名,例如;以及来自正常的编译器修复

最普遍的 SDK 更改是将全局常量移动到静态类型属性中,并将字符串常量转换为 Swift 枚举 case。这些都由迁移器自动处理。

如果您从 Swift 3 代码迁移,另请参阅去年迁移器从 迁移到 Swift 4 的迁移更改概览。

迁移后

虽然迁移器将为您处理许多机械更改,但在应用迁移器更改后,您可能仍需要进行更多手动更改才能构建项目。

您可能会看到与修复相关的编译器错误;虽然迁移器旨在合并 Swift 4 编译器提供的修复,但如果某些修复不是 100% 适用,则可能不会应用它们。

即使编译正常,迁移器提供的代码也可能不是理想的。请使用您的最佳判断,并检查更改是否适合您的项目。

请参阅已知迁移问题部分,了解您在尝试迁移项目时可能遇到的一系列问题。

已知迁移问题

SDK

其他

使用 Carthage/CocoaPods 项目

以下是使用 Carthage、CocoaPods 或 Swift Package Manager 等包管理器迁移具有外部依赖项的项目时需要考虑的一些要点。

其他