49b10a6ba33e683594d9389a12e450a5
What's new in Xcode 11

WWDC 2019 Session 401:What's new in Xcode 11

作者:Forelax

此次 Xcode 11 的更新,总体来说还是有不少让人兴奋的新特性的,了解这些新特性也对我们日常工作会有很大帮助,我们首先来整体看看都有哪些主要我们大概率会用得到的特性:

  • Xcode 11 中重新设计了 Assistant Editor 和 Version Editor 的使用方式,将这两个 Editor 切换按钮从最上层的工具栏中移除,使用起来更人性化一些。
  • 原本在 Xcode 中,我们最多只能同时在一个屏幕中看两个文件的代码,现在利用 Xcode 11 中的分屏功能,我们可以任意在同一屏幕中拆分出不同的部分来看代码,借用喵神的话说就是:"大屏用户的福音!想不到 Xcode 也能有今天"
  • Xcode 11 拥有了和 Sublime、Visual Studio Code 一样的 Source Minimap 了,并且在功能上要青出于蓝而胜于蓝
  • Xcode 11 集成了对 Swift Package Manager (SPM) 的支持,并且,全平台可用!
  • Xcode 11 丰富了对于 git 的支持,例如我们现在可以在 Xcode 中执行 cherry-pick 了
  • Xcode 11 中的 StoryBoard 的编辑页面中,增加了对 Dark Mode 的 UI 的预览功能
  • 当我们想测试 App 在弱网条件下的表现时,我们无需再借助开发者选项或者 Xcode 的 Additional Tools,可以直接在 Xcode 11 中设置
  • Xcode 11 提供的模拟器改成基于 Metal 构建后性能大大提升。同时得益于 watchOS 的升级,开启 watch 的模拟器的时候不需要先打开一个 iPhone 的模拟器了。

以上是本次 Session 的一个概览,更多的细节,我们将会根据 Session 的分类,在如下几个小节中仔细过一遍:

Workflow Update

Version Editor

在 Xcode 10 中,我们可以通过 Xcode 顶部工具栏的 Assistant Editor 和 Version Editor 按钮来分别完成比较基础的多文件查看功能和版本控制功能:

但之前的 Version Editor 的功能相对来说实在有些简单,我们只能查看两个文件之间的 Diff,而在 Xcode 11 中,我们可以通过使用隐藏在 Inspector 中的 History Inspector 来查看当前文件相关的 git 提交记录。例如,在某个工程中我们一共有三个提交,而在每个文件的 History Inspector 中,我们只会看到和当前文件的提交记录:

同时在 Hsitory Inpspector 中,我们也可以针对某一个 Commit 执行更为丰富的操作:

经过这样一番设计,原本的 Version Editor 其实已经名不副实了(因为大部分 Version 相关的功能都被迁移到了 History Inspector 中),为了适应这个变化,Xcode 11 中将原本的 Version Editor 按钮重命名为 Code Review:

Assistant Editor

在 Xcode 11 之前,Assistant Editor 是一个工具栏按钮,这也意味着,这个按钮的功能是针对当前 Window 生效的。例如,我们可能会在编辑 StoryBoard 的时候,打开 Assistant Editor,但当我们想要去编辑一个 .xcassets 文件时,由于 .xcassets 并没有对应的 Assistant Editor,我们就会看到 Xcode 显示出 "No Assistant Result" 的场景:

在 Xcode 11 中,Assistant Editor 从工具栏中被移除,和原本 Version Editor 中的 Authors 功能一起来到了他们的新家:Editor Options

这样一来,Xcode 对不同类型的文件(不是不同的文件)就会打开不同的 Editor,而 Editor 之间的 Editor Options 是相互独立的,也就是说,在 Xcode 11 中,如果我们针对源码文件的 Editor 开启了 Authors 功能或者 Assistant 功能,在我们打开 StoryBoard 的时候是不会看到 Authors 或者 Assistant 界面的。我们再也不会为一不小心打开一个 StoryBoard 文件的 Authors 界面而感到懊悔了。

Add Editor

作为开发者,如果我们非常幸运的拥有了一块儿特别大的屏幕,我们一定会尝试一件事:在屏幕上尽可能的同时展示多个代码文件。在 Xcode 11 之前,我们只能在打开的 Assistant Editor 中,通过点击右上角的 Add Assistant Editor 按钮,在 Assistant Editor 中纵向增加一个新的 Assistant Editor。这个功能对于拥有大屏幕的同学来可能说可能过于简单:

而现在,在 Xcode 11 中,我们可以通过 Add Editor 这个功能,自由的上下左右随意的增加新的 Editor 界面。来看看拥有大屏幕的喵神的杰作:

喵神的微博原图

喵神的微博原图

Add Editor 按钮位于 Editor Options 按钮的旁边,默认状态下是在右边添加新的 Editor,当我们按住 Option 的时候就可以切换成在下方添加新的 Editor。

来自作者的吐槽 (╯-_-)╯~╩╩

Beta 版中 Add Editor 还是很容易被玩儿坏的,例如当我数次点击 Add Editor 后,Xcode 就变成了这个样子:

同时注意,Ediotr 的关闭快捷键并不是 Command + W,而是 Control + Option + Command + W (好难按),所以当作者在 Happy 的打开了多个 Editor 并下意识的按了一下 Command + W 之后,一脸懵逼的发现整个窗口被关闭了。(在 Visual Studio Code、Sublime、IntelliJ 中完成类似分屏操作后,Command + W 的作用都是关闭当前选中的 Editor 而不是关闭整个窗口)

Destination Chooser

在 Xcode 11 中,我们不仅能够使用 Add Editor 按钮增加新的 Editor ,还能够利用 Destination Chooser 来打开新的 Editor 或者替换已有的 Editor,方法是按住 Shift + Option 后,点击左侧 Project Navigator 中的某一个文件,Destination Chooser 就会出现,我们可以使用上下左右键或者是鼠标来控制他,然后使用 Return 键来决定我们选中的文件的最终归宿或者是按 Esc 来退出。我们可以通过下面这个简单的演示视频来一览究竟:

Focus Mode

当我们打开了很多个 Editor 的时候,如果我们想专注于某个 Editor 中的内容,我们也可以将某个 Editor 设置为 Focus Mode(也就是将某个 Editor 最大化):

Source Minimap

此次 Xcode 11 中,还加入了早已在 Sublime 和 Visual Studio Code 中存在很久的 Source Minimap 中,不过令人惊喜的地方在于,Xcode 11 中加入的 Source Minimap 针对源码文件有了更加细致的展示,例如,如果我们在 Swift 中使用 // MARK: 来为代码做分段,那么 // MARK:后面的内容在 Source Minimap 中会放大展示出来:

同时当我们把光标放到 Source Minimap 上时,还可以看到当前光标指向部分的方法摘要信息(Session 中苹果工程师展示的是 Swift 源文件,但经过实际测试,OC 源文件和 Markdown 文件也支持显示这个摘要信息):

来自作者的小提示 ( ̄▽ ̄)~*

如果我们把光标放到 Source Minimap 的同时按住 Command 键,我们还会看到 Source Minimap 展示出来当前文件的所有摘要信息:

除此之外,Source Minimap 还有其他的一些细节,例如当我们在搜索的时候,Xcode 会在 Source Minimap 中着重显示搜索命中文字。当我们添加了新的断点, Xcode 也会在 Source Minimap 中着重显示断点所在的位置。

Source Code Edit Enhanced

在源码编辑方面,Xcode 11 也提供了更为强大的一些功能,这里举出来一些 Session 中提到的例子。

首先,Edit all in Scrope 功能也能修改注释中的变量了,这能够让我们的代码和注释能够保持更好的一致性(相信注释和实现不一致的代码绝对会让大多数人抓狂)

另外,当我们给方法增加了参数以后,Add Document 这个 action 也可以帮助我们在注释中补充上新的参数:

Xcode 11 的代码补全能力也增加了不少,比如现在,我们所输入的编译指令 Xcode 也会为我们提供代码补全:

同时代码补全也支持了枚举值的补全:

Session 中苹果工程师表示,这些只是他们对代码补全的一部分提升内容。更多的补全优化,需当们自己实际上手用 Xcode 11 ,就会有更加深刻的体会。

Swift Package Manager (SPM)

SPM 是在 2016 年随着 Swift 3 一起发布的,至今已经三年了,而在此之前,我们很少会使用他的一个根本原因就在于:SPM 并不支持 iOS 平台。终于,在 Xcode 11 中我们可以在 Apple 所有平台上使用 SPM 了,并且 Xcode 11 也内置了 SPM,并在 File -> Swift Package Manager 中提供了一些基本的 SPM 的操作:

top Created with Sketch.