How to build and publish Vogue WOD Schedule to the App Store and Google Play.
pubspec.yaml — version: <name>+<build>
(e.g. 1.0.1+2). The build number must increase every upload.bash tool/dev/check.sh → must print ALL GREEN.flutter test tool/generate_brand_assets.dart, then
dart run flutter_launcher_icons and dart run flutter_native_splash:create.android/app/upload-keystore.jks, and its credentials are in
android/key.properties.
android/ and
android/app/ before building a release.flutter build appbundle --release \
--obfuscate --split-debug-info=build/symbols/android
Output: build/app/outputs/bundle/release/app-release.aab — this is what
you upload to Play.
--obfuscate strips Dart symbol names from the binary; the matching
symbols are written to build/symbols/android/ so you can decode
production stack traces later. Back the build/symbols/android/ folder
up alongside the keystore — it is per-build and you cannot regenerate it.
.aab to Internal
Testing first (no review, instant distribution to up to 100
testers).Required by Play; not by Apple. 1024×500 PNG, brand-styled. Regenerate after any text / icon change:
bash tool/generate_feature_graphic.sh
# -> assets/brand/feature_graphic.png
Editable in tool/feature_graphic.html (HTML + real Google Fonts,
rendered headless Chrome).
Play rejects screenshots taller than 2:1 (longest ÷ shortest).
Modern iPhone shots at 1284×2778 are 2.16:1, just over. Pad them with
jet #0A0908 to 1389×2778 (exactly 2:1):
for f in screens/1284x2778/IMG_*.PNG; do
sips --padToHeightWidth 2778 1389 --padColor 0A0908 "$f" \
--out "screens/play/$(basename "$f")"
done
The padded .PNGs under screens/play/ are the ones you drag into
Play Console.
| Section | Answer |
|---|---|
| App information → Category | Health & Fitness |
| Data safety → Data collection / sharing | None — answer “No” to every category |
| Content rating | Answer “No” / “None” to every question → result Everyone / PEGI 3 |
| Target audience and content → Age group | 18+ (or 13+ if you want broader reach); tick “App not designed for children” |
| Ads | No |
| News apps | No |
| Government apps | No |
| COVID-19 contact tracing | No |
| Financial features | None |
| Health features | None — the app is a schedule reader, not a health-data collector |
| Privacy Policy URL | https://tp9imka.github.io/vogue/privacy/ |
| Contact website (optional) | https://tp9imka.github.io/vogue/ |
Same as the iOS App Review notes: no sign-in required, the app opens on first launch and asks you to pick a branch. Tick “All functionality in our app is available without any special access”.
ios/Runner.xcworkspace → select the Runner target →
Signing & Capabilities → set your Team. Automatic signing will
create the certificate and provisioning profile.com.tp9imka.wod — register it in the
Apple Developer portal (or let Xcode register it on first build).flutter build ipa --release \
--obfuscate --split-debug-info=build/symbols/ios
Output: build/ios/ipa/*.ipa. Back up build/symbols/ios/ per release
to decode production crash reports.
.ipa with Transporter (Mac App Store) or via Xcode
Organizer.PRIVACY.md).Info.plist
(ITSAppUsesNonExemptEncryption = false).The app displays content and uses the branding of Vogue Fitness. Confirm you are authorized to publish an app using their name and schedule data before submitting to either store — both stores can reject or remove apps that use a third party’s brand or content without permission.