Xcode 9支持同时跑多个模拟器

multi simulators

能同时跑起来多个模拟器了,虽然不知道有啥用,但是很屌不是吗?

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

  • 支持并发在真机和模拟器上进行测试
  • 测试的时候不会再启动模拟器了