资讯动态

iPhone 上直接跑 Windows PC 游戏:开源项目 Madeira 的原理、安装与实机表现

发布时间:2026/10/21 2:10:11 来源:尧图企业网站定制
iPhone 上直接跑 Windows PC 游戏开源项目 Madeira 的原理、安装与实机表现【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/Madeira想在 iPhone 上不越狱就玩到完整版的 Windows 单机大作Madeira 是一个开源的 iOS 游戏模拟器用 FEX-Emu Wine DXMT 三层技术把 x86-64 游戏装进一个普通 App。读完这篇你会知道它怎么做到、你的机器够不够格、怎么装、以及现在到底能玩到什么程度。一、一条链路看懂原理x86-64 游戏如何变成 iPhone 上的画面把它拆开看其实是一条清晰的流水线游戏 PE 文件输入→ 指令与 API 两层翻译处理→ Metal 画面输出。游戏启动后它自身那些 x86/x86-64 指令由FEX-Emu在运行时动态翻译成 ARM64 指令再执行——这就是动态二进制翻译类比于边读边译的实时口译而不是提前把整个游戏重编译一遍。游戏的 Windows API 调用交给Wine 11.4处理图形调用Direct3D 9/10/11则由DXMT转成 Metal对于较新的 D3D12 游戏项目自带的madeira-d3d12模块直接实现 D3D12 接口并在运行时用 Apple 官方的 Metal Shader Converter 把 DXIL 着色器实时转成 Metal 着色器。这条链路上有两个关键设计决策理解了它们就理解了性能从哪里来Wine 按 ARM64EC 混合架构编译。ARM64EC 是 Windows 上的混合执行模式Wine 自己的几百个系统 DLLntdll、kernel32 等以 ARM64 原生速度跑在 iPhone 上只有游戏自身的 x86 代码需要 FEX 翻译。绝大多数时间 CPU 在执行的是 Wine 的原生代码模拟开销只压在游戏逻辑上——这是它能跑出高帧率的核心原因。所有东西塞进一个 Mach 进程。iOS 不允许一个 App 去 fork 出别的程序所以连 Wine 的 wineserver负责Windows 系统服务的角色都被改造成了线程。你在游戏里看到的多个 Windows 进程实际都是同一个 iOS 进程内的伪进程/线程。这个决定带来一个副作用32 位游戏不能各占各的地址空间后来专门用guest window方案才补上见 docs/WOW64.md 思路。二、安装前设备检查跑 Madeira 的三个硬性门槛清单如下任何一条不满足就别往下走一台未越狱的 iPhone系统iOS 26 或更高这是目前唯一被验证可靠的版本。开发验证机型是 Pro 系列如 iPhone 13 Pro芯片更强体验更好。JIT 权限。iOS 只允许在调试器附加状态下创建可执行内存而 FEX 动态翻译必须有 JIT。Madeira 提供两条路装 StikDebug 这个调试器 App或用内置的 StikJIT 助手iOS 27 上可以完全在手机上完成配对不需要电脑。两种方式都要借助 LocalDevVPN 打通本机回环通道。一个 Apple ID免费账号即可。注意免费签名的有效期只有7 天到点必须重新签名安装一次。正因为依赖调试器附加这个机制App Store 审核不会放行所以 Madeira 只能通过侧载工具SideStore、AltStore、Sideloadly、Plume 等安装。三、从零到能跑两条路径的完整流程 如果你只想玩走路径 A想读源码或改东西走路径 B。路径 A装现成构建推荐从项目 Release 里拿最新的 IPA用侧载工具以自己的 Apple ID 签名安装打开 App按引导启用 JIT先装 LocalDevVPN配对后点 Enable JIT在 Settings 里确认JIT和Memory两项都变绿出现 Ready to play 即可开玩。路径 B从源码构建仓库里的编译链横跨 unix 侧 Wine 库、ARM64EC PE 模块、FEX、DXMT 和 iOS App 五条线且有若干仓库外的输入要先备齐git clone --recurse-submodules https://gitcode.com/GitHub_Trending/mad/Madeira先说三个容易卡住的地方FEX、wine、dxmt、madeira-dock四个子模块指向的是作者的 fork克隆上游代码无法构建必须用仓库内的子模块指针仓库外还需自备llvm-mingw-20260421交叉工具链解压进toolchains/、为 iOS 编译的 LLVM耗时数小时、以及微软 Visual C 运行时 DLL——后者因许可证限制不在仓库里获取方法见 tools/fetch-vcruntime.md仓库里有个app/Madeira/x86_64-vcruntime目录被 git 忽略但构建必需容易漏掉。输入就位后按顺序跑编译脚本build/gnutls-ios/build.sh出lib{gmp,nettle,hogweed,gnutls}.a→build/fex-ios与build/fex-arm64ec出 FEX 静态库并复制xtajit64.dll→build/ntdll-unix、build/wineserver、build/win32u-unixWine unix 侧库→build/dxmt-ios/build.shDXMT→build/madeira-d3d12/build-pe.sh原生 D3D12 运行时。最后构建 Appxcodebuild -project app/Madeira.xcodeproj -scheme Madeira \ -destination generic/platformiOS -allowProvisioningUpdates build把产物Payload/Madeira.app压成 IPA 侧载即可。一条来自构建记录的实锤经验用 Debug 配置——Release 构建曾导致 guest 崩溃别省这一步。四、怎么操控以及现在能玩到什么程度物理手柄已配对的蓝牙/MFi 手柄按 250Hz4ms 间隔采样按钮、扳机、摇杆原样喂给游戏的 XInput 接口不做鼠标合成、不加额外死区最多 4 个扩展手柄槽位断开一个不会打乱其他槽位。触屏虚拟手柄横屏触摸编辑器里可以自由摆放 A/B/X/Y、十字键、LB/RBLT/RT 是全行程扳机LS/RS 是带径向钳制的模拟摇杆。还支持多套自定义布局内置一套完整 Xbox 布局可直接选用每款游戏还能记住自己上次的布局。两者混用时有明确的仲裁规则扳机取物理与触屏中的较大值物理摇杆一旦移出标准死区就压过触屏摇杆两根手指按同一个键时松开一根不会卡住另一根。另外键盘、鼠标、触控板也能作为真实输入直通给游戏。想全部关掉在Documents/madeira.cfg里写env.MADEIRA_XINPUT 0重启即可。实机兼容性这是一个研究项目不是产品预期有毛边Thumper✅ 完整可玩且带音效典型帧率 142 FPS峰值 2286 FPS——在 iPhone 上这个数据相当能打ULTRAKILL可玩Marvel Cosmic Invasion能进到游戏画面但操控尚不稳定多数其他游戏能启动、能进主界面帧率偏低32 位游戏Wine 的 WoW64 层以原生 aarch64 运行、x86 代码交给 FEX 的 WOW64 模块翻译这条路是通的Terraria 这类 .NET 32 位程序已在 Wine Mono 上验证Steam 全家桶可用 Valve 官方 Windows 版 Steam 客户端登录、浏览已购游戏、安装与更新云存档会在启动和退出时同步。五、别踩这些坑 ⚠️7 天重装是常态不是故障免费证书到期后重新侧载应用数据容器会保留游戏文件、Wine 前缀和存档都还在不用重新导游戏。构建别用 Release构建记录明确写着 Release 构建曾让 guest 崩溃Debug 才是能跑游戏的配置。源码构建的隐性输入工具链、iOS 版 LLVM、VC 运行时、子模块的 fork 指针缺一环就编不出 App其中子模块 commit 曾只存在于本地未推送到远端递归 clone 可能第一步就失败——以 docs/BUILDING.md 的Inputs that are not in the repository表格为准。内存上限iOS 的 Jetsam 机制对单 App 的内存上限约 4096 MB重度 PC 游戏可能触顶被杀持续游玩还会触发热降频这是手机模拟 PC 游戏的物理天花板优化不掉。有线手柄会让声音消失部分有线手柄会把自己枚举成 USB 音频输出iOS 会把 App 全部声音路由给它。拔掉线改蓝牙即可这不是 Madeira 的音频 bug。JIT 通道怕蜂窝网络启用 JIT 依赖 LocalDevVPN 的回环通道蜂窝数据下不通。开 JIT 时保持蜂窝数据关闭Wi-Fi 或纯本地都可行。个别游戏挑食如 Dark Souls Remastered 会在收到任何鼠标事件后切到键鼠提示并忽略手柄或在窗口不是前台时丢弃输入——项目已内置对应处理非编辑触摸不转鼠标、前台窗口自动修正但同类怪癖可能还会遇到。六、想啃源码四条阅读路线README.md——总地图。How it works一节用四层讲清了技术栈Repository layout和文档索引能让你三分钟建立目录观感从这里开始成本最低。app/Madeira/——应用主体。建议从WineProcessBridge.m入手它是每次启动的总闸负责读 PE 头判断 32/64 位、选择系统 DLL 目录aarch64-windows、arm64ec-windows、i386-windows、设置环境变量再拉起 Wine 会话。顺带看一眼arm64ec-windows/这个DLL 农场目录里面的每个文件都会被链进前缀Wine 模块只有在这里存在才能被游戏用到。docs/BUILDING.md——在动手编译前读。它按组件列出了完整编译链、每条脚本的产物、哪些步骤已验证/未验证以及仓库外输入的获取方式与 SHA-256 校验值是构建问题的第一排查手册。madeira-d3d12/——GPU 路径的自研部分。想看运行时用 Apple 转换器把 DXIL 转 Metal具体怎么落地从src/unix/madeira_ir_unix.mm和src/madeira_ir_abi.h这条线读起third_party/metal-shader-converter/里放着 Apple 转换器的头文件与许可文本。再深一层的话docs/CONTROLLERS.md 里手柄快照、触摸仲裁、HID 手柄虚拟设备含 DualSense 报告描述符的伪造方式写得非常细docs/WOW64.md 则完整展开了 32 位 guest window 的设计约束——这两篇是少见的把 why 也写清楚的移植文档。七、高频问题速答 ❓Q为什么必须每周重装一次免费 Apple ID 的签名描述文件 7 天过期到期后 App 打不开重新侧载即可。应用容器跨重装保留存档和 Wine 前缀不丢无需重新导游戏。Q为什么 App Store 搜不到JIT 需要调试器附加后系统才会授予CS_DEBUGGED标志并允许创建可执行内存这类机制过不了 App Store 审核所以只能侧载。Q32 位游戏到底行不行行。Wine 的 WoW64 层wow64.dll、wow64win.dll以原生 aarch64 运行x86 代码由 FEX 的 WOW64 模块翻译并且 32 位伪进程默认不占任何额外地址空间按需分配 4GB 对齐的 guest window。已验证的例子包括 Terraria经 Wine Mono 运行。Q内存会不会不够被系统杀掉会。iOS 对单 App 的 Jetsam 上限约 4096 MB大型 PC 游戏可能触顶同时持续高负载会热降频。这是硬件平台决定的瓶颈不是项目 bug。适合谁想弄清楚iOS 上模拟 PC 游戏这条完整链路CPU 翻译、API 模拟、GPU 转译、输入与 32 位兼容是怎么落地的开发者以及愿意接受每周重装、追求在真机上玩 Thumper 这类 PC 游戏的极客玩家。GPL-3.0-or-later 许可含 Madeira Converter Exception派生分发需保持开源细节见 docs/LICENSING.md。【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/Madeira创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑