Xcode 9新特性
Xcode 9支持同时跑多个模拟器
能同时跑起来多个模拟器了,虽然不知道有啥用,但是很屌不是吗?
Main Thread Checker
- 用来检查AppKit,UIKit以及WebKit的那些需要在主线程执行的API是否在别的线程被执行了。debug的时候是默认开启的。
这个还是非常有用的,很多时候crash都是因为在非主线程执行的必须在主线程执行的API,值得拥有。
基本原理也是比较简单的,在app启动的时候,Main Thread Checker
动态替换了那些应该在主线程执行的函数,一旦检测到没有在主线程执行,就报错了。其比较好的一点是,不需要重新编译,直接链接/Applications/Xcode.app/Contents/Developer/usr/lib/libMainThreadChecker.dylib
这个动态库就可以了。
Undefined Behavior Sanitizer(UBSan)
- 用于找出C语言的若干种未定义的行为,比如整数溢出、非法转换以及非法对齐等
- 检查是否符合nullability的注解
这是一个全新的小工具
Address Sanitizer(ASan)
新增两项检查:
- 变量作用范围结束,但是内存没有被释放
- 函数返回之后,局部变量没有被释放
[引用address sanitizer的文章]
Thread Sanitizer(TSan)
- 新增Objective-C以及Swift集合变量的竞争
- 多个线程在没有加锁的情况下修改同一个结构体
- 检查Swift规定需要排他性访问的内存是否被多线程访问
[引用 thread sanitizer的文章]
Debugging
- 无线调试
- Xcode或者leaks命令导出的内存图文件在malloc stack logging设置为enable的时候,会保存内存分配的堆栈。方便leaks、vmmap、Xcode等工具来使用
- View Debugger支持SpriteKit和SceneKit
- View Debugger支持view controllers
Project Navigator
- 在不同的group之间拖文件,也会在文件系统移动文件。
- 如果文件系统里面已经存在同名的group,那么你创建、重命名、删除group的时候,文件系统都会做相应的改变。
Source Control
- 新增了Source Control导航,可以看branches、tags以及远程分支等等,简单的说就是有了一个简单的SourceTree
Build System
- 引入了基于Swift开源llbuild project的新的构建系统,传说性能会好很多,以后替换现有的构建系统。
Testing
- 支持并发在真机和模拟器上进行测试
- 测试的时候不会再启动模拟器了