WWDC 17 苹果发布了全新的 Xcode 9,这篇文章会为各位简要介绍 Xcode 9 重要的新变化。

编辑器

新版的代码编辑器全部使用 Swift 重写,并带来了极大的性能提升和众多的实用功能。在新版 Xcode 中,你可以体验到:

  • 3 倍文件打开速度。
  • 60 帧平滑滚动。
  • 50 倍行间跳转速度。

此外,此版 Xcode 还具备:

  • 50 倍大项目搜索速度。
  • 2.5 倍编译速度。(Beta 版本的编译系统需要在 File/Project Settings 中打开)

真的快,快出声。

更好用的调试功能

重新设计的错误提示,相比旧版的弹窗设计,新版设计更加清晰易读。并会包含更多有用的细节。(另外可以直接在错误提示上复制文字也是非常好用的功能)

新版添加了 300 多种新的分析和修复方案,如我在下图中补全了 UITableViewDataSource 需要的函数,在旧版 Xcode 中,这个错误是需要手动修复的。

另外还有一些细节,比如你终于可以直接复制编辑器中的错误提示而不是去导航器中复制了。为分析错误和「面向 Google 编程」提供了更多方便。

结构高亮和重构辅助

新的结构高亮功能方便你更清晰的查看代码结构,而按住 Command 在代码上移动就会显示,在你按下鼠标左键的时候编辑器会针对当前结构给出重构选项。

重构选项

下图中利用 Extract Method 将一个 If 语句「挤出」为一个函数。

下图中利用 Rename 修改一个函数名和工程中所有对其的引用。

修改 Stop 函数的名称和引用

需要注意的是,加入这个功能之后,一些原有的快捷键发生了变化,比如被占用的「跳转到定义」功能现在需要按住 Command + Control 再点击鼠标左键。

Markdown 支持

新版编辑器支持在 Xcode 内编辑和格式化查看 markdown 文档,并支持按住 Command 定位到链接。看项目 Readme 更方便了。

Markdown

内建 GitHub 支持

Xcode 内建了 Github 支持。首先在偏好设置中登录 Github 账户。

登录 Github 账户

然后选择 Source Control/Clone,你可以在这里看到你维护和 Star 的所有项目。

Github Clone

使用新版加入的 Git 管理器,你可以更轻松的在 Xcode 中管理你的项目。(不过我还是喜欢 Source Tree 🌚)

Git 管理器

网络调试!

同志们,不必再羡慕安卓开发者的 Wireless ADB 了!使用 Xcode 9 和 iOS 11,iOS 开发者也可以进行无线调试。只要在连接设备时在 Windows/Devices and Simulators 中配置选项,就可以在之后的调试中,使用 Wifi 或有线网络调试 iOS 和 tvOS 设备了。

设置方法

模拟器

新版模拟器把 UI 改回了解放前。新版的模拟器重新加入了硬件边框,让模拟器窗口看起来更像手机的同时你也可以直接操作按钮而不需要用菜单或者快捷键来调用。(不过为什么只有黑色!我要白色,我要白色!!!)

新模拟器

在 Beta2 中,会把一些常用的快捷键和修饰键映射到模拟器。可以开关。

Xcode Server

这次更新还自带了 Xcode Server 持续集成,你不必再单独下载 macOS Server 就可以在 Xcode 偏好设置中找到 Server & Bots。

不过这个功能做的有点奇怪。当你打开之后,菜单栏会出现一个新图标,这个新图标在你关闭 Server 之后依旧存在。而且,电脑登陆时候也会像安装了 macOS Server 一样多出一个「其他」用户,去除不掉。我按照网上的说法:找到系统偏好设置/用户与群组/登陆选项/网络账户服务器,在编辑菜单中禁用 root 用户,却发现 root 根本就没有启用。

这里告诉大家我找到的解决办法。

  1. 删除 Xcode Server 的启动代理,其位置在:~/Library/LaunchAgents/com.apple.xcsbuilder.plist
  2. sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWOTHERUSERS_MANAGED -bool FALSE

关于如何使用持续集成,可以参见:Gitbook

Swift 4

更高效的字符串处理

简化了字符串相关函数,能够正确处理 Unicode 中的 emoji,并:

  • 提高了对英,德,法,西四种语言 3.5 倍的处理速度
  • 提高了对简中,日两种语言 2.5 倍的处理速度

Codeable

方便将代码中的结构化数据和 JSON 互相转换,尤其在处理使用 JSON 作为返回数据的网络请求(例如 Apple music 查询)时特别方便。

struct Language: Codable {

    var name: String

    var version: Int

}

let swift = Language(name: "Swift", version: 4)

let encoder = JSONEncoder()

if let encoded = try? encoder.encode(swift) {

    if let json = String(data: encoded, encoding: .utf8) {

        print(json)

    }

    let decoder = JSONDecoder()

    if let decoded = try? decoder.decode(Language.self, from: encoded) {

        print(decoded.name)

    }

}

更多 Swift 4 的改进可以参见:Hacking-with-swift

图拉鼎老师在微博上表示,奇点微博客户端在新 Xcode 上修改三行代码就能正常编译,期间没有崩溃,「这个适配的代价可以说是非常轻松的了。」

Swift Playgrounds 2

在新版的 Swift Playgrounds 中你可以看到一些在 Xcode 9 编辑器中新增的功能,比如结构高亮和一部分重构辅助功能,以及使用了 Swift 4 和 iOS 11 的 SDK。

结构高亮和重构辅助


另外我还想就其用途多讲两句。虽然暂时不能开发完整的工程,但我们依旧可以利用这个 App 在 iOS 上做一些开发工作。在平时开发的过程中,有时需要写一些自定义的 View 还有一些可以单独测试的算法之类的,就可以在 Swift Playgrounds 上做这件事。由于和 Xcode 的 playground 文件通用,整体体验还是非常不错的。

生成 Apple watch 上使用的进度条动画

最近的一些 Swift 教程书也越来越多的使用 playground 来存储例程,我们可以轻松的把这些例程拿到 iPad 里面学习。下图是王巍编写的《Swifter》中的例程文件。

另外不知道有没有同学用过一个很久以前就有的叫 Codea 的 App,它可以使用 Lua 语言在 iOS 上开发完整的游戏,工程文件还可以导出至 Xcode 编译。其实想想现在的 Swift Playgrounds 和它很类似,也许将来苹果也会为我们带来一个全功能的 IDE。

Codea



后记

我第一时间在 Xcode 9 Beta 上重新编译了 PomoNow,升级过程非常轻松,我的项目中只遇到了两个问题,之后就可以正常运行了。另外,在原有的版本中,我工程中 NavigationController 的 NavigationBar 一直都存在一个位置不正确的叹号,并且确认是由于 Xcode 的问题导致的。这一版本中得到了修正,我再也不用在打开 Storyboard 时担心犯强迫症了。

新版编辑器虽然提供了很多新功能,但原有的一些常用功能被放到了上下文菜单中,新修改的快捷键也可能需要一段时间的适应。总体来讲,这一代 IDE 回应了很多人需求,并进一步提高了 Swift 的编译速度,但由于只改善了 Build System 没有改善 Build Tools,所以一些速度问题可能依然存在,希望后续版本中可以越来越好。

最后,广大开发者最希望的还是「“Xcode” 意外退出。点按“重新打开。。。」可以少一些,再少一些。

参考链接

WWDC17 - Platforms State of the Union

What’s New in Xcode 9


28
6