关于 Parall

Parall 为何存在、快捷方式包如何工作,以及其本地隐私优先设计背后的技术选择。

原创 macOS 工程

源于研究,而不是套用现成方案

Parall 的核心无法根据公开文档拼装出来,因为它所依赖的应用行为并没有文档说明。它来自多年对 macOS 应用架构的逆向工程、对各个应用的实际测试,以及围绕真正有效的方法持续改进引擎。

直接研究未公开的行为

Parall 的兼容性配置来自对每个目标应用的直接观察,包括它如何启动、存储数据、处理独立进程以及与 Dock 交互。快捷方式从 Spotlight、Raycast 和 Alfred 打开时仍能正确工作,也是这项逆向工程的成果。随着 macOS 和应用变化,这项工作也会持续进行。

不只是脚本或应用副本

脚本有时也能启动另一个进程。Parall 解决的是更难的问题,让受支持的实例拥有真正可用的独立身份和 Dock 行为,并在目标应用允许时分离数据、账号、配置文件和设置,同时继续连接原始应用。

保留原始应用签名和更新能力

Parall 不会修改目标应用,也不会把它固定在某个版本。每个快捷方式始终启动已安装的原始应用,因此能保留其代码签名,并让内置更新功能继续工作。应用更新后,所有快捷方式都会在重新启动时使用新版本。这一点很重要,因为应用更新经常修复安全漏洞。

不使用私有 API,也不修改应用

研究结果只用于决定 Parall 如何配置标准 macOS 启动机制。Parall 不使用私有 API,不注入或修补代码,也不修改 macOS 或原始应用。

底层 C++,长期兼容

每个 Parall 快捷方式内的启动器均采用底层 C++ 编写,不依赖第三方库或 Swift 运行时。它在从 macOS 10.11 起的每个主要版本上都经过人工测试,以检查兼容性并保留目标应用的正常行为。该设计旨在让快捷方式在未来的 macOS 更新后继续运行,并在新版本发布时检查兼容性。

最终成果是由人主导的原创工程。Parall 引擎由 Ihor July 亲自设计、编写、测试和维护,而不是通过人工智能提示词生成,也不是照搬公开方案。

不同的架构

为什么 Parall 不复制或重新打包 App

许多多实例解决方案会复制目标 App 包,修改其身份标识,然后重新签名。Parall 则通过单独的快捷方式启动已安装的原始 App。它从不修改、重新打包或重新签名目标 App 包。

对比项目 常见的复制和重新打包方式 Parall
目标 App 包 创建第二份副本,修改其内容或包身份标识,并且可能再次打包。 保持已安装的目标 App 完全不变,通过单独的快捷方式启动其原始可执行文件。
签名与安全 修改已签名的 App 包会使开发者的原始签名失效。重新签名会产生签名不同的副本,并且可能改变或移除权限、沙盒行为和其他保护措施。 目标 App 包从不被修改,因此会保留其开发者签名、沙盒、权限和安全措施。
更新后的隐私权限 重新打包或重新签名可能改变应用身份,导致更新后已保存的权限失效。仅重新开启开关可能无法恢复访问,您可能需要重置权限并重新授权。 保留原应用的签名身份,让 macOS 在正常应用更新后仍能识别您之前的权限选择。
原生 App 服务 身份标识、签名或权限发生变化,可能会干扰与其关联的服务,包括钥匙串群组、通行密钥、推送通知身份、授权回调以及更新程序所依赖的信息。 继续启动目标 App 的已签名包,因此不会移除它原有的能力。各项服务仍取决于目标 App 和 macOS,FAQ 中也记录了已知的多实例限制。
更新 复制或重新打包的版本可能脱离原始更新路径,并在重新构建或替换之前一直停留在旧版本。 保留原始更新路径。目标 App 更新后,每个 Parall 快捷方式都会在下次启动时使用更新后的 App。
外部依赖 可能依赖脚本、手动签名步骤或从 App 之外获取的辅助工具。 Parall 主 App 是独立的沙盒 App,并通过 Mac App Store 分发。无需下载辅助工具,也无需后台守护进程。
原应用图标更新 复制的图标可能保持旧样式,直到被刷新。 未经自定义的快捷方式图标始终链接到原应用的图标。

此比较针对原生应用快捷方式,以及复制、修改或重新签名应用包的变通方案。功能取决于目标应用。仅复制应用不会使签名失效,但修改已签名的内容可能会。

保留更新为什么重要

更新经常修补安全漏洞。Codex 和 Claude 等快速发展的 AI 与开发工具可能会频繁获得重要修复,同时 AI 辅助安全研究也在加快漏洞发现速度。保持软件最新是重要的防御层,并应与恶意软件防护和其他安全控制措施配合使用。

为 Mac App Store 而设计

Parall 的快捷方式生成流程经过专门设计,使主 App 能够保留沙盒并通过 Mac App Store 分发,而无需外部辅助工具。创建和启动快捷方式均可在本地离线完成。可选的下载兼容性设置操作是隐私政策中明确说明的网络例外。

首个此类快捷方式引擎

Parall 所采用的快捷方式架构没有公开 API、完整文档或已发布的实现方案。我通过个人逆向工程和直接测试 macOS 原生行为开发了这个引擎。公开示例和通用 AI 生成实现通常会退回到脚本、复制 App 包或重新打包的方式。据我所知,Parall 是首个在不改动目标 App 的情况下解决这一问题的消费级工具。随着我继续研究更多 macOS 行为,这个引擎也将持续发展。

Parall 为什么存在

十多年来,我一直在处理 macOS 运行同一应用多个实例时的限制。我曾为自己构建脚本化应用包来绕过这些限制,后来意识到普通用户没有一种简单且完善的方式来运行真正独立的应用实例。Parall 成为同类中的第一款工具,专门用于解决这个问题,同时不复制或修改目标应用。

Parall 支持对基于 Chrome、Firefox、Electron、Eclipse 和 ToDesktop 的兼容应用自动分离数据,即使目标应用在沙盒中运行也可以。高级 HOME 重定向模式还支持许多其他兼容应用。有关详细的最新列表,请访问兼容性页面。

即使不需要多实例模式,你仍然可以用 Parall 创建带有独立身份和启动配置的网站、应用、文件、文件夹或命令快捷方式。应用快捷方式可以添加自定义命令行参数,或覆盖包括 HOME 在内的环境变量,以控制行为、选择配置文件或重定向数据路径。HOME 覆盖会构建类似容器的结构,同时保留关键 macOS 链接以确保兼容性。

你可以定义只应用于该快捷方式的自定义环境变量,非常适合精细配置、调试或按项目设置环境。Parall 还支持 Arduino IDE,让你可以并排运行带有不同 toolchain、开发板和库的独立开发环境。

对于教学实验室和课堂,Parall 可以在快捷方式退出时自动清除其重定向的数据存储。这样学生实验的每次会话都能从干净状态开始,无需手动清理。

Parall 为什么重要

Parall 让启动同一个 macOS 应用的多个实例比以往更简单。每个实例都有自己的 Dock 图标和配置,就像独立应用一样。你不必依赖临时方案或复杂脚本,Parall 会创建独立快捷方式来启动多个应用实例,让你可以同时使用多个配置文件或会话。

每个快捷方式都会直接连接到原始应用包。目标应用更新后,每个 Parall 快捷方式都会在下次启动时使用新版本。你不必仅仅因为目标应用发生变化而重新创建快捷方式。不过,Parall 更新可能仍会要求你重新生成快捷方式,以获得快捷方式引擎的修复或改进。

Parall 包含高级环境管理,让你精确控制每个应用实例如何存储和分离数据。这也支持高级流程,例如在 macOS 上运行多个分离的 Philips Hue Sync 实例,让不同显示器使用各自专用的 LED 设置,而不会发生实例重叠。

谁创建了 Parall

我是 Ihor July,以网络安全专家和逆向工程师的身份开发 Parall,专注于安全且尊重隐私的 macOS 工具。我也是 DockLock Pro 的开发者,它是用于控制多个显示器上 Dock 行为的 Mac Dock 工具;也是 App Trust Preview 的开发者,这是一款本地优先的 Mac 应用检查工具,可在打开应用前把签名、沙盒、权限和内部组件转换成易读报告;也是 LockLines 的开发者,这是一款用于设计、预览和复制适合 macOS 的纯文本锁定屏幕消息的 Mac 工具;也是 App Archiver 的开发者,这是一款将应用保留在原位置进行归档以释放磁盘空间,并在打开时恢复应用的 Mac 工具。我还开发了 DiskPress,这款 Mac 工具通过原生文件压缩和 APFS 数据去重来节省空间,同时让文件保留在原位置。

Parall 由我亲自设计、编写和测试。我负责应用代码,验证每一处改动,并维护供多个应用使用的 Objective-C 框架。人工智能和在线搜索可以协助研究错误、边缘情况、文字和翻译,但核心引擎、每个应用的兼容性研究、具体实现和测试都来自我自己的逆向工程和代码。

这款应用使用 C++ 原生构建以保证性能,并在沙盒中运行以最大化安全性。Parall 体现了多年研究和开发,目标是为 macOS 用户提供实用且隐私优先的解决方案。

关于快捷方式包

Parall 快捷方式是小型 macOS 启动器应用包,会直接执行已安装目标应用的二进制文件。它们不包含目标应用的副本。这些快捷方式包按设计不使用沙盒,因为它们必须在没有额外层的情况下直接启动原始应用。

每个生成的应用快捷方式都与已签名的目标应用相互独立,因此目标应用原有的开发者签名会保持完整。快捷方式所需的任何批准或签名都只影响这个单独的启动器包。macOS 可能会显示一条消息,提示快捷方式“正在尝试修改另一个应用”,但这只是由访问触发的通用系统通知,并不是由修改触发。

Parall 只创建启动原始应用所需的单独启动器包和配置。它绝不会更改、注入、重新签名或写入目标应用或操作系统。