让 iPhone 用上 iPad 的多任务与台前调度:MobileGestalt 改造全流程

iPhone 和 iPad 跑的是同一套系统底层,多任务、浮动窗口、台前调度(Stage Manager)这些能力并不是 iPad 独有的代码,而是由一组设备身份标识开关控制的。只要让系统”以为”自己是一台 iPad,这些界面就会自己冒出来。这篇教程把原理和操作路径讲清楚,动手前请先把风险那段读完。

原理:iOS 靠 MobileGestalt 判断”自己是谁”

让 iPhone 用上 iPad 的多任务与台前调度:MobileGestalt 改造全流程

iOS/iPadOS 里有一份叫 MobileGestalt 的设备能力缓存,位于系统的一个受保护路径下。它保存的是这台设备”具备什么能力”的答案——有没有麦克风、有没有 Touch ID、是不是 iPad、支持不支持多窗口。系统各处界面在决定要不要显示某个功能时,问的就是这份缓存。

它的键名是加密过的字符串,长这样:uKc7FPnEO++lVhHWHFlGbQqeaj75wk3HF4DwQ8qbIi7g。对应的含义是:

  • uKc7FPnEO++lVhHWHFlGbQ —— 设备是 iPad
  • mG0AnH/Vy1veoqoLRAIgTA —— 支持 Medusa 浮动实时应用
  • UCG5MkVahJxG1YULbbd5Bg —— 支持 Medusa 覆盖应用
  • ZYqko/XM5zD3XBfN5RmaXA —— 支持 Medusa 固定应用
  • nVh/gwNpy7Jv1NOk00CMrw —— 支持 Medusa PIP 镜像
  • qeaj75wk3HF4DwQ8qbIi7g —— 设备有能力启用台前调度

把这些键值补进去,系统就会把 iPad 的那套窗口管理界面加载出来。反过来,如果你想让设备”变回” iPhone,把这几个键还原即可。

路线一:misaka26 + TrollPad(相对省事)

让 iPhone 用上 iPad 的多任务与台前调度:MobileGestalt 改造全流程

如果你不想碰命令行和脚本,走这条。它的思路是:先把设备自己的 MobileGestalt 文件导出来,交给电脑端的 misaka26 写入 iPad 配置,再让设备重启。

准备阶段

  • 打开「设置 → 面容 ID 与密码」,下滑找到并关闭「失窃设备保护」(Stolen Device Protection)。
  • 回到设置首页,点顶部的你的名字 → 「查找」→ 关闭「查找我的 iPhone」。这一步是必须的,因为改动 MobileGestalt 时系统会拦住这两项保护。功能生效后可以再打开。

导出本机 MobileGestalt

  • 用「Save MobileGestalt」这类快捷指令把本机的 MobileGestalt 内容导出来。如果系统提示不允许运行脚本,去「设置 → App → 快捷指令 → 高级」里打开「允许运行脚本」再试。
  • 运行快捷指令,把导出的内容保存成文件,文件名保持为 com.apple.MobileGestalt.plist,存到「文件」App 里。这个文件是本机专属的,别人的文件不能拿来用。

在电脑上应用配置

  • 把 plist 通过 AirDrop 或邮件传到 Mac / PC。Windows 需要先装好 iTunes,设备要能在 iTunes 里正常识别。
  • 下载并打开 misaka26(Windows 和 macOS 都有版本)。载入刚才那个 plist 文件。
  • 在列表里找到 TrollPad – iPad Multitasking 18.0+,选中,点 Apply。设备会重启。
  • 如果第一次重启后没有变化,把 Apply 再执行一次,通常第二次就会出现 iPadOS 式的引导界面。

生效后你会看到什么

  • 底部 Dock 变成 iPad 式:固定的应用加上最近使用区域,横竖屏都可用。
  • App 切换器变成大号多窗口视图,一次能看到更多应用。
  • 台前调度可用:窗口可以浮动、拖动、缩放,左侧有一条窗口栏显示当前打开的应用。
  • 应用左上角出现 iPad 式窗口控制,支持最小化、平铺、调整大小。
  • 控制中心和键盘布局按更宽的尺寸重新排布。

这些功能是系统里本来就有的,所以不需要额外配置,重启后自动打开。

路线二:自己改 MobileGestalt(极客向)

让 iPhone 用上 iPad 的多任务与台前调度:MobileGestalt 改造全流程

这条路的自由度更高,但要求也高得多,需要越狱或 TrollStore 环境,还要一台电脑配合。

  • 读取环节:如果设备已经越狱,可以直接读系统里的 MobileGestalt;如果没有,则通过一个能读该路径的 App(或越狱环境下的文件管理器)把 plist 导出到「文件」App,再传到电脑。
  • 难点在于写入位置。uKc7FPnEO++lVhHWHFlGbQ(设备是 iPad)这一条必须写进 CacheData 段,而不是 CacheExtra,写错位置会导致设备反复重启无法开机。
  • 但 CacheData 段的内容是密密一坨乱码,没法直接编辑。正规做法是去 /usr/lib/libMobileGestalt.dylib 里找键 mtrAoWJ3gsq+I90ZnQ0vQw(DeviceClassNumber)对应的偏移位置,然后在 CacheData 的对应偏移处写入新值——DeviceClassNumber 置为 3,代表 iPad。
  • 这个 dylib 在沙盒里读不到,需要用它提供的能力打开并解析段结构。常见做法是在 macOS 上写一个小脚本,配合 libimobiledevice、Finder 或同类工具拿到设备 UDID,再按偏移写入。
  • 写入完成后重启设备,设置里就会出现多任务相关的选项。一次不成功是常态,需要重复执行几次。

动手前必须知道的风险

让 iPhone 用上 iPad 的多任务与台前调度:MobileGestalt 改造全流程
  • 反复重启(bootloop):这是最主要的风险,来源就是把身份键写错位置。开启台前调度时,建议只通过控制中心的开关来启用,而不是一次性把所有相关键都打开,这样出错范围更可控。
  • 系统更新会覆盖:iOS 小版本更新后,改动可能被重置,需要重新走一遍流程。
  • 不是所有机型都吃得消:台前调度对屏幕尺寸和内存有实际要求,小屏机型上窗口会非常挤,体验未必比原生好。
  • 保修与稳定性:改动系统缓存属于非常规操作,可能影响保修判定;如果出现异常,第一时间想到的是还原键值,而不是继续加改动。
  • 官方更新可能收紧:苹果一直在调整能读到该路径的接口权限,这条路的可用性可能会随版本变化。

怎么恢复原状

走 misaka26 路线的话,把设备重新连上电脑,载入同一份 plist,选择关闭这项配置再 Apply 一次即可;改动手工方式的,把键值还原成原值后重启。两种方式都建议在用之前,把「查找我的 iPhone」和「失窃设备保护」的开关状态记下来,恢复后逐项还原。另外,做任何改动前先把设备完整备份一次,比什么都重要。