# 在 iPhone 与 iPad 上运行真机实验室测试

> 在 iPhone 或 iPad 上运行真机实验室测试：下发文件的哈希比对、环境信息、干净状态、标签页与主屏应用两侧的步骤、结果记录与收尾。

import LabProvenance from '@components/lab/LabProvenance.astro';

在 iPhone 上跑一次真机实验室测试，要按公开流程操作，并在开始和结束时核对文件哈希。流程出自 2026-10-20 iOS 18.6.2 基线测试公开的[测试流程](https://openpwa.net/research/2026-10-ios18-home-screen-web-apps/data/PROTOCOL.md)，哈希比对的要求出自研究[报告](https://openpwa.net/research/2026-10-ios18-home-screen-web-apps/data/REPORT.md)第 13 节关于复现的说明。你需要 iPhone、Safari、大约一小时；带 `-WI` 后缀的测试还需要一台装有 Safari 的 Mac 和一根 USB 线（见[配置 Web Inspector](/zh/lab/guides/web-inspector/)）。

## 第一步之前

打开测试页之前，先做哈希快照、填好环境信息。

### 做测试前哈希快照

v1 测试页每个文件按实际下发字节计算的 SHA-256 列在 [SHA256SUMS.txt](https://openpwa.net/lab/harness/v1/SHA256SUMS.txt) 里。先对服务器发给你的内容算哈希，再和这份清单比对，就能知道服务器下发的是否仍是冻结的文件。这一步核对的是服务器，不是手机上已经打开的页面正在运行的那一份（见下一节）。在 Mac 或 Linux 的终端里运行：

```sh
curl -s https://openpwa.net/lab/harness/v1/SHA256SUMS.txt | grep -v '^#' |
while read -r expected file; do
  actual=$(curl -s --compressed "https://openpwa.net/${file%index.html}" | shasum -a 256 | cut -d' ' -f1)
  if [ "$actual" = "$expected" ]; then echo "ok       $file"; else echo "CHANGED  $file"; fi
done | tee pre-run-snapshot.txt
```

文件与冻结版本一致时，输出为 `ok`。出现 `CHANGED` 说明下发的文件不是冻结时的那一份，把它记进笔记，再去 [v1 测试页说明](/zh/lab/harness/v1/)查有没有勘误。如果还要用 demo，把你加载的 `/demo/` 页面的哈希也写进同一个文件；demo 不冻结，这些哈希要和笔记放在一起。

### 下发的文件可能在测试中途改变

报告要求复测者把下发的文件和记录的哈希比对，因为实验室的页面可能改动。2026-10-20 测试期间，约 08:28 UTC 的一次部署改了 `lab.js`，而已经打开的页面继续运行缓存里的旧文件，这个文件的缓存时间是 `max-age=14400`（第 10 节 Harness drift 一条）。所以服务器上的哈希变了，并不能说明页面跑的是哪一份。结束时再做一次快照；哪一行变了，记下你发现的时间，之后的读数按两份文件都有可能来处理。

### 填写环境信息

把环境信息模板复制到笔记里，按设备和测试场次分别填写。查型号号码，打开「设置 > 通用 > 关于本机」，轻点「型号号码」右边显示的部件号码（[Find the model number of your iPhone, iPad, or iPod touch](https://support.apple.com/en-us/106343)，apple.com）；Apple 在 [Identify your iPhone model](https://support.apple.com/en-us/108044)（apple.com）里列出了各个型号。

```text
- date / time / time zone:
- device: <marketing name> (<model number>)
- OS: iOS <version> (<build>)  [Settings > General > About > iOS Version]
- release channel: release | public beta | developer beta | RC
- Safari: <version>; user agent from T0-WI: <navigator.userAgent>
- device language / region:
- Safari feature flags changed from default: none | <list>
- content blockers / VPN / iCloud Private Relay: <on or off>
- Mac for Web Inspector: <macOS version, Safari version> | not used
```

字段名保持英文，方便和公开数据逐项对照。Safari 的功能标志（「设置 > App > Safari > 高级 > 功能标志」）不要动；已经不是默认值的，列在这段里。

## 运行测试

按[测试列表](/zh/lab/tests/)的顺序往下做，这样不会重复安装同一个应用。测试页写明了预期结果及其出处，点之前先读一遍。

1. 测试要求干净状态时，先长按该测试的主屏图标，选**移除 App**，再选**删除 App**。在「设置 > App > Safari > 高级 > 网站数据」里清除该网站的数据（测试流程写明，更早的版本在「设置 > Safari > 高级」）。「网站数据」这一项，Apple 在 [Delete your Safari history, cache, and cookies on iPhone](https://support.apple.com/en-us/105082)（apple.com）里有说明。
2. 在 Safari 标签页里打开测试页，例如实验室应用 [/lab/device-tests/](/lab/device-tests/)，或 T7 权限测试应用 [/lab/device-tests/t7/perm/](/lab/device-tests/t7/perm/)。读面板上的结果；`-WI` 测试则从 Mac 上读取页面。
3. 轻点「共享」，选**添加到主屏幕**，除非测试另有要求，名称保持预填的样子。测试要求时，给添加面板截一张图。
4. 从图标启动应用，不要从 Safari 里打开，然后再读一次。2026-10-20 的测试里，带 manifest 的主屏 Web 应用运行在独立进程中，而既没有 manifest 也没有图标的页面从主屏打开后仍在 Safari 里运行（[主要发现](https://openpwa.net/research/2026-10-ios18-home-screen-web-apps/data/FINDINGS.md)第 1 条），所以标签页和应用两侧的结果分开记录。
5. 按测试流程记录结果，先填结果（`as-expected`、`differs`、`could-not-run` 或 `incomplete`，后两项须说明原因）。再用一两句写观察，屏幕文字按界面语言原样引用；填上测试要求的数值、截图文件名和用时。
6. 五分钟就停。超时的测试记为 `incomplete` 并写明原因，然后继续下一个。

一次只问一件事，并且准确说出屏幕上的元素（比如「显示时间、信号和电量的那一条」）。基线测试里有几次口头报告答非所问，核对读数和截图后才发现，实验笔记逐条记了下来。

## 证据与隐私

截图按[命名与打码指南](/zh/lab/guides/screenshots-and-naming/)处理。保存或发送任何东西之前：

- 推送订阅只记录端点的主机名，不记录端点路径和密钥（[lab.js](https://openpwa.net/lab/device-tests/lab.js) 和 [T7 权限应用](https://openpwa.net/lab/device-tests/t7/perm/)只打印主机名，例如 `web.push.apple.com`）；
- 其他 App 的通知、联系人、运营商名称、位置和其他网站的标签页标题，裁掉或涂掉；
- 不留任何标识符：序列号、UDID、Apple 账户、手机号都不要出现。

## 收尾

再做一次哈希快照，和第一次的比对；有变化的行按上文的办法记下。记下哪些测试跑过、哪些与预期不同、哪些没能跑。给 OpenPWA 发结果的步骤见[提交测试结果](/zh/lab/guides/send-results/)。

## iPad

已发布的结果中没有 iPad，2026-10-20 的测试也没有覆盖 iPadOS。[测试流程](https://openpwa.net/research/2026-10-ios18-home-screen-web-apps/data/PROTOCOL.md)写明 iPadOS 的「添加到主屏幕」界面和多任务窗口与 iPhone 不同，计划在 iPhone 测试的同一周跑一小部分 iPad 测试，引用时系统写作 `iPadOS <version>`。iPad 要单独填一份环境信息。

<LabProvenance locale="zh" />