···11+# Aesthetic Computer iOS — Progress
22+33+Per-submission notes for the iOS app and iMessage extension in this directory.
44+Append a new section on top for each App Store build.
55+66+---
77+88+## 1.1 (2) — 2026-04-23
99+1010+First update since 1.0 (1) shipped as RC4 in late 2024. Focus: per-device push
1111+notifications, replacing the slow topic-broadcast model.
1212+1313+### Shipped
1414+- **FCM device-token bridge.** `MessagingDelegate` hands the token to the WebView
1515+ via `evaluateJavaScript(window.iOSReceivePushToken(...))` with retry until the
1616+ AC runtime is ready. The runtime POSTs `/api/register-push-token` against the
1717+ logged-in user so the backend can target individual devices.
1818+- **`tell` command.** `tell @handle message` from the AC prompt calls `/api/tell`,
1919+ which writes to the `tells` Mongo collection and sends a direct-token FCM push
2020+ (sub-second latency vs. minutes for topic broadcasts). Deliberately one-way
2121+ for v1 — no reply UI, no thread.
2222+- **Firebase iOS SDK 10.19 → 11.15.** 10.19's prebuilt xcframeworks were missing
2323+ `CFBundleShortVersionString` / `MinimumOSVersion` in their Info.plists, which
2424+ Apple's submission validator began rejecting in late 2024. Dropped the
2525+ now-removed `FirebaseAnalyticsSwift` product (merged into `FirebaseAnalytics`
2626+ in 11.x).
2727+- **Account-deletion cascade.** `delete-erase-and-forget-me` now clears
2828+ `push-tokens` and `tells` alongside existing `moods` cleanup.
2929+3030+### Wiring summary
3131+- iOS: `apple/aesthetic.computer/aesthetic_computerApp.swift` — `deliverPushTokenToWebView`
3232+- Runtime: `system/public/aesthetic.computer/bios.mjs` — `window.iOSReceivePushToken`,
3333+ `iOSTryRegisterPushToken`, `iOSUnregisterPushToken`
3434+- Runtime: `system/public/aesthetic.computer/boot.mjs` — login-drain + logout-unregister hooks
3535+- Backend: `system/netlify/functions/register-push-token.mjs`, `tell.mjs`
3636+- Prompt: `system/public/aesthetic.computer/disks/prompt.mjs` (`tell` handler)
3737+3838+### Build/submission notes
3939+- Bundle IDs: `aesthetic.computer` (main), `aesthetic.computer.aesthetic` (iMessage ext).
4040+- Team: `FB5948YR3S`. Apple ID for distribution: `me@jas.life`.
4141+- App-specific password lives at `aesthetic-computer-vault/apple/app-specific-password.env.gpg`.
4242+- CLI archive + export + upload works via `xcodebuild archive -allowProvisioningUpdates`
4343+ → `xcodebuild -exportArchive` → `xcrun altool --upload-app`. See `/tmp/ac-ios-*.log`
4444+ from this session for reference commands.
4545+- Submit-for-review (What's New, export compliance, etc.) still manual in App Store
4646+ Connect — requires an ASC API key `.p8` to automate. Drop one in
4747+ `aesthetic-computer-vault/apple/appstoreconnect/` next time to close the loop.
4848+4949+### Known gaps / candidates for 1.2
5050+- `tells` inbox piece — right now the push notification *is* the UI. A
5151+ `tells.mjs` piece + deep-link from the notification tap-through (Swift already
5252+ forwards `userInfo["piece"]` → `iOSAppSwitchPiece`) would show the conversation
5353+ log.
5454+- `mood` notifications still go via FCM topic (`mood.mjs:346`). Convert to
5555+ per-follower direct sends once a follower graph exists.
5656+- App Store screenshots are stale — proposal: extend `oven/` with an `app-shots.mjs`
5757+ driving `xcrun simctl` across the required device sizes to auto-capture a
5858+ curated set of pieces.
5959+- ASC API key for unattended "Submit for Review" (see above).