ARTICLE · 1198778
【iOS模拟器】代码开源+保姆级教程!让iOS跑在安卓、Linux上!
一张图。

这是 iOS 的主屏幕。图标和状态栏都在,Dock 也能用。
但它不是跑在 iPhone 上。


上面两张分别是锁屏和「关于本机」。做这个模拟器的项目叫 Inferno,由 ChefKiss 团队维护,GitHub 上 3,900 多 star。
01 它是 QEMU 的一个分支
这一点得先说清楚,因为它决定了后面所有步骤。
Inferno 是 QEMU 的分支,不是从零写的模拟器。
仓库里的目录结构几乎就是 QEMU 的样子,`hw/`、`target/`、`tcg/`、`ui/`、`qom/` 这些都在。它做的工作,是在 QEMU 里补上 Apple 的芯片和设备。
表 1 · 它模拟了什么
第三行是重点。Secure Enclave 也模拟出来了。
这块芯片是苹果的安全核心,管密钥、管加密。把它模拟出来,意味着系统能正常解密 Data 分区,才能启动。少了这一步,iOS 根本起不来。
02 目前能跑到哪一步
项目在文档里写得很实在。
表 2 · 支持情况
支持的 iOS 版本目前只有 14.x。 13、15、16、17、18 和 26 都列在计划里。
「能启动到 SpringBoard」这个说法很关键。SpringBoard 是 iOS 的桌面进程,能到这一步意味着系统跑起来了,能看到主屏幕、能点图标。
03 为什么要两台虚拟机
这是整个教程里最反直觉的一点。
它需要两台虚拟机。 项目把跑 iOS 的那台叫主虚拟机,另一台叫伴随虚拟机。
为什么? 因为恢复 IPSW 和联网这两件事,主虚拟机自己做不到。
表 3 · 两台机器各干什么
第二行和第三行是核心。伴随虚拟机通过 USB 连到主虚拟机上,然后在这个连接上跑恢复工具,把 iOS 刷进去。联网也是通过这条 USB 走反向共享。
项目说未来会做「不需要伴随机的恢复」,但目前还没做。
04 编译要装哪些依赖
步骤本身不难,难的是依赖多。
官方给三个平台的命令,macOS 用 Homebrew,Arch 用 pacman,Debian 系用 apt。下面以 macOS 为例。
brew install libtool meson ninja pkgconf dtc glib gnutls \ jpeg-turbo libpng libslirp libssh libusb lzo ncurses \ pixman snappy vde zstd libtasn1 lzfse然后拉代码、更新子模块、配置、编译。
git clone https://github.com/ChefKissInc/Inferno cd Inferno && git submodule update --init mkdir build && cd build ../configure --target-list=aarch64-softmmu,x86_64-softmmu \ --enable-lzfse --enable-slirp --enable-nettle --enable-gnutls \ --disable-werror ninja两个细节要多看两眼。
第一,子模块必须先更新。忘了这步编译会报一堆找不到文件的错。
第二,Linux 上可能撞到 Nettle 版本太老。文档里明确写了,低于 3.10 就得手动编。而且它给了一条很讲究的命令,下载之后先校验 sha256 再解压。
这里要问一句,为什么一个教程要教你怎么验哈希?
因为它在防供应链投毒。源码包从镜像站下载,镜像站遭篡改是真实存在的风险。
校验哈希这一步多花十秒,但能挡住这一类问题。这份手册在细节上的讲究,不只体现在这里。
05 恢复流程和那串参数
编译完,就到了启动环节。
启动命令很长,因为它要把一堆镜像文件挂成 NVMe 设备。root、firmware、syscfg、ctrl_bits、nvram、effaceable 和 panic_log,共七个命名空间,每一个都要指定扇区大小。
然后设置内存盘。这里有个容易踩的坑。
目录里有两个 RAM Disk,小的那个用来恢复,大的那个用来升级。
刷机命令在伴随虚拟机里跑。
idevicerestore --erase --restore-mode -i 0x1122334455667788 \ iPhone11,8,iPhone12,1_14.0_18A5351d_Restore.ipsw -T root_ticket.der那个 `-i` 参数要注意。 它要填设备的 ECID,也就是芯片的唯一编号。这个值必须和你模拟的设备对上。
文档还提醒了一件事。USB 目前不稳定,恢复前建议断开 SSH 这类连接,否则可能因为资源紧张失败。
06 不补文件系统起不来
恢复完之后还不能用,得打补丁。
这一步是必须的,因为还没有 GPU 模拟。 系统默认走硬件渲染,模拟器提供不了,所以要改成软件渲染。
表 4 · 两个补丁
第二个补丁要禁用的服务是这些。
com.apple.voicemail.vmd com.apple.CommCenter com.apple.CommCenterMobileHelper com.apple.CommCenterRootHelper com.apple.locationd这里要问一句,为什么是这五个服务?
看出来了吗,四个和通信有关,一个和定位有关。因为基带还没做(项目标的是 WIP),所以凡是依赖蜂窝网络的服务都会把系统卡住。定位同理。
改法是把 plist 转成可读格式,给这几个服务各加一个 `Disabled` 键,值设为 `true`。


这一步在 macOS 上做。 文档里写了,Linux 和 Windows 的第三方 APFS 驱动没测过。
07 现在还做不到什么
项目自己列了一份常见问题,答得很干脆。
表 5 · 能用和不能用
iServices 不能用的原因,文档给得挺技术,可能和 iOS 内部一个叫 Legacy FairPlay Key Descrambler 的 AES 硬件指令有关。
还有三条安全提醒,必须记住。
别设锁屏密码,目前不工作。别开定位服务。 别用「抹掉所有内容和设置」,会把系统搞坏。
第三条的后果最严重。原因是抹掉操作会触发恢复流程,而当前的文件系统补丁在恢复流程里不完整。
许可和背景
Inferno 的许可证有点特别。
主体沿用 QEMU 的 GPL v3,团队自己写的代码用 AGPL v3。
README 里解释了为什么用更严的 AGPL。因为之前有公司拿这个项目的代码做了闭源付费产品。
所以它加了 AGPL 这一层。AGPL 的要求是,只要你把这个软件作为网络服务提供给别人用,就必须开源你的修改。
品牌方面也有单独的限制条款,写在 `ui/icons/CKBrandingNotice.md` 里。
两个容易看漏的点
第一,项目强调它是人写的。
README 里挂了一个徽章,上面写着「written by humans, not AI」。在一个 AI 生成代码越来越普遍的时间点,这个徽章本身就是一种表态。
第二,它的门槛是真的高。
6GB 内存、32GB 磁盘、两台虚拟机、一堆依赖、一次编译、一次恢复、两个补丁。哪一步出错都得回头查。
但它把每一步都写下来了。 文档站上有完整的手册,从宿主机准备到文件系统补丁,分九节,每节都有具体命令和注意事项。
你有没有想过,为什么这么多年没人把 iOS 模拟出来?


项目地址
https://github.com/ChefKissInc/Inferno
官方手册
https://chefkiss.dev/guides/inferno/
许可
GPL v3(主体)+ AGPL v3(项目自有代码)















































































