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 修改一个函数名和工程中所有对其的引用。
需要注意的是,加入这个功能之后,一些原有的快捷键发生了变化,比如被占用的「跳转到定义」功能现在需要按住 Command + Control 再点击鼠标左键。
Markdown 支持
新版编辑器支持在 Xcode 内编辑和格式化查看 markdown 文档,并支持按住 Command 定位到链接。看项目 Readme 更方便了。
内建 GitHub 支持
Xcode 内建了 Github 支持。首先在偏好设置中登录 Github 账户。
然后选择 Source Control/Clone,你可以在这里看到你维护和 Star 的所有项目。
使用新版加入的 Git 管理器,你可以更轻松的在 Xcode 中管理你的项目。(不过我还是喜欢 Source Tree 🌚)
网络调试!
同志们,不必再羡慕安卓开发者的 Wireless ADB 了!使用 Xcode 9 和 iOS 11,iOS 开发者也可以进行无线调试。只要在连接设备时在 Windows/Devices and Simulators 中配置选项,就可以在之后的调试中,使用 Wifi 或有线网络调试 iOS 和 tvOS 设备了。
模拟器
新版模拟器把 UI 改回了解放前。新版的模拟器重新加入了硬件边框,让模拟器窗口看起来更像手机的同时你也可以直接操作按钮而不需要用菜单或者快捷键来调用。(不过为什么只有黑色!我要白色,我要白色!!!)
Xcode Server
这次更新还自带了 Xcode Server 持续集成,你不必再单独下载 macOS Server 就可以在 Xcode 偏好设置中找到 Server & Bots。不过这个功能做的有点奇怪。当你打开之后,菜单栏会出现一个新图标,这个新图标在你关闭 Server 之后依旧存在。而且,电脑登陆时候也会像安装了 macOS Server 一样多出一个「其他」用户,去除不掉。我按照网上的说法:找到系统偏好设置/用户与群组/登陆选项/网络账户服务器,在编辑菜单中禁用 root 用户,却发现 root 根本就没有启用。
这里告诉大家我找到的解决办法。
- 删除 Xcode Server 的启动代理,其位置在:~/Library/LaunchAgents/com.apple.xcsbuilder.plist
sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWOTHERUSERS_MANAGED -bool FALSE
关于如何使用持续集成,可以参见:简书。
Swift 4
更高效的字符串处理
简化了字符串相关函数,能够正确处理 Unicode 中的 emoji,并:
- 提高了对英,德,法,西四种语言 3.5 倍的处理速度
- 提高了对简中,日两种语言 2.5 倍的处理速度
Codeable
方便将代码中的结构化数据轻松转换成 JSON 等格式。
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 上修改三行代码就能正常编译,期间没有崩溃,「这个适配的代价可以说是非常轻松的了。」
后记
我第一时间在 Xcode 9 Beta 上重新编译了 PomoNow,升级过程非常轻松,我的项目中只遇到了两个问题,之后就可以正常运行了。另外,在原有的版本中,我工程中 NavigationController 的 NavigationBar 一直都存在一个位置不正确的叹号,并且确认是由于 Xcode 的问题导致的。这一版本中得到了修正,我再也不用在打开 Storyboard 时担心犯强迫症了。
新版编辑器虽然提供了很多新功能,但原有的一些常用功能被放到了上下文菜单中,新修改的快捷键也可能需要一段时间的适应。总体来讲,这一代 IDE 回应了很多人需求,并进一步提高了 Swift 的编译速度,但由于只改善了 Build Syetem 没有改善 Build Tools,所以一些问题可能依然存在,希望后续版本中可以越来越好。
最后,广大开发者最希望的还是「“Xcode” 意外退出。点按“重新打开。。。」可以少一些,再少一些。
参考链接
WWDC17 - Platforms State of the Union