关于iOS Simulator工作原理的简要介绍(可能还有其他一些内容)

查看Wikipedia上的定义:

“模拟是对现实过程或系统操作的模仿。 首先模拟事物的行为需要开发模型。 该模型表示所选物理或抽象系统或过程的关键特征,行为和功能。 该模型表示系统本身,而仿真表示系统随时间的运行情况。”

因此,这里的真实系统是iPhone。 尽管模型的细节非常复杂,但我只想关注基本内容:它是具有主应用程序(iOS)的设备/硬件,子应用程序(我们的应用程序)将在其上运行。

  1. 硬体

是带有处理器,RAM,键盘和鼠标的MacBook Pro(希望如此!)(我从未见过支持触摸的iOS Simulator,我的意思是触摸Simulator :)。 当然,您可以在模拟器中使用触摸板。

2.主要应用
甚至您的iOS模拟器看起来也像昂贵的iPhone XS Max,它只是一个普通的Mac OS应用程序,其布局模仿了真实的iPhone。 您甚至可以使用MacOS上的所有公共API来创建布局,但是Apple在MacOS上也有某种私有的UIKit可以做到这一点。 他们很快将在iOSMac项目(https://kirb.me/2018/06/07/iosmac-research.html)中打开它。

iOS模拟器是Mac OS应用程序,具有某些进程,但是其他应用程序如何在其上运行? 让我们继续下一部分!

3.儿童申请
这可能是iOS模拟器中最有趣的部分。 您有一个主机应用程序,其他应用程序将在其上运行。 您可能会猜到,这全都与进程间通信有关。

某些熟悉Windows的人可能会想到“跨多个进程共享HWND”这样的事情,因为一个进程创建了窗口,并将窗口处理程序交给另一个进程使用。

另一个示例是Chrome无窗口插件机制(https://www.chromium.org/developers/design-documents/plugin-architecture),其中Chrome使用一些宿主进程进行渲染,插件进程将从宿主获取绘图上下文绘制所需内容的过程。

构建iOS模拟器时,您的iOS应用程序将是Mac OS应用程序(显然),而iOS模拟器是通过类似于Chrome中无窗口插件的机制处理渲染和用户交互的宿主进程。 来自iOS模拟器(主机进程)的鼠标,键盘事件将被预处理,并传递给我们的应用程序,模拟真实的iOS发送给真实的应用程序的同一件事。

您可能会问,我的iOS应用程序是否像普通的Mac OS应用程序那样构建,为什么不仅仅在单独的窗口中显示它们? 应该没问题,但一点也不酷。 而且它不会像定义中那样模仿我们模型的行为。 这就是模拟器来的原因。

关于iOS模拟器的详细信息,我们还有很多未知的事情,这将需要更多的时间进行研究。 希望我们能够继续学习并与他人分享。
直到下次,保重!