feat(mobile): Android support behind platform seams
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 inapps/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, andplans/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
.iosbinding; the Android bundle has no@expo/ui/swift-uiorexpo-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.shran 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.