07d5d542a2551bc2696e60dd63d743c2
利用好模拟器

这个 session 讲了模拟器的一些知识,帮助我们更加好的利用模拟器进行开发。

模拟器是什么

从功能上理解

模拟器让我们能在 MacOS 上模拟 iOS、watchOS 和 tvOS。
相比真实的设备,有更多的内存和 CPU,并且能够同时运行多个。
作为工程师,停留在这个水平显然是不够的。

从技术上理解

Simulator is iOS, watchOS, or tvOS userspace running on macOS kernel

怎么理解这句话呢?
操作系统可以大略分为 kernel 和 userspace。
kernel 处理关于硬件的抽象及内存分配等。
userspace 自底向上可以分为四层:

  • launchd
  • daemons,比如 cfprefsd
  • framworks,比如 UIKit
  • appliacation,比如 photo 应用

每一个模拟器都是这样子一个 userspace。 整体架构如下图:

关于模拟器还有以下事实:

  • macOS 和模拟器共用一套文件系统,但是有不同的 $HOME 路径
  • libSystemUIKit,都使用了模拟系统的 ABI
  • 不是 emulator,因此架构不是 arm,而是 x86
  • 不能模拟 CPU 和 内存
  • 和真实设备相比,有不同的 CPU 核心数,多线程表现也不尽相同
  • 没有沙盒限制。在模拟器上可以在在沙盒外写数据,但是在设备上不可以
  • 和macOS 不同,模拟器的文件系统是大小写敏感的
  • 支持 Thread Sanitizer

模拟器使用的技巧

手势操作

  • 可以利用 option 来模拟 pinch 手势
  • 可以利用 control 来模拟 drag & drop
  • 可以通过 hardware 来手动触发 shake 手势

设置音频输入输出

这样子可以在模拟器放歌曲,在耳机里听歌了。

支持 iCloud 操作

可以登陆 iCloud,也可以手动触发 iCloud 同步。

模拟内存不足

Debug 菜单内,也可以通过键盘快捷键。

模拟器管理

  • 新增

    新增模拟器时,可以选择 OS Version 和 Simulator Name。
    如果需要下载其他 runtime 的模拟器,比如 iOS 10,那么需要先下载 runtime。

  • 删除
    可以勾选掉 Show as run destination

    也可以直接删除,通过 delete 按键或者上下文菜单都可以

调整模拟器的 size

有三种预置尺寸可以选择

  1. Physical Size
    把手机放上去,和屏幕上一模一样
  2. Point Accurate
    1 UIKit point = 1 AppKit point
  3. Pixel Accurate
    物理像素一致。模拟器的一个物理像素和电脑的一个物理像素对齐。

此外,还可以使用鼠标缩放模拟器,如同操作普通窗口一样。

可以模拟慢速动画

旧的 Xcode 版本使用新版本的模拟器

其实只要有新版本模拟器的 runtime 就好了

top Created with Sketch.