Deployment
Build for Play Store
cd /Users/dhilshad/Metaonus/syncad-parents
# Build release APK
flutter build apk --release --obfuscate --target-platform android-arm64
# Or for Play Store App Bundle (preferred)
flutter build appbundle --release --obfuscate --target-platform android-arm64
Build for iOS App Store
# Increment build number in pubspec.yaml first
flutter build ipa --release --obfuscate
The .ipa file is output to build/ios/ipa/.
Google Play Store Setup
1. Create Release
Upload the AAB to the Google Play Console under Release > Production > Create Release.
2. App Signing
- Google Play App Signing is enabled — Google manages the signing key
- Upload an
.aabfile (not.apk) for Play App Signing support
3. Required Assets
| Asset | Specification |
|---|---|
| App Icon | 512×512 PNG (launcher) |
| Feature Graphic | 1024×500 PNG |
| Screenshots | Phone: 1080×1920 PNG, 7+ screenshots |
| Privacy Policy URL | Required before publishing |
4. Track Configuration
| Track | Purpose |
|---|---|
| Internal | Fast testing with up to 100 internal testers |
| Closed (Alpha/Beta) | External testers via Google Groups or email list |
| Production | Public release |
App Store Connect (iOS)
1. Create App
In App Store Connect, create a new iOS app with:
- Bundle ID matching
androidPackageinpubspec.yaml - SKU (unique internal ID)
2. Upload Build
# With Xcode cloud or Transporter app
# Or use fastlane:
fastlane deliver --ipa "build/ios/ipa/syncad_parents.ipa"
3. Required Information
| Field | Value |
|---|---|
| App Name | SyncAD Parents |
| Category | Education |
| Content Rating | 4+ (everyone) |
| Privacy Policy URL | Required |
| Support URL | Required |
4. Build Configuration
<!-- ios/Runner/Info.plist — minimum iOS version -->
<key>MinimumOSVersion</key>
<string>13.0</string>
<!-- Background modes for FCM -->
<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
<string>fetch</string>
</array>
Environment Configuration
Dev
# lib/core/constants/api_constants.dart
class ApiConstants {
static const String baseUrl = 'https://dev-api.metaonus.in';
}
Staging / Production
# lib/core/constants/api_constants.dart
class ApiConstants {
static const String baseUrl = 'https://staging-api.metaonus.in';
// or
static const String baseUrl = 'https://api.metaonus.in';
}
Update via build flags:
flutter build apk --release --dart-define=API_BASE_URL=https://api.metaonus.in
Testing Flight (iOS)
# iOS TestFlight — upload .ipa via Transporter or:
xcrun altool --upload-app -f build/ios/ipa/syncad_parents.ipa -t ios -u "apple_id@email.com" -p "app-specific-password"
Post-Deployment Checklist
- FCM server key updated in Firebase Console
- App signing key stored securely (Android)
- Bundle ID matches App Store Connect
- Version + build number incremented
- Privacy policy URL live
- Test login + OTP flow on released build
- Push notifications received on both platforms
- Deep links (
syncad://) verified