feat(mobile): Android support behind platform seams

Draft
KI
3d ago
+5042-1311

What

Android support for apps/mobile, plus the setup to build, verify and ship it. iOS behaviour is unchanged.

  • Platform seams. Every iOS-only API (8 local Expo modules, @expo/ui/swift-ui, Sign in with Apple) sits behind a typed contract: X.types.ts + X.ios.tsx (native) + X.tsx/X.android.tsx. Metro picks the file per platform. Convention in apps/mobile/AGENTS.md.
  • Android implementations. React Native composer, sheet header and glass fallbacks, real fallbacks for alert-prompt / symbol-button / title-press / forward-swipe, native Google sign-in via Credential Manager (modules/google-credential; no Apple button on Android), agent card as an ongoing notification (Kotlin), Chinese Intl fix for Android Hermes.
  • Dev setup. apps/mobile/scripts/android-dev.sh + .agents/skills/mobile-android-verification.
  • Store. play-store.config.js, scripts/play-listing.ts, icon and feature graphic, and plans/20261029-android-launch-checklist.md.

⚠️ The last commit starts an iOS release

chore(mobile): Android release config changes app.config.ts, eas.json, apps/mobile/.gitignore and app-identity.ts, which feed the iOS runtime fingerprint (c1401836… → 965366c0…). Merging it makes deploy.yml build and submit a new iOS binary, and installed iOS builds stop taking OTA updates until they update. Drop that commit to merge the Android code dark; every commit before it leaves the fingerprint unchanged.

Verified

  • bun test (apps/mobile): 255 pass. Biome clean. tsc: no new errors (188 pre-existing, from an unbuilt @superset/host-service/router).
  • Metro bundles for iOS and Android: iOS resolves every .ios binding; the Android bundle has no @expo/ui/swift-ui or expo-apple-authentication.
  • On the Pixel 2 / API 33 emulator: boot, sign-in screen, Home, workspace, composer, sheets and the agent card were each checked by the step agents (screenshots in their reports). android-dev.sh ran end to end from a clean worktree.

Not verified

  • A real GitHub or Google login round trip on Android (needs the Google Cloud Android OAuth clients; in progress).
  • Several sheets (Page preview/comments/share, voice, PR checks, line comment).
  • Push notifications: planned in plans/20261029-android-agent-card.md, not implemented.

Summary by cubic

Adds Android support to apps/mobile with iOS behavior unchanged. All iOS-only APIs (@expo/ui/swift-ui, Sign in with Apple, local Expo modules) now sit behind typed contracts picked by Metro's platform extensions, and Android gets real implementations: a React Native composer, sheet header, glass fallbacks, alert prompts, forward-swipe, App Links, native Google sign-in via Credential Manager, the agent card as an ongoing notification, and a Chinese Intl fallback for Hermes. Also adds dev setup (android-dev.sh), a verification skill, Play Store listing, and a launch checklist.

⚠️ Merging this branch ships a new iOS build. The final commit, chore(mobile): Android release config, changes app.config.ts, eas.json, apps/mobile/.gitignore, and app-identity.ts, all of which feed the iOS runtime fingerprint. Merging it triggers deploy.yml to build and submit a new iOS binary, and installed iOS builds stop taking OTA updates until they update. Drop that commit to merge the Android code without an iOS release.