What's new in Xcode 9

作者: 那像猫的狗 | 来源:发表于2017-06-09 11:07 被阅读5588次
    图片来自官网

    前言

    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

    相关文章

      网友评论

      • 少侠请留步啊:报那个UI在非主线程中操作的警告,如何点击才能跳转到指定代码,我点击之后不跳转,请问如何操作可以跳转到指定代码
      • long弟弟:Xcode9 自定义cell cell中的Label是不是不显示啊?
      • 123打点滴:令人诟病的IDE?你去用用别人的IDE就知道XCODE的好了。
      • 5c6e2dc0a022:新的编译系统真是快..
      • 洁简:无线调试 转啊转 很无奈
        5c6e2dc0a022:网慢:smiley:
      • coder_hong:你这xcode主题哪里下载的 听不错的
      • NapoleonY:在Xcode菜单里选择Preference TextEditing 取消了codefoldingrion了,这个没了好麻烦,不能折叠小块的代码了
        5c6e2dc0a022:@NapoleonY 还是android studio折叠用着舒服
        NapoleonY:@一场大雨 不如原来折叠小块代码方便
        一场大雨:只能折叠整个方法,option+cmd+左箭头是折叠,option+cmd+右箭头是打开
      • 一骑红尘妃子叫:Xcode9 定位授权需要改成 NSLocationAlwaysAndWhenInUseUsageDescription
        NSLocationWhenInUseUsageDescription,另外还有一些其他问题,比如信号栏,之前做的适配,有可能需要重新再适配一下.
      • 雨影:如果想像之前一样直接跳转到函数声明,则需要同时按着Control ⌃和Command ⌘键再点击方法可以跳转到方法的声明。这一功能非常难用!经常点不进去
        dc11c95e3431:Command+右键
      • 大热天晒太阳:Implicit conversion from nullable pointer 'NSURL * _Nullable' to non-nullable pointer type 'ObjectType _Nonnull' (aka 'id')
        以前这只是警告,现在直接报错了...
      • 1b4b2d2f985e:我无意中发现CMD+右键 可以直接跳转至申明处
        0d84922e336a:如果是触摸板呢?跳入不了啊
        十一岁的加重:@帥陽 不错啊右键
        帥陽:可以可以,很意外啊
      • kQ5Dy9:对swift 的支持怎么样怎么样 ????
      • CoderLGL:赞赞👍
      • 阳光洒满我的世界:涨知识了。。。。:+1: :clap: :clap: :+1:
        那像猫的狗::smiley: 一起学习。
      • 人生r芷茹初见::+1: :+1: :+1: :+1: :+1: :+1: :+1:
        少侠请留步啊:找到不能跳转的原因了,我用了友盟的sdk,在用初始化友盟的sdk的时候,报的这个问题,友盟把sdk用静态库封起来了,所以无法跳转

      本文标题:What's new in Xcode 9

      本文链接:https://www.haomeiwen.com/subject/fzmxqxtx.html