mobile deployment checklist - nself-org/nchat GitHub Wiki
Last Updated: February 1, 2026 Platforms: iOS, Android Version: 0.8.0
This checklist ensures a smooth, production-ready deployment of nChat mobile apps to the App Store and Play Store.
Estimated Time:
- iOS: 4-6 hours (first time), 2-3 hours (subsequent)
- Android: 3-5 hours (first time), 1-2 hours (subsequent)
iOS:
- Apple Developer account active ($99/year)
- Team ID and account holder identified
- Payment method on file
- Tax forms completed
Android:
- Google Play Developer account active ($25 one-time)
- Payment method on file
- Tax identification completed
- Organization verified (if applicable)
General:
- macOS 13+ (for iOS builds)
- Node.js 20+ installed
- pnpm 9.15.4+ installed
- Git repository access
- Code editor setup (VS Code, etc.)
iOS Specific:
- Xcode 15.0+ installed
- Xcode Command Line Tools installed
- CocoaPods 1.10+ installed
- Valid development certificate
- Valid distribution certificate
Android Specific:
- Android Studio Hedgehog+ installed
- Android SDK API 34 installed
- Java JDK 17 installed
- Gradle 8.0+ installed
- Firebase project created
- iOS app added to Firebase
- Bundle ID:
io.nself.chat - GoogleService-Info.plist downloaded
- APNs key uploaded
- Bundle ID:
- Android app added to Firebase
- Package name:
io.nself.chat - google-services.json downloaded
- SHA-256 fingerprint added
- Package name:
- Analytics enabled
- Crashlytics enabled
- Cloud Messaging configured
- Sentry account created
- iOS project created
- DSN obtained
- Release tracking enabled
- Source maps configured
- Android project created
- DSN obtained
- ProGuard mapping configured
- Release tracking enabled
-
.env.localconfigured:# Firebase NEXT_PUBLIC_FIREBASE_API_KEY=... NEXT_PUBLIC_FIREBASE_PROJECT_ID=... NEXT_PUBLIC_FIREBASE_APP_ID=... # Sentry NEXT_PUBLIC_SENTRY_DSN_IOS=... NEXT_PUBLIC_SENTRY_DSN_ANDROID=... # App Config CAPACITOR_APP_ID=io.nself.chat CAPACITOR_APP_NAME=nChat
- App ID created (
io.nself.chat) - Capabilities enabled:
- Push Notifications
- Associated Domains
- Background Modes
- App Groups (if needed)
- APNs key created and downloaded
- Key ID saved
- Team ID saved
- .p8 file stored securely
- Development provisioning profile
- Distribution provisioning profile (App Store)
- Ad-hoc provisioning profile (optional)
- App created in App Store Connect
- App name: nChat
- Bundle ID:
io.nself.chat - SKU:
nchat-ios-v080 - Primary language: English (U.S.)
- App information completed:
- Privacy policy URL
- Support URL
- Marketing URL
- Category: Social Networking
- Secondary category: Productivity
- Tax and banking information
- Contracts and agreements signed
- Web app built:
pnpm build && pnpm export
- Capacitor synced:
cd platforms/capacitor npx cap sync ios - CocoaPods installed:
cd ios/App && pod install
- Xcode project opens without errors
- GoogleService-Info.plist added
- Info.plist configured:
- All permissions with descriptions
- URL schemes
- Associated domains
- Background modes
- Entitlements configured
- Build number incremented (800+)
- Version set to 0.8.0
- Builds on simulator (iPhone 14 Pro)
- Builds on simulator (iPad Pro)
- Runs on physical device:
- iPhone (smaller screen)
- iPhone (larger screen)
- iPad (if supporting)
- Core features tested:
- Login/signup
- Send message
- Upload photo
- Record voice message
- Push notifications
- Offline mode
- Background sync
- Biometric auth
- Deep linking
- Camera access
- Photo library access
- Performance verified:
- Launch time <2s
- Memory <100 MB idle
- 60 FPS scrolling
- Battery <5% per hour
- No crashes or critical bugs
- All console warnings resolved
- App archived in Xcode:
- Product → Archive
- Archive succeeded
- Validate App (no errors)
- App uploaded to App Store Connect:
- Distribute App → App Store Connect
- Upload succeeded
- Build appears in TestFlight
- Build processed successfully
- dSYM uploaded to Sentry (automatic)
- Screenshots captured:
- 6.7" display (3-10 screenshots)
- 6.5" display (3-10 screenshots)
- 5.5" display (3-10 screenshots)
- iPad 12.9" (optional, 3-10 screenshots)
- App description written (see template)
- Keywords researched and set
- Promotional text written
- Support URL live and tested
- Privacy policy URL live and tested
- Privacy practices completed
- Age rating completed (expected: 4+)
- App review information:
- Demo account created
- Contact information provided
- Notes for reviewer written
- Export compliance answered
- Build selected for release
- Submitted for review
- TestFlight build available
- Test information completed
- Internal testers added (up to 100)
- External testers added (optional)
- Beta testing completed
- Feedback collected and addressed
- App created in Play Console
- App name: nChat
- Default language: English (United States)
- Free or paid: Free
- Store presence configured:
- App name
- Short description (80 chars)
- Full description (4000 chars)
- App icon (512×512 PNG)
- Feature graphic (1024×500)
- Screenshots (phone required)
- Category: Social & Communication
- Content rating completed:
- IARC questionnaire filled
- Rating certificate received
- Privacy policy URL set
- Data safety section completed
- Web app built:
pnpm build && pnpm export
- Capacitor synced:
cd platforms/capacitor npx cap sync android - google-services.json added
- AndroidManifest.xml configured:
- Permissions declared
- Intent filters set
- Metadata added
- ProGuard rules configured
- Build variants configured
- Version code incremented (800+)
- Version name set to 0.8.0
- Release keystore created:
keytool -genkey -v \ -keystore nchat-release.keystore \ -alias nchat \ -keyalg RSA \ -keysize 2048 \ -validity 10000
- keystore.properties created
- build.gradle configured for signing
- Keystore backed up securely
- Keystore password saved in password manager
- Builds in debug mode
- Runs on emulator:
- Pixel 6 (1080x2400)
- Pixel Tablet (2560x1600)
- Runs on physical devices:
- Phone (smaller screen)
- Phone (larger screen)
- Tablet (if supporting)
- Core features tested:
- Login/signup
- Send message
- Upload photo
- Record voice message
- Push notifications (FCM)
- Offline mode
- Background sync (WorkManager)
- Biometric auth (fingerprint/face)
- Deep linking (App Links)
- Camera access
- Gallery access
- Performance verified:
- Launch time <2s
- Memory <150 MB idle
- 60 FPS scrolling
- Battery <6% per hour
- No crashes or ANRs
- All lint warnings resolved
- Release bundle built:
cd platforms/capacitor/android ./gradlew bundleRelease - Bundle signed successfully
- Bundle optimized (ProGuard)
- Upload to Play Console:
- Production track OR
- Internal testing (recommended first)
- Release notes written
- Countries/regions selected
- Pricing confirmed (Free)
- Internal testing track created
- AAB uploaded to internal testing
- Release notes added
- Testers added (email list up to 100)
- Build distributed to testers
- Testing period (1-2 days minimum)
- Feedback collected
- Critical issues fixed
- Ready for production
- Production release created
- AAB uploaded
- Release notes completed
- Countries/regions confirmed
- Staged rollout configured:
- Start with 5-10%
- Monitor for 24-48 hours
- Increase gradually
- Submitted for review
- All web features work on mobile
- iOS and Android feature parity
- No platform-specific bugs
- Consistent UI/UX across platforms
- Messages sync across devices
- Settings sync correctly
- Read receipts work
- Notifications work on all devices
- Offline changes sync when online
- Similar performance on both platforms
- Both meet target metrics
- No platform-specific slowdowns
iOS:
- App Store Connect analytics enabled
- Sentry iOS monitoring active
- Firebase Analytics tracking
- TestFlight feedback reviewed
Android:
- Play Console vitals dashboard
- Sentry Android monitoring active
- Firebase Analytics tracking
- Pre-launch reports reviewed
Both Platforms:
- Crash rate (<1%)
- ANR rate (<0.5% Android)
- Ratings (target >4.0 stars)
- Reviews (respond within 48h)
- Daily active users (DAU)
- User retention (day 1, 7, 30)
- Session duration
- Feature usage
- Monitor app store reviews
- Respond to negative reviews
- Thank positive reviews
- Collect feature requests
- Track common issues
- Plan next update
- Announce on website
- Blog post published
- Social media posts:
- Discord/Slack
- Email to users:
- Existing web users
- Beta testers
- Waitlist subscribers
- Press release (if major launch)
- Update documentation
When needed:
- Critical bug affecting >10% users
- Security vulnerability
- Data loss issue
- Crash on launch
Process:
- Fix issue in codebase
- Increment build number only
- Test fix thoroughly
- Upload to TestFlight/Internal testing
- Verify fix works
- Submit to stores (expedited if possible)
- 100% rollout (urgent)
Includes:
- Bug fixes
- Small improvements
- Performance tweaks
Process:
- Fix bugs reported by users
- Implement small features
- Increment build number
- Follow full testing process
- Staged rollout
Includes:
- New features
- UI changes
- Major improvements
Process:
- Plan features
- Implement changes
- Increment version number (0.9.0)
- Beta test extensively
- Marketing campaign
- Staged rollout
If critical issue found:
- Don't panic - users on old version OK
- Pull new version from sale (optional)
- Fix issue immediately
- Submit new build (expedited review)
- Communicate with users
Note: Can't rollback on iOS, only replace with fixed version
If critical issue found:
- Halt staged rollout immediately
- Fix issue in code
- Build new version (increment build)
- Test thoroughly
- Upload and resume rollout
Rollback option:
- Can rollback to previous version if needed
- Only affects users on staged rollout
- Previous version becomes active
- Both apps approved and live
- <1% crash rate on both platforms
- > 4.0 star rating (target)
- > 1000 downloads in first week
- <5% uninstall rate
- Positive user feedback
- > 10,000 downloads (both platforms)
- > 4.2 star average rating
- <0.5% crash rate
- 50%+ day-7 retention
- 30%+ day-30 retention
- Active user engagement
Build fails:
# Clean build
rm -rf ~/Library/Developer/Xcode/DerivedData
cd platforms/capacitor/ios/App
rm -rf Pods Podfile.lock
pod install --repo-updateSigning issues:
- Check provisioning profiles in Xcode
- Verify certificate expiration
- Re-download profiles from developer portal
Upload fails:
- Validate app in Xcode before uploading
- Check bundle ID matches exactly
- Verify all info.plist entries
Build fails:
# Clean build
cd platforms/capacitor/android
./gradlew clean
./gradlew --stop
./gradlew buildSigning issues:
- Verify keystore password
- Check keystore.properties path
- Ensure build.gradle configured correctly
Upload fails:
- Verify package name matches exactly
- Check version code is higher than previous
- Ensure bundle is signed with release keystore
- iOS: https://developer.apple.com/documentation
- Android: https://developer.android.com
- Capacitor: https://capacitorjs.com/docs
- Firebase: https://firebase.google.com/docs
- Email: [email protected]
- Slack: #mobile-deployment
- Docs: https://docs.nchat.io/deployment
- GitHub: https://github.com/nself/nself-chat/issues
- All tests pass
- No critical bugs
- Performance benchmarks met
- All assets uploaded
- All information accurate
- Privacy policy live
- Support infrastructure ready
- Team notified
- Monitoring configured
- Rollback plan documented
- Confirmation received
- Monitor review status
- Respond to reviewer questions <24h
- Prepare launch announcement
- Monitor crash reports
- Track user feedback
- Plan next update
Ready to deploy? Follow this checklist step by step. Good luck! 🚀
Questions? Contact [email protected]