Skip to content

iOS: add one-tap OTA install for ad-hoc builds#4791

Open
pballart wants to merge 2 commits into
mainfrom
pau/ios-adhoc-ota-install
Open

iOS: add one-tap OTA install for ad-hoc builds#4791
pballart wants to merge 2 commits into
mainfrom
pau/ios-adhoc-ota-install

Conversation

@pballart
Copy link
Copy Markdown
Contributor

@pballart pballart commented May 8, 2026

Task/Issue URL: https://app.asana.com/1/137249556945/project/1214200115953388/task/1214633075025736?focus=true
Tech Design URL:
CC:

Description

Adds an over-the-air install page to the iOS ad-hoc build workflow so testers with a UDID-registered iPhone can install the build by tapping a single Safari link, instead of going through AirDrop / Apple Configurator. The workflow now uploads a manifest plist and a small install HTML alongside the IPA, and the success Asana comment + GitHub step summary surface the install URL.

Testing Steps

  1. Run the iOS Ad-Hoc Build workflow from Actions on this branch (any build type — Alpha is fine — and pass an Asana task URL).
  2. When the run finishes, open the workflow summary and confirm there's an "Install on iPhone" link, and that the Asana task got a comment with both the install URL and the IPA URL.
  3. On a UDID-registered iPhone, open the install URL in Safari and tap Install on iPhone — the iOS install sheet should appear and the build should install. Open the same URL in Chrome / Slack / an in-app webview and confirm the install button is hidden and the "open in Safari" warning is shown instead.

Impact and Risks

Low — release infra only, no app code changes.

What could go wrong?

Most plausible regression: the per-build-type bundle ID in the workflow drifts from the IPA's actual bundle ID, which would surface on device as a generic "Unable to install". The mapping is set explicitly in the new workflow step (Alpha / Release / Experimental) and matches the existing IPA naming.


Internal references:

Definition of Done | Engineering Expectations | Tech Design Template


Note

Medium Risk
Modifies the iOS ad-hoc release workflow to generate additional public artifacts and relies on correct per-build-type bundle ID mapping; misconfiguration could break installs without affecting app code.

Overview
Adds one-tap over-the-air installation for iOS ad-hoc builds by generating an OTA manifest.plist and a small install.html page alongside the uploaded IPA.

Updates the ios_adhoc.yml workflow to render these templates (via a new .github/templates/render.py helper), upload them to the same S3 directory as the IPA, and surface the resulting install link in both the GitHub run summary and the Asana success comment.

Reviewed by Cursor Bugbot for commit fd06144. Bugbot is set up for automated code reviews on this repo. Configure here.

Adds a per-build manifest.plist and install.html alongside the existing
IPA upload in ios_adhoc.yml so testers can install ad-hoc builds on
their iPhone with a single Safari tap (via itms-services://) instead
of sideloading the .ipa through Xcode or Apple Configurator.

The Asana comment posted by the workflow now links the install page,
and the GitHub Actions step summary surfaces it too. Signing, the S3
bucket layout, public-read ACL, and CloudFront distribution are all
unchanged — devices already enrolled in the ad-hoc provisioning
profile install with no further setup.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit c882f50. Configure here.

Comment thread .github/workflows/ios_adhoc.yml Outdated
The manifest URL is already embedded in the install HTML; the Report
success step never read MANIFEST_URL.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

1 participant