Skip to content

Commit 3960ca1

Browse files
committed
Add homepage i18n and zh-CN guides
Update docusaurus deps and clean zh-CN installation
1 parent 924e51e commit 3960ca1

27 files changed

Lines changed: 3103 additions & 2247 deletions

docs/development/architecture.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ LiveContainer is more than a shell app—it is a small runtime that re-hosts arb
6565
- The loader resolves the program entry point and jumps to it; the guest then calls `UIApplicationMain` as usual.
6666

6767
### Multi-account support & keychain semi-separation
68-
- 128 keychain access groups are defined. Containers randomly pick groups to reduce cross-app keychain collisions, enabling isolated sign-ins per container.
68+
- [128 keychain access groups](https://github.com/LiveContainer/LiveContainer/blob/main/entitlements.xml) are defined. Containers randomly pick groups to reduce cross-app keychain collisions, enabling isolated sign-ins per container.
6969

7070
## Limitations
7171

docs/development/i18n.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
---
2+
title: Documentation i18n Workflow
3+
sidebar_position: 3
4+
---
5+
6+
# Documentation i18n Workflow
7+
8+
LiveContainer’s docs ship in English and Simplified Chinese. This guide explains how to keep the translations in sync whenever you edit Markdown pages or UI strings.
9+
10+
## 1. Generate translation sources
11+
12+
Run the built-in Docusaurus helper whenever you add or rename docs:
13+
14+
```bash
15+
npm run write-translations
16+
# or a single locale:
17+
npm run write-translations -- --locale zh-CN
18+
```
19+
20+
This command updates:
21+
22+
- `i18n/zh-CN/docusaurus-plugin-content-docs/current/**` – translated Markdown copies.
23+
- `i18n/zh-CN/code.json` – UI strings coming from MDX JSX, metadata, etc.
24+
- `i18n/zh-CN/docusaurus-theme-classic/*.json` – navbar/footer/search labels.
25+
26+
Commit these files alongside your English edits so translators see the diffs.
27+
28+
## 2. Edit translated Markdown
29+
30+
Each English doc keeps its original `id`. The translated file must live in the same relative path inside `i18n/zh-CN/docusaurus-plugin-content-docs/current`. Example:
31+
32+
- English: `docs/guides/jit-support.md`
33+
- Chinese: `i18n/zh-CN/docusaurus-plugin-content-docs/current/guides/jit-support.md`
34+
35+
Copy the front matter and structure verbatim, then translate the body. Keep code blocks, admonitions, and inline HTML exactly where they are so MDX renders correctly.
36+
37+
If you use Crowdin, push the updated sources, let translators work there, then pull translations back into this folder.
38+
39+
## 3. Translate theme strings
40+
41+
Navbar/footer/search labels live under `i18n/zh-CN/docusaurus-theme-classic`. Run `write-translations` and update the JSON files when you change `docusaurus.config.js` (e.g., add a new navbar item).
42+
43+
## 4. Validate builds
44+
45+
Always test both locales locally:
46+
47+
```bash
48+
npm run start -- --locale zh-CN
49+
npm run build -- --locale zh-CN
50+
```
51+
52+
Start the dev server with `--locale zh-CN` if you need to inspect only the Chinese site. For production builds, add a CI job that runs `npm run build -- --locale zh-CN` so missing translations fail fast.
53+
54+
## 5. Let translators know
55+
56+
When opening a PR that changes English content, mention whether translations are required. If you can’t translate immediately, leave a TODO comment in the matching `i18n/zh-CN` file or create an issue tagged `needs-translation`.

docs/faq/compatibility.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Unfortunately, not every iOS app cooperates with LiveContainer. Before opening a
1616

1717
1. **Update LiveContainer** to the latest stable or nightly build.
1818
2. Decide whether the guest is **private** or **shared** and document that choice. Some bugs only happen with shared containers.
19-
3. Note whether the app uses **JIT** or **JIT-less** mode. Run the [JIT-Less Diagnose](../guides/jit-less-diagnose-page.md) tool to ensure certificates are valid.
19+
3. Note whether the app uses **JIT** or **JIT-less** mode. Run the [JIT-Less Diagnose](/docs/guides/jit-less-diagnose-page) tool to ensure certificates are valid.
2020
4. If tweaks are enabled, temporarily disable them (long-press app → Settings → Tweak folder → `None`) to rule out conflicts.
2121
5. Use **Settings → Data Management → Export Logs** immediately after reproducing the issue and attach the zip to your report.
2222
6. Mention if the app is running in **multitask mode** or through another LiveContainer instance.

docs/installation.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ If you reinstall AltStore/SideStore using AltServer, you will need to go through
7373

7474
Once the basics work, explore the following guides:
7575

76-
- [Multiple LiveContainers](./guides/multiple-livecontainers.md) — run additional containers and share apps between them.
77-
- [JIT Support](./guides/jit-support.md) — configure automatic JIT enablers or scripts.
78-
- [JIT-Less Diagnose Page](./guides/jit-less-diagnose-page.md) — verify imported certificates and troubleshoot signing issues.
79-
- [Tweaks](./guides/tweaks.md) — inject CydiaSubstrate tweaks globally or per app.
80-
- [Multitask](./guides/multitask.md) — float guest apps in resizable windows.
81-
- [Lock & Hide Apps](./guides/lock-app.md) — protect sensitive guests with Face ID or Strict Hiding mode.
76+
- [Multiple LiveContainers](/docs/guides/multiple-livecontainers) — run additional containers and share apps between them.
77+
- [JIT Support](/docs/guides/jit-support) — configure automatic JIT enablers or scripts.
78+
- [JIT-Less Diagnose Page](/docs/guides/jit-less-diagnose-page) — verify imported certificates and troubleshoot signing issues.
79+
- [Tweaks](/docs/guides/tweaks) — inject CydiaSubstrate tweaks globally or per app.
80+
- [Multitask](/docs/guides/multitask) — float guest apps in resizable windows.
81+
- [Lock & Hide Apps](/docs/guides/lock-app) — protect sensitive guests with Face ID or Strict Hiding mode.

i18n/en/code.json

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,5 +344,53 @@
344344
"theme.tags.tagsPageTitle": {
345345
"message": "Tags",
346346
"description": "The title of the tag list page"
347+
},
348+
"home.logoAlt": {
349+
"message": "LiveContainer Logo",
350+
"description": "Alt text for the homepage logo"
351+
},
352+
"home.heroTitle": {
353+
"message": "LiveContainer",
354+
"description": "Homepage hero title"
355+
},
356+
"home.heroSubtitle": {
357+
"message": "Run iOS apps in a sandbox without jailbreak",
358+
"description": "Homepage hero subtitle"
359+
},
360+
"home.getStartedButton": {
361+
"message": "Get Started",
362+
"description": "Primary call-to-action button on homepage"
363+
},
364+
"home.metaTitle": {
365+
"message": "LiveContainer",
366+
"description": "Meta title used for the homepage"
367+
},
368+
"home.pageDescription": {
369+
"message": "Run iOS apps in a sandbox without jailbreak",
370+
"description": "Meta description for the homepage"
371+
},
372+
"home.feature.noJailbreak.title": {
373+
"message": "No Jailbreak Required",
374+
"description": "Feature section title"
375+
},
376+
"home.feature.noJailbreak.description": {
377+
"message": "Run iOS apps in a secure sandbox environment without needing to jailbreak your device.",
378+
"description": "Feature description for no jailbreak"
379+
},
380+
"home.feature.multipleContainers.title": {
381+
"message": "Multiple Containers",
382+
"description": "Feature title for multiple containers"
383+
},
384+
"home.feature.multipleContainers.description": {
385+
"message": "Create multiple isolated containers for the same app with different data.",
386+
"description": "Feature description for multiple containers"
387+
},
388+
"home.feature.jit.title": {
389+
"message": "JIT Support",
390+
"description": "Feature title for JIT support"
391+
},
392+
"home.feature.jit.description": {
393+
"message": "Optional JIT mode for better performance and compatibility with more apps.",
394+
"description": "Feature description for JIT support"
347395
}
348396
}

i18n/en/docusaurus-plugin-content-docs/current.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,9 @@
2222
"sidebar.docsSidebar.category.Guides": {
2323
"message": "Guides",
2424
"description": "The label for category Guides in sidebar docsSidebar"
25+
},
26+
"sidebar.docsSidebar.doc.Installation": {
27+
"message": "Installation",
28+
"description": "The label for the doc item Installation in sidebar docsSidebar, linking to the doc installation"
2529
}
2630
}

i18n/zh-CN/code.json

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,5 +344,53 @@
344344
"theme.tags.tagsPageTitle": {
345345
"message": "标签",
346346
"description": "The title of the tag list page"
347+
},
348+
"home.logoAlt": {
349+
"message": "LiveContainer 标志",
350+
"description": "Alt text for the homepage logo"
351+
},
352+
"home.heroTitle": {
353+
"message": "LiveContainer",
354+
"description": "Homepage hero title"
355+
},
356+
"home.heroSubtitle": {
357+
"message": "无需越狱,在沙盒中运行 iOS 应用",
358+
"description": "Homepage hero subtitle"
359+
},
360+
"home.getStartedButton": {
361+
"message": "开始使用",
362+
"description": "Primary call-to-action button on homepage"
363+
},
364+
"home.metaTitle": {
365+
"message": "LiveContainer",
366+
"description": "Meta title used for the homepage"
367+
},
368+
"home.pageDescription": {
369+
"message": "无需越狱,在沙盒中运行 iOS 应用",
370+
"description": "Meta description for the homepage"
371+
},
372+
"home.feature.noJailbreak.title": {
373+
"message": "无需越狱",
374+
"description": "Feature section title"
375+
},
376+
"home.feature.noJailbreak.description": {
377+
"message": "无需越狱即可在安全的沙盒环境中运行 iOS 应用。",
378+
"description": "Feature description for no jailbreak"
379+
},
380+
"home.feature.multipleContainers.title": {
381+
"message": "多容器",
382+
"description": "Feature title for multiple containers"
383+
},
384+
"home.feature.multipleContainers.description": {
385+
"message": "为同一应用创建多个隔离容器,并保留不同的数据。",
386+
"description": "Feature description for multiple containers"
387+
},
388+
"home.feature.jit.title": {
389+
"message": "JIT 支持",
390+
"description": "Feature title for JIT support"
391+
},
392+
"home.feature.jit.description": {
393+
"message": "可选的 JIT 模式提升性能,并兼容更多应用。",
394+
"description": "Feature description for JIT support"
347395
}
348396
}
Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
{
22
"version.label": {
3-
"message": "Next",
3+
"message": "最新",
44
"description": "The label for version current"
55
},
66
"sidebar.docsSidebar.category.Getting Started": {
7-
"message": "Getting Started",
7+
"message": "快速开始",
88
"description": "The label for category Getting Started in sidebar docsSidebar"
99
},
1010
"sidebar.docsSidebar.category.Development": {
11-
"message": "Development",
11+
"message": "开发",
1212
"description": "The label for category Development in sidebar docsSidebar"
1313
},
1414
"sidebar.docsSidebar.category.FAQ": {
15-
"message": "FAQ",
15+
"message": "常见问题",
1616
"description": "The label for category FAQ in sidebar docsSidebar"
1717
},
1818
"sidebar.docsSidebar.doc.Introduction": {
19-
"message": "Introduction",
19+
"message": "简介",
2020
"description": "The label for the doc item Introduction in sidebar docsSidebar, linking to the doc intro"
21+
},
22+
"sidebar.docsSidebar.category.Guides": {
23+
"message": "指南",
24+
"description": "The label for category Guides in sidebar docsSidebar"
25+
},
26+
"sidebar.docsSidebar.doc.Installation": {
27+
"message": "安装",
28+
"description": "The label for the doc item Installation in sidebar docsSidebar, linking to the doc installation"
2129
}
2230
}

i18n/zh-CN/docusaurus-plugin-content-docs/current/basics/installation.md

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
---
2+
title: 系统架构
3+
---
4+
5+
# LiveContainer 架构概览
6+
7+
LiveContainer 不只是一个外壳应用,它在自身沙盒中重新托管任意 iOS 应用,提供 Tweak 注入、多任务以及 JIT-Less 运行。本页概述最新代码库的组成以及启动流程。
8+
9+
## 项目结构
10+
11+
### 主可执行文件(`LiveContainer`
12+
- 整个平台的入口,负责启动、数据管理、容器生命周期,并为每个 Guest 启动 LiveProcess。
13+
- 未运行 Guest 时,会加载 SwiftUI 界面(`LiveContainerSwiftUI`)。
14+
15+
### LiveContainerSwiftUI
16+
-[@hugeBlack](https://github.com/hugeBlack) 贡献的 SwiftUI 前端。
17+
- 内含本地化资源(`Localizable.xcstrings`)。欢迎通过 [Crowdin 项目](https://crowdin.com/project/livecontainer) 参与翻译。
18+
19+
### LiveProcess
20+
- 轻量级辅助可执行文件,真正的 Guest Loader。它使用不同的 Bundle ID,在相同权限下运行,便于多任务和基于 PID 的 JIT。
21+
- 负责修补 Guest 二进制、配置 dyld、注入 Tweaks,并把控制权交给应用入口。
22+
23+
### MultitaskSupport
24+
- 实现应用内浮窗以及原生 iPadOS 窗口。
25+
- 与主容器通信,在多个 LiveProcess 实例间同步状态与输入。
26+
27+
### SideStore 助手
28+
- 与 SideStore 的刷新/JIT API 集成,提供后台证书刷新、源更新以及 URL Scheme 处理。
29+
30+
### TweakLoader
31+
- 随应用发布的迷你 Substrate Loader。
32+
- 通过新增 Load Command 注入到每个 Guest;若需要可以替换 `TweakLoader.dylib` 符号链接。
33+
34+
### ZSign
35+
- 随附的签名工具(基于 [zhlynn/zsign](https://github.com/zhlynn/zsign),使用 [Feather](https://github.com/khcrysalis/Feather) 分支)。
36+
- LiveContainer 维护的版本针对多容器和自定义权限做了调整。
37+
38+
### 第三方库
39+
- `fishhook``litehook``OpenSSL` 以子模块形式存在,为 Hook 与签名流程提供底层能力。
40+
41+
## 工作原理
42+
43+
### 预处理 Guest 可执行文件
44+
- 重写 `__PAGEZERO` 段(`vmaddr = 0xFFFFC000``vmsize = 0x4000`),以便在 LiveProcess 中映射。
45+
- 将 Mach-O 类型从 `MH_EXECUTE` 改为 `MH_DYLIB`
46+
- 注入新的 Load Command,在 `UIApplicationMain` 前加载 `TweakLoader.dylib`
47+
48+
### 修补 `@executable_path`
49+
- 新版本通过 litehook/fishhook Hook `dyld4::APIs::_NSGetExecutablePath`
50+
- Hook 调用原函数后,使 `config.process.mainExecutablePath` 可写并替换为 Guest 的路径。
51+
- 旧的 SIGSEGV Hack 已废弃,但仍记录在 [主仓库 README](https://github.com/LiveContainer/LiveContainer/blob/main/README.md) 中。
52+
53+
### 修补 `NSBundle.mainBundle`
54+
- 重写该属性,让请求 Bundle 元数据的 API 得到 Guest 的数据而不是 LiveContainer 的。
55+
56+
### 绕过库校验/签名
57+
- 有 JIT 时,LiveContainer 会调用已配置的 Enabler 解除签名检查。
58+
- 在 JIT-Less 模式下,内置的 ZSign 会使用 AltStore/SideStore 导入的证书重签每个 Guest 和 Tweak。
59+
- 方案基于 [Restoring Dyld Memory Loading](https://blog.xpnsec.com/restoring-dyld-memory-loading)
60+
61+
### 启动应用
62+
- LiveProcess 使用 `dlopen` 加载修补后的二进制。
63+
- `TweakLoader` 载入 CydiaSubstrate 以及当前所选的 Tweak 文件夹。
64+
- Loader 找到入口点并跳转,Guest 随后照常调用 `UIApplicationMain`
65+
66+
### 多账号与钥匙串半隔离
67+
- 定义了 [128 个钥匙串访问组](https://github.com/LiveContainer/LiveContainer/blob/main/entitlements.xml),容器会随机分配,从而降低同一应用不同容器之间的碰撞,方便多账号登录。
68+
69+
## 限制
70+
71+
- Guest 的原生权限不会被复制,只能使用赋予 LiveContainer 的基础权能。
72+
- App 权限(摄像头、媒体库等)在所有 Guest 间共享。
73+
- 容器共享同一沙盒,恶意应用可能读取其他应用的数据。
74+
- 无法注册 App Extension(SpringBoard 不知道这些扩展,而且 App ID 数量有限)。
75+
- 某些多任务场景下,硬件键盘或「iPhone 镜像」依旧会受限制。
76+
- 远程推送和自定义 URL Scheme 通常不可用,因为 LiveContainer 无法在 SpringBoard 中注册它们。

0 commit comments

Comments
 (0)