# Build Instructions - Pottery Diary ## Quick Start (Development) ```bash # Navigate to project cd pottery-diary # Install dependencies (if not already done) npm install # Start Expo development server npm start # In another terminal, run on platform: npm run ios # iOS Simulator (Mac only) npm run android # Android Emulator ``` ## Testing ```bash # Run all unit tests npm test # Watch mode for development npm run test:watch # Expected output: All tests passing for: # - Temperature conversions # - Cone converter # - Duration formatting ``` ## Production Builds ### Prerequisites 1. Install EAS CLI: `npm install -g eas-cli` 2. Create Expo account: https://expo.dev/signup 3. Login: `eas login` ### Configure Project ```bash # First time only eas build:configure # This creates/updates eas.json and app.json ``` ### Build Commands #### iOS ```bash # Build for iOS eas build --platform ios --profile production # Build for iOS Simulator (testing) eas build --platform ios --profile preview ``` #### Android ```bash # Build APK for Android eas build --platform android --profile production # Build for testing eas build --platform android --profile preview ``` #### Both Platforms ```bash eas build --platform all --profile production ``` ### Build Profiles (eas.json) - **development**: Development client with debugging - **preview**: Internal testing builds (APK for Android, Simulator for iOS) - **production**: Store-ready builds ## Troubleshooting ### Common Issues #### 1. SQLite not found ```bash # Reinstall expo-sqlite npx expo install expo-sqlite ``` #### 2. Navigation errors ```bash # Clear cache and restart npx expo start --clear ``` #### 3. TypeScript errors ```bash # Check TypeScript compilation npx tsc --noEmit ``` #### 4. Test failures ```bash # Clear Jest cache npm test -- --clearCache npm test ``` ### Platform-Specific #### iOS - **Xcode required**: Mac with Xcode 14+ for local builds - **Simulator**: Install via Xcode → Preferences → Components - **Certificates**: EAS handles signing for cloud builds #### Android - **Android Studio**: Install for local emulator - **SDK**: API Level 26+ (Android 8.0+) - **Emulator**: Create AVD with Google Play Store ## Environment Setup ### Required - Node.js 18+ - npm 9+ - Expo CLI (installed via npx) ### Optional (for local builds) - Xcode 14+ (iOS, Mac only) - Android Studio 2022+ (Android) - EAS CLI (cloud builds) ## Database Management ### Reset Database (Development) ```bash # Uninstall app to clear SQLite database # Or delete app data via device settings # Database auto-migrates on next launch ``` ### View Database ```bash # Use a SQLite browser to inspect: # iOS: ~/Library/Developer/CoreSimulator/Devices/[DEVICE_ID]/data/Containers/Data/Application/[APP_ID]/Library/Application Support/SQLite/pottery_diary.db # Android: Use adb or Device File Explorer in Android Studio ``` ## Performance Optimization ### App Size - Current: ~20-30 MB (target < 30 MB) - Photos are compressed on import - No large assets bundled ### Speed - Cold start: <1s (target) - List scrolling: 60 FPS - Database queries: <50ms for most operations ## Release Checklist - [ ] All tests passing (`npm test`) - [ ] TypeScript compiles (`npx tsc --noEmit`) - [ ] No console errors in dev mode - [ ] Test on both iOS and Android - [ ] Accessibility check (VoiceOver/TalkBack) - [ ] Update version in app.json - [ ] Update CHANGELOG.md - [ ] Build with EAS - [ ] Test build on physical devices - [ ] Submit to App Store / Play Store ## Continuous Integration (Future) Recommended setup: - GitHub Actions for automated testing - EAS Build on push to main - Detox for E2E testing Example `.github/workflows/test.yml`: ```yaml name: Test on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: 18 - run: npm install - run: npm test ``` ## Support - Issues: https://github.com/yourusername/pottery-diary/issues - Expo Docs: https://docs.expo.dev/ - React Native Docs: https://reactnative.dev/ --- Last Updated: 2025-01-15