LiveContainer/LiveContainer

GitHub: LiveContainer/LiveContainer

LiveContainer 是一个 iOS 应用启动器,允许用户在无需真正安装的情况下于容器内运行第三方 IPA 应用。

Stars: 9115 | Forks: 749

Logo

LiveContainer

一款无需真正安装即可运行 iOS 应用的应用启动器!

Crowdin 项目: [![Crowdin](https://badges.crowdin.net/livecontainer/localized.svg)](https://crowdin.com/project/livecontainer)  |   文档:[liveconainer.github.io](https://livecontainer.github.io/docs/intro) # LiveContainer - LiveContainer 是一个应用启动器(非模拟器或 hypervisor),允许你在其内部运行 iOS 应用。 - 允许你仅使用一个应用和 App ID 来安装无限数量的应用(3 个应用 / 10 个 App ID 的免费开发者账号限制在此不适用)。你还可以通过多个数据容器安装同一应用的多个版本。 - (iOS 26 以下)当 JIT 可用时,代码签名将被完全绕过,无需在安装前对你的应用进行签名。否则,你的应用将使用与 LiveContainer 相同的证书进行签名。 # 安装 **LiveContainer 提供独立版本和内置 SideStore 的版本。[请在此处阅读安装指南](https://livecontainer.github.io/docs/installation)** 如果你遇到任何问题,请[在此阅读我们的常见问题解答](https://livecontainer.github.io/docs/faq) ### 独立版
Stable Add AltSource Download .ipa
Nightly Add AltSource Download .ipa
### LiveContainer+SideStore |稳定版|Nightly 版| |:-:|:-:| |Download .ipa|Download .ipa| ## 环境要求 - iOS/iPadOS 15+ + 多任务处理需要 iOS/iPadOS 16.0+ - AltStore 2.0+ / SideStore 0.6.0+ # 功能与指南 ### 安装应用 - 打开 LiveContainer,点击右上角的加号图标并选择要安装的 IPA 文件。 - 在下次启动时选择你想要打开的应用。 - 你可以长按应用来进行管理。 ### [将应用添加到主屏幕](https://livecontainer.github.io/docs/guides/add-to-home-screen) ### [多个 LiveContainer](https://livecontainer.github.io/docs/guides/multiple-livecontainers) 使用多个 LiveContainer 允许你同时运行多个不同的应用,并且在 LiveContainer 之间的数据传输*几乎*是无缝的。 ### [多任务处理](https://livecontainer.github.io/docs/guides/multitask) 你现在可以在应用内的虚拟窗口中同时启动多个应用。这些窗口可以调整大小、缩放,甚至可以使用原生的画中画 功能进行显示。在 iPad 上,应用可以在原生窗口模式下运行,在每个独立的系统窗口中显示每个应用。如果你愿意,可以选择在设置中将多任务处理设为应用的默认运行模式。 要使用多任务处理,请按住其横幅并点击 **“Multitask”**。你也可以在设置中将“Multitask”设为默认启动模式。 ### [JIT 支持](https://livecontainer.github.io/docs/guides/jit-support) ### [安装外部 tweak](https://livecontainer.github.io/docs/guides/tweaks) ### [多个容器/外部容器](https://livecontainer.github.io/docs/guides/containers-and-external-data) ### [隐藏应用](https://livecontainer.github.io/docs/guides/lock-app) ### 修复文件选择器和本地通知 某些应用在 LiveContainer 中可能会遇到文件选择器的问题,或者无法申请通知权限。要解决此问题,请在特定应用设置中相应地启用“修复文件选择器”和“修复本地通知”。 ### “在应用内打开”支持 - 点击“应用”标签右上角的链接图标并输入 URL。LiveContainer 会检测合适的应用并询问你是否要启动它。 - 此外,你可以使用[此快捷指令](https://www.icloud.com/shortcuts/44ea82ce7ed8469ea24198c375db09a0)将网页共享给 LiveContainer。请务必在共享表单操作中将此快捷指令添加到“收藏夹”。 ## 兼容性 遗憾的是,并非所有应用都能在 LiveContainer 中运行,因此我们提供了一份[兼容性列表](https://github.com/LiveContainer/LiveContainer/labels/compatibility),用于说明哪些应用存在问题。如果它们不在此列表中,则很可能会正常运行。但是,如果它无法运行,请提交一个 [issue](https://github.com/LiveContainer/LiveContainer/issues/new/choose)。 ## 编译 打开 Xcode,将 `xcconfigs/Global.xcconfig` 中的 `DEVELOPMENT_TEAM[config=Debug]` 修改为你的团队 ID,然后进行编译。 ## 项目结构 ### 主可执行文件 - LiveContainer 的核心 - 包含设置 guest 环境和加载 guest 应用的逻辑。 - 如果未选择任何应用,它将加载 LiveContainerSwiftUI。 ### LiveContainerSwiftUI - LiveContainerUI 的 SwiftUI 重写版本(由 @hugeBlack 完成) - 多语言支持的语言文件 `Localizable.xcstrings` 位于此处。要帮助我们翻译 LiveContainer,请访问[我们的 crowdin 项目](https://crowdin.com/project/livecontainer) ### MultitaskSupport - 包含多任务处理功能的实现。 - 基于 [FrontBoardAppLauncher](https://github.com/khanhduytran0/FrontBoardAppLauncher) ### SideStore - 用于 SideStore 应用刷新集成的支持代码 ### TweakLoader - 一个简单的 tweak 注入器,用于加载 CydiaSubstrate 并加载 tweak。 - 被注入到你在 LiveContainer 中安装的每个应用中。 ### ZSign - LiveContainer 附带的应用签名工具。 - 最初由 [zhlynn](https://github.com/zhlynn/zsign) 制作。 - LiveContainer 使用由 khcrysalis 修改的 [Feather's](https://github.com/khcrysalis/Feather) 版本的 ZSign。 - 进行了一些更改以满足 LiveContainer 的需求。 ## 它是如何工作的? ### 修补 guest 可执行文件 - 修补 `__PAGEZERO` 段: + 将 `vmaddr` 更改为 `0xFFFFC000` (`0x100000000 - 0x4000`) + 将 `vmsize` 更改为 `0x4000` - 将 `MH_EXECUTE` 更改为 `MH_DYLIB`。 - 注入加载命令以加载 `TweakLoader.dylib` ### 修补 `@executable_path` - Hook `dyld4::APIs::_NSGetExecutablePath` - 调用 `_NSGetExecutablePath` - 替换 `config.process.mainExecutablePath` - 使用 `dyld4::APIs` 实例(作为第一个参数传递)计算 `config.process.mainExecutablePath` 的地址 - 使用 `builtin_vm_protect` 或 TPRO 解锁使其可写 - 用我们控制的地址替换它 - 将原始的 `dyld4::APIs::_NSGetExecutablePath` 放回原处 ### 修补 `NSBundle.mainBundle` - 此属性会被 guest 应用的 bundle 覆盖。 ### 绕过库验证 - JIT 对于绕过代码签名是可选的。在无 JIT 模式下,所有可执行文件都已签名,因此这不适用。 - 源自 [Restoring Dyld Memory Loading](https://blog.xpnsec.com/restoring-dyld-memory-loading) ### dlopening 可执行文件 - 使用 guest 应用的可执行文件调用 `dlopen` - TweakLoader 加载所选文件夹中的所有 tweak - 查找入口点 - 跳转到入口点 - guest 应用的入口点调用 `UIApplicationMain` 并像任何其他 iOS 应用一样启动。 ### 多账号支持与 Keychain 半隔离 创建了 [128 个 keychain 访问组](./entitlements.xml),LiveContainer 会将它们随机分配给同一应用的每个容器。因此,你可以创建 128 个具有不同 keychain 访问组的容器。 ## 限制 - guest 应用的 Entitlements 不会应用于 host 应用。这不是什么大问题,因为侧载应用只需要基本的 Entitlements。 - 应用权限是全局应用的。 - guest 应用容器未进行沙盒隔离。这意味着一个 guest 应用可以访问其他 guest 应用的数据。 - 不支持应用扩展。它们无法注册,原因如下:LiveContainer 受到沙盒隔离,SpringBoard 不知道 LiveContainer 中安装了哪些应用,并且它们会占用 App ID。 - 可以通过使用多个 LiveContainer 和多任务处理功能来实现多任务处理。然而,虽然我们能够修复 iPadOS 上的物理键盘输入问题 (https://github.com/LiveContainer/LiveContainer/issues/524),但 iPhone 镜像使用了不同的检查机制,这仍然会破坏它 (https://github.com/LiveContainer/LiveContainer/issues/793)。 - 远程推送通知将无法工作 - 查询自定义 URL scheme 可能无法工作 (?) ## 待办事项 - 使用 ChOma 替代自定义的 MachO 解析器 ## 许可证 [Apache License 2.0](https://github.com/khanhduytran0/LiveContainer/blob/main/LICENSE) ## 致谢 - [xpn 的博文:Restoring Dyld Memory Loading](https://blog.xpnsec.com/restoring-dyld-memory-loading) - [LinusHenze 的 CFastFind](https://github.com/pinauten/PatchfinderUtils/blob/master/Sources/CFastFind/CFastFind.c):[MIT 许可证](https://github.com/pinauten/PatchfinderUtils/blob/master/LICENSE) - [litehook](https://github.com/opa334/litehook):[MIT 许可证](https://github.com/opa334/litehook/blob/main/LICENSE) - @haxi0 & @m1337v 提供图标 - @Vishram1123 提供初始快捷指令实现 - @hugeBlack 提供 SwiftUI 贡献 - @Staubgeborener 提供自动 AltStore/SideStore 源更新器 - @fkunn1326 改进应用隐藏功能 - @slds1 提供动态颜色功能 - @Vishram1123 提供 iOS 26+ JIT 脚本支持 - @StephenDev0 提供 AltStore 源支持
标签:iOS, NIDS, 免签安装, 动态加载, 容器化, 应用启动器, 移动开发工具