Files
legado-ios/docs/DEVELOPMENT.md
T
Aminark 0915a144a7 fix: 修复书源导入、阅读外观和书签状态
- 修复书源文件选择、访问权限与导入预览流程,支持查看分组内的书源
- 修复背景图片、字体选择与主题切换,限制背景图片解码尺寸
- 根据已保存书签恢复当前位置状态,避免重复添加
- 补充模型、阅读器和文件选择回归测试及测试样本
- 更新应用版本为 0.1.10(build 16)

Fixes #1
2026-10-20 23:30:42 +08:00

78 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 开发与验证
## 环境
- macOS;支持 Swift 6 的 Xcode,当前开发环境为 Xcode 26.1。
- App 最低 iOS 15.0;核心包也可在 macOS 14+ 测试。
- Swift Package Manager 依赖由 `Package.resolved` 锁定,初次解析需要网络。
- 运行脚本需 Python 3 和 `rg`(ripgrep)。
在独立仓库根目录打开 `Legado.xcodeproj`,选择 `Legado` Scheme。真机运行需要自行设置签名团队;请勿将证书或描述文件提交到仓库。
## 代码结构
| 路径 | 用途 |
| --- | --- |
| `App/` | SwiftUI 页面、UIKit 阅读器、应用入口与资源 |
| `Sources/LegadoCore/` | 书源、规则引擎、网络、持久化、搜索、阅读及 RSS 等核心逻辑 |
| `Tests/LegadoCoreTests/` | 核心行为与书源兼容测试 |
| `Tests/LegadoAppModelsTests/` | 页面模型回归 |
| `Tests/LegadoReaderTests/` | iOS 阅读器与网页桥接测试 |
| `Tests/LegadoReaderUITests/` | 模拟器 UI 与阅读链路测试 |
| `App/Resources/` | 默认 TXT 目录规则、HTTP TTS 配置和第三方许可证 |
| `scripts/` | 自检与源码导出 |
## 验证命令
```sh
swift test --disable-sandbox
xcodebuild -project Legado.xcodeproj -scheme Legado \
-destination 'generic/platform=iOS Simulator' \
-derivedDataPath DerivedData CODE_SIGNING_ALLOWED=NO build
```
完整本地自检:
```sh
sh scripts/self-check.sh
```
首次运行可先在 Xcode 解析包;自检的 App 构建阶段固定使用已解析依赖。可用 `LEGADO_DERIVED_DATA_PATH` 和 `LEGADO_SOURCE_PACKAGES_PATH` 指定已有缓存。
阅读器测试在 Xcode 选择 `LegadoReaderTests` / `LegadoReaderUITests` Scheme 和具体模拟器运行。联网书源测试需要显式配置对应环境变量,默认核心回归主要采用自造响应,不能将其通过解读为所有线上书源均可用。
书源文件选择回归需要先在已启动的测试模拟器中准备文件共享应用(将下方 UUID 换成实际值):
```sh
LEGADO_TEST_DEVICE="模拟器 UUID"
sh scripts/prepare-source-import-fixture.sh "$LEGADO_TEST_DEVICE"
xcodebuild -project Legado.xcodeproj -scheme LegadoReaderUITests \
-destination "platform=iOS Simulator,id=$LEGADO_TEST_DEVICE" \
-only-testing:LegadoReaderUITests/RuleEditorUITests/testJSONFilePickerOffersOpenAndImportsSelectedFiles \
-collect-test-diagnostics never CODE_SIGNING_ALLOWED=NO test
```
独立测试应用只提供 `.json`、`.JSON` 和 `.txt` 样本,不会被打包进正式 App。此回归检查取消后重新打开、JSON 多选后的打开按钮、导入预检及最终保存。
## 兼容性验证
最低部署版本为 iOS 15.0。`App/Compatibility.swift` 为导航、分享、照片选择和弹窗提供兼容实现;新增系统 API 时需保留最低版本路径。调试构建可用 `-uiLegacyCompatibility` 启动参数在新系统上执行旧版界面分支,对应回归位于 `Tests/LegadoReaderUITests/`。这些测试不能替代 iOS 15 真机或模拟器实测。
搜索调度与缓存回归见 `Tests/LegadoCoreTests/SearchPerformanceTests.swift`,包括复杂书源限流和普通书源的及时执行;这些测试验证行为,不提供真实网络速度排名。
## 演示与公开截图
模拟器启动参数 `-uiDemo` 使用演示书架;`-uiDemoReader` 打开演示阅读页,`-uiDemoTab settings` 打开「我的」,`-uiDemoAbout` 打开关于页。部分演示入口仍保留 `settings` 参数名以兼容测试脚本。
提交截图前确认没有真实账号、个人书架或第三方付费正文。公开截图放在 `docs/images/`;`artifacts/`、构建缓存和原始测试日志仅供本地验证,已加入忽略清单。
## 导出源码
在多项目父仓库中开发时,可以运行以下命令导出本项目当前源码,排除父仓库历史、构建产物及签名文件:
```sh
python3 scripts/export-open-source.py /tmp/legado-ios-open-source
```
目标目录必须尚不存在。导出后检查内容,再用独立仓库管理;`.gitignore` 不会自动清理已经跟踪的文件。