Expo (React Native) WebView shell app for tycoon.us.
Ships a native iOS + Android app that loads the Tycoon web app in a full-screen WebView.
- Expo SDK 51 (managed workflow)
- expo-router v3 for file-based navigation
- react-native-webview 13.x — full-screen WebView
- EAS Build for cloud builds (iOS + Android)
npm install -g expo-cli eas-cli
npm install
npx expo start
Scan the QR code with Expo Go on your iPhone or Android device.
Note: react-native-webview is a native module. On Expo Go you can test it
but for a fully production build you need a development build or EAS build.
# iOS simulator npx expo run:ios # Android emulator npx expo run:android
The default icons are dark placeholders. To regenerate from the SVG logo:
# macOS: brew install imagemagick # Linux: apt-get install imagemagick node scripts/generate-assets.js
eas login
Edit app.json → replace YOUR_EAS_PROJECT_ID with your actual EAS project ID.
eas init
This automatically sets the projectId in app.json.
# iOS (IPA for TestFlight) eas build --platform ios --profile preview # Android (APK for direct install) eas build --platform android --profile preview # Both at once eas build --platform all --profile preview
# Production builds (App Store / Play Store)
eas build --platform all --profile production- Apple Developer account — developer.apple.com
- App Store Connect app record created for bundle ID
com.tycoon.app - Fill in
eas.json→submit.production.ios:appleId— your Apple ID emailascAppId— the App Store Connect numeric app IDappleTeamId— your 10-character team ID
# After a production build: eas submit --platform ios --profile production # Or build + submit in one step: eas build --platform ios --profile production --auto-submit
- Google Play Console account with the app created
- Service account JSON with "Release Manager" permission
(save asgoogle-service-account.json— it's in.gitignore) - Update
eas.json→submit.production.android.serviceAccountKeyPath
eas submit --platform android --profile production
The app handles tycoon:// scheme URLs.
Configure associated domains in Xcode / app.json if you need universal links (https://tycoon.us/...).
To add universal links:
// app.json → expo.ios "associatedDomains": ["applinks:tycoon.us"]
tycoon-mobile/
├── app/
│ ├── _layout.tsx # Root layout — splash screen, navigation stack
│ └── index.tsx # Main WebView screen
├── assets/
│ └── images/
│ ├── icon.png # ×ばつ1024 app icon
│ ├── adaptive-icon.png # Android adaptive icon foreground
│ ├── splash.png # Splash screen
│ ├── favicon.png # Web favicon (unused in native)
│ └── logo.svg # Tycoon SVG logo (source)
├── scripts/
│ └── generate-assets.js # Regenerate icons from logo.svg
├── app.json # Expo configuration
├── eas.json # EAS Build + Submit configuration
├── .easignore # Files excluded from EAS builds
└── tsconfig.json # TypeScript config
The WebView injects two globals into window so the web app can detect it's running native:
window.__TYCOON_NATIVE__ = true; window.__TYCOON_PLATFORM__ = 'ios' | 'android'
Use these in the web app to show/hide mobile-specific UI (e.g., skip in-browser install prompts).
| Step | Command / Action |
|---|---|
| 1. Init EAS project | eas init |
| 2. Regenerate proper icons | node scripts/generate-assets.js |
| 3. Build preview | eas build --platform ios --profile preview |
| 4. Upload to TestFlight | Build → Apple → TestFlight auto-upload |
| 5. Internal testers | Add in App Store Connect → TestFlight tab |
| 6. Production release | eas build --platform all --profile production --auto-submit |