What's new in Xcode 9

图片来自官网

前言

WWDC过后, 苹果发布了一系列的Beta 版固件及工具,我们单表其一,看看Xcode 9中的新功能。如果你也想体验Xcode 9,那么你的 Mac 系统的版本至少是macOS 10.12.4.

初窥

Editor

打开Xcode 9之后,发现iOS标签多了AR文件管理两个。并且Framework的图标也得到了统一。不再拟物。放个对比(左:Xcode 8,右:Xcode 9).

按照正常的套路,随便新建一个工程。

打开工程的第一眼,就感觉编辑区域看起来更顺眼了。和之前对比,发现是去掉了左边显示行号的边栏颜色和编辑区域统一了,所以看起来更整齐了。

按着Command ⌘ 键,随便点一个方法,和之前不同的是,不会直接跳转到方法的声明,而是会出现下面的菜单:

如果想像之前一样直接跳转到函数声明,则需要同时按着Control ⌃Command ⌘键再点击方法可以跳转到方法的声明。

同样,可以试着看看点击变量有什么变化(PS:Xcode 9的代码提示 real、real 快了很多):

恩,比上面的多了一个Rename,当点击重命名的时候,会有一个很炫的折叠动画:

rename

点击某一个方法呢?


把之前的Extract FunctionExtract Method直接放在了这个菜单。这样我们就可以更加方便的把某些实现单独提取封装成方法了:

extractedMethod

Simulator

让我们打开模拟器看一看。

Wow!仿佛又回到了Xcode 5之前,而且更加细腻了。

周围的按键和 home键都可以点击的。

此外还发现了一些别的功能:

  • 可以和别的版本的Xcode的模拟器共存。
  • 除了可以使用Command ⌘ + 1Command ⌘ + 2Command ⌘ + 3来缩放模拟器外,Xcode 9还支持把鼠标移动到四个角的任意一个角来自由缩放.
  • 可以同时开启多个不同的模拟器。

More

上面介绍的都是很容易就发现的一些新特性。要完全了解Xcode 9,那就不得不去看官方的 Release Notes

那么,接下来就按照 Release Notes 的顺序一个个来介绍。

  1. 首先,值得注意的是iOS 11不再支持 32 位应用,如果我们在项目的target -> General -> Deployment Target 中设置系统为iOS 11,则直接编译都不能通过。如果设置为iOS 11之前的,编译还是可以的(敲黑板、划重点了)。

  2. 现在 GroupFolder关联了一起。也就是说之前虚拟的工程文件夹现在会自动创建实体的文件夹,而无需我们去手动导入了(好评)。而且我们在拖动文件的时候,会自动更新文件和文件目录,其他的一些操作,比如创建、重命名、删除组都将会相应的更改文件系统中的关联目录。

    如果需要取消GroupFolder的关联,可以在File Inspector 中点击X就行:

    同样的,我们也可以在这里关联某一个GroupFolder

  3. 自动匹配分隔符。当我们选中文字的时候,输入任意一个opening delimiterXcode都会 自动匹配closing delimiter。自动匹配的分隔符包括:" ", ( ), [ ], { }.个人感觉不太实用,因为我们可以直接在后面添加closing delimiter,就可以自动补全opening delimiter

auto_matched
  1. 使用command ⌘ + -缩小文字,使用command ⌘ + +放大文字(终于支持了)。

  2. 偏好设置 -> Font & Color 中增加了光标的样式。

  3. Asset Catelog现在支持了.avci, .heic, .heif格式的文件。

  4. 增加主线程检测器(Main Thread Checker)。我们都知道,我们在开发中都要在主线程访问UIKit/AppKit。这经常会出现一些莫名其妙的问题:比如图片加载需要一段时间,又比如严重的直接 Crash。如果想了解更多可以参考线程安全类的设计这篇文章。文中也提到了一个检测是否是在主线程操作 UI 的非官方工具。现在,终于有了官方工具

    我们现撸个测试用例:

    dispatch_queue_t queue = dispatch_queue_create("com.newFunction", NULL);
    dispatch_async(queue, ^{
        UIView *view = [UIView new];
        [self.view addSubview:view];
    });
    
    

    运行后,如果是Xcode 9之前版本的话,我们可能会在控制台获得下面的 Log:

    This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.

    而现在,我们获得 Log 信息更详细了:

    [reports] Main Thread Checker: UI API called on a background thread: -[UIView init]
    PID: 59536, TID: 1305198, Thread name: (com.newFunction), Queue name: com.newFunction, QoS: 0

    除了警告原因,进程信息、线程信息都给了我们。更赞的是,在issue navigatorruntime 标签中就会显示出Warning:

    而点击后直接定位到问题代码:


    而在ToolBar 上的 activity 面板也会有相关的信息。

    从左至右依次是:编译时 Warning、编译时 Error、运行时 Warning.

  5. Undefined Behavior Sanitizer:一个新的运行时工具,可以检查整数溢出(integer overflows)无效转换(invalid casts)等。我们可以在Scheme 里面管理这些功能:

    Undefined Behavior SanitizerAddress SanitizerThread Sanitizer功能暂时不太清楚,有了解的提供下,谢谢。

  6. 现在可以使用通过无线方式来调试程序了,而非必须使用数据线。

    首先,想要无线调试,硬件系统必须达到要求:Xcode 9 or later、所以你的 Mac 系统必须是macOS 10.12.4 or later, iOS 11.0 or later,iPhone 和 Mac 处于同一 WiFi 下。

    然后,先使用数据线连接你的 Mac,打开Xcode 9中的Window -> Devices & Simulators菜单,如下:

    勾选Connect via network,之后左侧的设备名字后面会出现一个网络的图标。这个时候就可以拔掉数据线了。

    回到 Xcode,会发现手机依然可以使用。并不会提示设备断开连接之类的:


  7. 代码管理的深度集成。现在,在Navigator bar 上多了一个 Tab: Source Control。无论你用的是SVN 还是Git,现在都可以很方便的查看管理你的代码仓库:

    Branches、Tags、Remotes一览无余。我们可以在这里 push、pull、merge、新建分支、切换分支、新增 Tag、查看提交历史记录、双击某一条 commit,对比代码,添加忽略文件等等几乎所有日常使用的一些基础功能。

    Xcode 9GitHub 深度集成,提供了包括配置 SSH key一键克隆等功能。

  8. 新的编译系统。新的编译器已经用Swift 重写了,性能得到了很大的提升。其中,内部搜索功能官方号称提速50x.

    新的编译系统默认是关闭的,如果我们想要体验的话,需要在File -> Project Setting中选择。

  9. 优化 Markdown。现在 Xcode 支持了 markdown 的高亮语法以及多级标题的字体大小。

在编辑区域的快速跳转中,也能链接到更多的Header。

总结

使用下来,感觉Xcode 9的诚意满满,苹果终于要改变一下自家令人诟病的IDE了。但Beta版各种不稳定还是依旧,时不时的打不开模拟器,必须要完全退出Xcode重新打开,稳定性还有待提高。

文中如有错误纰漏,欢迎指正👏🏻。

Reference

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容