Skip to content

iOS: Add universal links for private session invites - #232

Merged
SloMR merged 10 commits into
mainfrom
feat/ios/add-aasa
Jul 8, 2026
Merged

iOS: Add universal links for private session invites#232
SloMR merged 10 commits into
mainfrom
feat/ios/add-aasa

Conversation

@SloMR

@SloMR SloMR commented Jul 8, 2026

Copy link
Copy Markdown
Owner

Summary

Adds iOS universal link support so https://pastepoint.com/private/<code> invite links open PastePoint and join the matching private session directly. This also serves the Apple App Site Association file from the web/nginx stack and bumps client version policy for the new release.

What changed

Universal links

  • Add the Apple App Site Association file for /private/* links.
  • Include .well-known/apple-app-site-association in the Angular build assets.
  • Copy the AASA file into the nginx image.
  • Serve the AASA file from nginx with application/json.
  • Add the iOS Associated Domains entitlement for applinks:pastepoint.com.

iOS

  • Handle incoming universal links with .onOpenURL.
  • Parse and validate private session invite URLs before joining.
  • Join the private session from a universal link using the same connection flow as manual joins.
  • Ignore links for the already-active private session.
  • Close settings and refresh rooms/user state after joining from a link.
  • Skip a redundant reconnect on the first network path monitor update.

Nginx / static serving

  • Add an explicit route for /.well-known/apple-app-site-association.
  • Simplify static try_files behavior for robots.txt and sitemap.xml.

Version policy / bumps

  • iOS → 0.10.0
  • web → 0.21.0
  • server policy minimum/latest:
    • iOS → 0.10.0
    • web → 0.21.0
  • Set the iOS update gate URL to the real App Store URL.

SloMR added 10 commits July 8, 2026 22:46
- Add `public/.well-known/apple-app-site-association` declaring `KH5NHCFH44.com.pastepoint.ios` for `/private/*` paths, so the installed iOS app claims private-session invite links.

- Add an explicit `angular.json` assets entry for `public/.well-known`; Angular's default `public` glob skips dot-folders, so the file would otherwise never reach the build output.
- Add an exact-match `location = /.well-known/apple-app-site-association` serving from the browser dist with `default_type application/json`; the exact match outranks the `location ~ /\.` hidden-path block below it, so the file stays reachable for iOS universal links.

- Drop the redundant self-referencing fallback from the `robots.txt` and `sitemap.xml` blocks; in an exact-match `location =`, `$uri` already equals that path, so `try_files $uri =404` is equivalent and clearer.
- COPY `.well-known/apple-app-site-association` from the build stage into the nginx browser dist; the stage copies only named static files, not the whole dist, so the AASA would otherwise be missing from the served image.
- Add `PastePoint.entitlements` declaring `applinks:pastepoint.com` so the app claims private-session invite links.

- Wire `CODE_SIGN_ENTITLEMENTS` to it in both app build configs; automatic signing adds the Associated Domains capability to the App ID on the next device/archive build.
- Add `handleIncomingURL` — validates an invite URL via `AppEnvironment.privateSessionCode(from:)` + `SessionService.isValidSessionCode`, no-ops if already in that session, then mirrors the manual `SettingsJoinPrivateView` join sequence.

- Wire it from an `.onOpenURL` handler in `ChatEventHandlers`.

- Loosen `setSettingsVisible` from `private` to `internal` so the `ContentView+Handlers` extension can call it from a separate file.
- Seed `lastPathStatus` to `.satisfied` so the initial `NWPathMonitor` callback on a normal cold start is not treated as a drop -> restore transition. The redundant reconnect it triggered was already de-duped by the connect guards, so this is behavior/log hygiene.
- Update the minimum and latest client version requirements to 0.10.0 for iOS and 0.21.0 for Web across all server configurations (development, docker-dev, and production).
- Replace the `id000000000` placeholder in the iOS update-gate `url` with the real App Store ID `6788860511` now that the app record exists; the link resolves to a live listing once the app is published.
@SloMR SloMR self-assigned this Jul 8, 2026
@SloMR SloMR added enhancement New feature or request nginx Changes made for the Nginx configuration labels Jul 8, 2026
@SloMR SloMR added this to PastePoint Jul 8, 2026
@SloMR SloMR added docker Modification for docker assests Add or remove assests bump version Bump the project version web Any Web related things labels Jul 8, 2026
@SloMR
SloMR merged commit fae8efd into main Jul 8, 2026
27 checks passed
@SloMR
SloMR deleted the feat/ios/add-aasa branch July 8, 2026 20:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

assests Add or remove assests bump version Bump the project version docker Modification for docker enhancement New feature or request nginx Changes made for the Nginx configuration web Any Web related things

Projects

Status: done

Development

Successfully merging this pull request may close these issues.

1 participant