隐私与数据边界

Apple 本地 AI 应用隐私清单审核

核对最终 Apple bundle 内应用与 SDK 的静态隐私声明,不把 plist 当成网络监控或法律结论。

审核状态: 内容已校验;中文稿供用户审核 · 2026-10-05 · Fact IDs: ANDROID-PRIVACY-01, PRIVACY-01

直接回答

隐私清单是随构建打包的声明文件,不是实时网络监控器。Apple 将 PrivacyInfo.xcprivacy 描述为属性列表,记录应用或第三方 SDK 收集的数据,以及适用平台上的 required-reason API。一个归档可能含多个 app target 和 SDK 清单,Xcode 也可生成汇总隐私报告。报告有助于审核,但不能证明每个条件功能或运行时请求都已覆盖。PRIVACY-01 和 ANDROID-PRIVACY-01 支持按证据检查边界;本文仅讨论 Apple bundle 审核,不暗示 Cove 已发布 Apple 应用或有完整清单。 从确切归档开始。记录 Xcode 版本、构建配置、应用目标、扩展、内嵌框架、包锁文件和归档身份。Debug 归档、模拟器构建与分发归档可能包含不同目标和依赖。应检查最终归档而非只看源码树,按 bundle 路径与所属目标列出每份 PrivacyInfo.xcprivacy。文件缺失只能说明所查 bundle 未找到该声明,不能证明应用没有访问或传输数据。 检查每份清单中的数据类别、用途、tracking 设置与域名、required-reason API 条目,并映射到实际使用它的代码或 SDK。Apple 区分应用和 SDK 责任,并要求理由声明对应真实用途。不能仅因代码搜索出现某符号,就照抄供应方示例理由。如果 SDK 有自己的清单,应作为依赖证据保留,并核实归档是否包含对应版本。 先解析依赖再比较声明。记录包身份、版本、来源、源码或二进制分发、传递路径、适用时的签名信息及供应方文档修订。清单可能缺失、过期、无效,或与更新后的 SDK 不一致;即使有效也仍只是声明。检查归档是否有多个 SDK 副本、可选模块、扩展、插件或其他可执行文件;它们也可能带来额外声明或 required-reason API 使用。 为每项声明建立映射:清单路径、所属目标、数据类别或 API 理由、实现组件、功能触发、构建条件、审核者和未决问题。与源码搜索和构建设置比较。如果声明了 API 却找不到调用,应继续检查生成代码、框架行为、反射和条件编译,再修改清单。如果代码疑似使用 required-reason API 却没有对应声明,应保留差异并指派负责人。 不能把静态报告扩大为对所有网络目的地的结论。tracking 域名条目在 Apple 定义下有特定含义,不是通用端点清单。数据类别声明也不能单独说明每条路径是否关联身份或保留数据。Apple 清单结果不能套用到 Android 或 Google Play;应写明平台、目标和归档版本。 审核记录应包括归档身份、日期、Xcode 与配置、目标、SDK 版本、清单目录、声明到代码的链接、差异及独立运行测试。准确说明归档声明了什么、源码审核观察到什么。不能声称清单证明信息没有离开设备或证明法律合规。无法解释的声明或路径标为未知并指派跟进。SDK、目标、构建设置或隐私功能变化后重审。这样能检查特定版本的声明文件,而不把声明与实际观察行为混为一谈。

Apple 归档中出现新的 SDK 隐私清单

依赖更新后,审核者收到 Apple 分发归档。里面同时有新 SDK 的隐私清单和应用目标清单。审核者要核对声明与打包代码是否相符,但不能假设 plist 已描述所有运行时请求。

决策

检查确切归档与 SDK 版本,映射声明的代码和归属;需要时另行测试运行时行为。

预期结果

审核记录只涵盖 bundle 声明和未决问题,不声称完整验证运行时隐私。

需要收集的证据

只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:

  • PRIVACY-01:本地推理不证明所有数据路径均本地
  • ANDROID-PRIVACY-01:完整访问与共享边界仍需检查

隐私声明需要数据清单和流量证据;“本地模型”标签本身不是证明。

实施流程

  1. 固定归档身份与目标. 记录 Xcode、构建配置、应用目标、扩展、框架、依赖锁文件、归档身份、日期及发行渠道。
  2. 盘点 bundle 内的清单. 找出每份 PrivacyInfo.xcprivacy,记录 bundle 路径、应用或 SDK 所属方、版本与签名关系。
  3. 将声明映射到实现所有者. 对每项数据类别、用途、tracking 域名和 required-reason API 找到负责的功能或依赖路径。
  4. 解决缺漏和不一致. 对照依赖版本、源码搜索、生成代码和条件目标;无法解释的差异保留待办,并记录处理状态、负责人及重新归档的验证结果。
  5. 区分静态声明与运行证据. 对行为单独执行网络或存储测试,并与归档声明审核分开记录功能及受测范围、抓取工具和未覆盖路径。

让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。

验收标准

  • 记录归档、构建配置、bundle 路径、清单所有者和所核对的 SDK 版本。
  • 每项声明都有实现证据映射;否则明确保留未知状态并指派负责人。
  • 结论说明清单声明,不声称覆盖全部运行时流量或法律合规。

决策对照表

维度选择或证据解读方式
源码清单打包前检查文件便于作者审核,但可能与最终归档或内嵌目标不同。
归档隐私报告检查产品中打包的声明能看到静态元数据,不是运行时网络证据。
运行时网络测试触发功能并查看请求覆盖被测动作,但不能替代静态清单与 API 理由检查。

需要避免的失败模式

  • 只看源码目录,不检查最终归档
  • 照抄 SDK 示例理由但不核对调用
  • 把静态声明说成全部运行时证据

还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。

最小复现记录

层级记录内容
设备厂商、型号、芯片、内存档位、操作系统版本
软件应用版本和 Git 提交号
模型系列、变体、版本、格式、文件长度、摘要、量化方式
运行时名称、版本、请求后端及实际后端证据
工作负载样例版本、输入摘要、提示词摘要、输出策略
结果完成、失败、取消、回退及保护隐私的诊断信息

发布检查表

  • ☐ 主要搜索问题已回答,且没有未经支持的数字。
  • ☐ 所有模型文件和运行时版本均已固定。
  • ☐ 代表性任务和失败处理策略均有说明。
  • ☐ 生命周期、取消、清理和回退均已测试。
  • ☐ 用户内容与网络边界均有说明。
  • ☐ 结论只适用于被记录的配置。
  • ☐ 新增测试结果时链接到原始方法或证据。

来源与相关证据

中文部署与排错专题见。奇连 AI 端侧专题。

常见问题

有效隐私清单能证明应用不会发送数据吗?

不能。它是声明制品。运行时路径仍需分别测试,并注明归档版本、触发功能、网络范围、未覆盖协议限制、观察工具版本和审核日期。

应把 SDK 清单复制到应用目标吗?

不能假定如此。检查归档和 SDK 文档,确认每份声明归属哪个目标,以及 Xcode 是否已打包该版本的 SDK 文件,并保留路径、版本、目标及签名关联证据。

审核清单就能确认符合 App Store 政策吗?

不能单独确认。需要对照实现证据,并由合格负责人审核未解决的数据行为、适用平台规则、发行目标及每个未决事项的责任人。