这个 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
路径
- 从
libSystem
到 UIKit
,都使用了模拟系统的 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

有三种预置尺寸可以选择
- Physical Size
把手机放上去,和屏幕上一模一样
- Point Accurate
1 UIKit point = 1 AppKit point
- Pixel Accurate
物理像素一致。模拟器的一个物理像素和电脑的一个物理像素对齐。
此外,还可以使用鼠标缩放模拟器,如同操作普通窗口一样。
可以模拟慢速动画

旧的 Xcode 版本使用新版本的模拟器
其实只要有新版本模拟器的 runtime
就好了
这个 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
路径
- 从
libSystem
到 UIKit
,都使用了模拟系统的 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

有三种预置尺寸可以选择
- Physical Size
把手机放上去,和屏幕上一模一样
- Point Accurate
1 UIKit point = 1 AppKit point
- Pixel Accurate
物理像素一致。模拟器的一个物理像素和电脑的一个物理像素对齐。
此外,还可以使用鼠标缩放模拟器,如同操作普通窗口一样。
可以模拟慢速动画

旧的 Xcode 版本使用新版本的模拟器
其实只要有新版本模拟器的 runtime
就好了
这个 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
路径
- 从
libSystem
到 UIKit
,都使用了模拟系统的 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

有三种预置尺寸可以选择
- Physical Size
把手机放上去,和屏幕上一模一样
- Point Accurate
1 UIKit point = 1 AppKit point
- Pixel Accurate
物理像素一致。模拟器的一个物理像素和电脑的一个物理像素对齐。
此外,还可以使用鼠标缩放模拟器,如同操作普通窗口一样。
可以模拟慢速动画

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