本目录定义 Apple Swift SDK 与 Stellar 服务必须保持一致的业务语义。各 Apple 设备族不应自行改变字段含义、状态转换、冲突规则或错误分类。
MUST:SDK 与服务端必须一致,否则会造成数据或协议不兼容。SHOULD:原则上保持一致,平台限制下可以偏离,但需记录原因。MAY:平台可自行决定。
| 项目 | 约定 |
|---|---|
| 标识符 | 小写 UUID 字符串;服务端已有稳定 ID 时保留原值并注明命名空间 |
| 时间 | Unix epoch 毫秒,字段后缀 _at_ms |
| JSON 字段 | snake_case |
| 布尔值 | JSON true / false,不使用 0 / 1 |
| 可空值 | 缺失表示“未提供”,null 表示“明确清空” |
| 枚举 | 未知值必须可保留或映射为 unknown,不得导致整条记录解码失败 |
| 版本 | 可持久化和可同步对象必须携带 schema_version |
| 分页 | 游标分页;请求 cursor、limit,响应 items、next_cursor |
所有公开异步接口 MUST 返回平台惯用的错误形式,并能映射到以下类别:
| 代码 | 含义 | 默认处理 |
|---|---|---|
cancelled |
调用方主动取消 | 不重试 |
unauthorized |
访问令牌无效且无法刷新 | 转入重新登录 |
forbidden |
已登录但无权限 | 提示用户检查授权 |
network_unavailable |
当前网络不可用 | 等待网络恢复 |
rate_limited |
服务端限流 | 遵循 retry_after_ms |
remote_unavailable |
NAS、网盘或服务暂不可用 | 指数退避 |
credential_required |
缺少或失效的媒体源凭据 | 请求用户重新连接 |
credential_protection_unsupported |
客户端不支持该凭据保护模式 | 保留远端记录,升级客户端;不得降级覆盖 |
invalid_configuration |
配置字段无效 | 停止任务并显示具体字段 |
storage_failure |
本地数据库或安全存储失败 | 停止写入并保留诊断信息 |
parse_failure |
文件名或远程数据无法解析 | 进入待人工匹配队列 |
metadata_not_found |
元数据源无匹配结果 | 保留本地媒体记录 |
conflict |
同步冲突无法自动合并 | 进入冲突队列 |
unknown |
未分类错误 | 记录原始原因,有限重试 |
错误对象至少包含 code、面向开发者的 message、可选 retry_after_ms、cause 和追踪 ID。SDK 不应把密码、令牌、完整远程 URL 或包含凭据的响应写入日志。
- JSON Wire Format v1
- OAuth 与会话
- 远程媒体配置同步
- 凭据存储与同步
- 扫描、解析与海报墙
- 本地元数据与技术探测 v1
- 元数据候选与匹配 v1
- SQLite、本地状态与同步
- SQLite v1 schema manifest
- SQLite schema migrations
详细的数据表和扫描状态机见 Infuse 调研及自有扫描器设计。
fixtures/ 保存 Apple SDK 与服务端共同执行的输入与期望输出。当前包括 wire-format-v1.json、gateway-oauth-v1.json、source-config-sync-v1.json、credential-payload-v1.json、filename-parser-v1.json、remote-enumeration-v1.json、scanner-state-v1.json、metadata-intake-v1.json、metadata-matching-v1.json、metadata-match-persistence-v1.json、tmdb-provider-v1.json 和 poster-wall-v1.json;fixture 变更即合同变更,必须由对应规范或 ADR 解释。TMDB 原始录制不得提交,必须先通过 tools/metadata/sanitize_tmdb_fixture.py 清洗。