Skip to content

Show install progress and retry guidance / 显示安装进度与重试提示 - #2

Merged
icodesign merged 3 commits into
icodesign:mainfrom
MikeChongCan:codex/install-progress-feedback
Sep 16, 2026
Merged

icodesign merged 3 commits into
icodesign:mainfrom
MikeChongCan:codex/install-progress-feedback

Conversation

@MikeChongCan

@MikeChongCan MikeChongCan commented Sep 8, 2026 •

Copy link
Copy Markdown
Contributor

The install page now responds immediately when users tap Install, shows package transfer progress, and offers confirmation, interruption and retry guidance.

安装页现在会在点击 Install 后立即反馈,显示安装包传输进度,并提供系统确认、中断和重试提示。

Changes / 变更

  • Each page links its iOS manifest or Android download to an authenticated, non-cacheable status endpoint. Native install/download links still work with JavaScript disabled.

    每个页面通过授权令牌关联 iOS manifest 或 Android 下载与不可缓存的状态接口;关闭 JavaScript 后,原生安装/下载链接仍可使用。

  • Range progress deduplicates repeated bytes and includes data sent before an interruption. A resumed suffix can finish the displayed transfer independently of successful-response quota accounting. A separate activity counter keeps active retransmissions from falsely appearing stalled.

    范围进度会去重并保留中断前已传输的数据;续传剩余部分后,页面可正确显示传输完成,成功下载次数仍按原有规则计算。独立的传输活动计数避免将重传误判为停滞。

  • An expired or evicted iOS page grant can obtain a fresh manifest grant while the share remains available. Expired shares and stale package/status tokens remain blocked. The server keeps final status available for five seconds after the download limit is reached.

    分享仍有效时,iOS 旧页面中过期或被清理的令牌可在请求 manifest 时换取新令牌;已过期分享及旧的下载/状态令牌仍被拒绝。达到下载次数限制后,服务器保留五秒最终状态查询时间。

Progress measures bytes sent by the server and may run ahead of the device because of tunnel buffering. Transfer complete does not mean installation succeeded; users are directed to the Home Screen or Android downloads.

进度表示服务器已发送的字节,隧道缓冲可能使其领先于设备实际接收量。传输完成不代表安装成功;页面会提示用户检查主屏幕或 Android 下载目录。

Validation / 验证

Local checks passed / 本地验证通过:

  • cargo test --locked: 151 tests / 151 项测试。
  • node --test tests/install-progress.test.mjs: 11 tests / 11 项测试。
  • Rust formatting, JavaScript syntax and Clippy with warnings denied / Rust 格式、JavaScript 语法及 Clippy 检查(警告视为错误)。
  • macOS arm64 Release build and version smoke test / macOS arm64 Release 构建及版本命令验证。

Physical-device installation, a live tunnel and Intel builds remain unverified. / 尚未验证真机安装、真实隧道和 Intel 构建。

QA screenshots / QA 截图

Captured during earlier local WebKit QA using a synthetic IPA fixture. These illustrate browser feedback; physical-device installation remains unverified.

截图来自此前使用测试 IPA 的本地 WebKit QA,用于展示网页反馈;真机安装仍未验证。

Confirmation / 确认提示 Transfer progress / 传输进度
Immediate confirmation feedback / 点击后的确认提示 Actual transfer progress at 49 percent / 实际传输进度 49%

Human QA / 人工验证步骤

  1. Share a signed IPA over HTTPS, open it in Safari on a provisioned iPhone, tap Install and confirm the system prompt. Check immediate feedback, transfer progress and the app on the Home Screen.

    通过 HTTPS 分享已签名 IPA,在已配置的 iPhone Safari 中打开,点击 Install 并确认系统提示;检查即时反馈、传输进度及主屏幕上的应用。

  2. Cancel the prompt, interrupt a transfer, then retry or resume. Verify helpful guidance, accurate progress and no false installation result. An active retry of already-sent data should not show a stall warning.

    取消系统提示、中断传输,再重试或续传;确认提示和进度正确且不误报安装结果。正在重传已有数据时,不应误报停滞。

  3. Keep an iOS page open beyond its 30-minute progress session, then tap Install while the share is still available. Verify native handoff still works; reload the page for a new tracked attempt. Also check native links with JavaScript disabled and an Android APK download.

    保持 iOS 页面打开超过进度会话的 30 分钟有效期,在分享仍有效时点击 Install;确认仍可触发原生安装,刷新页面可跟踪新尝试。同时验证关闭 JavaScript 的原生链接及 Android APK 下载。

  4. Repeat with --max-downloads 1; confirm final status is available for five seconds and new download attempts are blocked.

    使用 --max-downloads 1 重复测试;确认最终状态可查询五秒,且新的下载尝试被拒绝。

Track package transfer state for each install page, preserve native install
links and download quota accounting, and show actionable waiting, progress,
interruption, and completion feedback. Include regression tests and WebP QA
screenshots.

cosigned by OpenAI Codex at M1 Max
cosigned by OpenAI Codex at M1 Max
Separate observed transfer completion from successful-response quota accounting.
Keep retry liveness active while retransmitting already-covered bytes.
Refresh stale iOS manifest grants without reviving package or status access.
Add regression coverage and document resumed and stale-page behavior.

cosigned by OpenAI Codex at M1 Max
@MikeChongCan MikeChongCan changed the title Show per-attempt install progress and retry guidance Show install progress and retry guidance / 显示安装进度与重试提示 Sep 8, 2026
@icodesign

Copy link
Copy Markdown
Owner

Awesome. Thanks!

@icodesign
icodesign merged commit 231895a into icodesign:main Sep 16, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants