运行 iOS 没有模拟器的代码

Running iOS code without simulator

我注意到 Xcode 能够 运行 IBDesignables 的 UIKit 代码,根本不需要启动模拟器。它似乎正在使用 IBDesignablesAgentCocoaTouch 工具,这是一个 macOS 应用程序。如何实现这样的东西?

iOS 为 x86_64 编译的应用程序实际上是普通的 macOS 应用程序,只是链接到不同的框架。模拟器框架提供了 运行 所有这些框架以类似于它们在 iOS 硬件上的方式运行所需的时间。 IBDesignablesAgentCocoaTouch 守护程序启动了足够多的 iOS 子系统,以便能够在您每次对 Xcode 进行更改时拍摄 UI 的快照。从理论上讲,可以以与模拟器不同的方式部分或完全启动 iOS 子系统,但这很可能违反了您在安装时签署的开发者许可协议,并且肯定是不合法的用于分发。合法或不合法,这将是一项艰巨的任务,并且很可能随着系统的每次更改而中断。看看近年来模拟器框架发生了多大的变化就足以了解这对非 Apple 开发者来说有多难了。

如果您需要 运行 非 UI 代码进行测试,例如,有更简单的方法来实现您的需要,例如创建一个 macOS 目标并包括您的所有非 UI 内容,并删除绝对必要的 UI 内容进行测试。

如果你想使用iOS框架实现多平台开发,然后运行在模拟器外使用苹果iOS框架,这是不合法的(iOS 框架通常不随 macOS 一起分发,需要安装 Xcode),这不是一个好主意,因为用户希望应用程序在他们 运行 的平台上以本地方式运行。 iOS UI 概念最适合触摸输入,但它们在精确指针输入生态系统中不合适。