Identifiers
| Value | |
|---|---|
| Dart package | event_app, version 1.0.0+8 in pubspec.yaml |
| Android application id | com.appmint.event_app; signing via android/key.properties |
| iOS | Runner target with ios/ExportOptions.plist; usage strings for camera, microphone, photo library and photo library add, all naming EventOxygen |
| Apple team | C66W933VKV (same team as Appmint Mobile, so the same App Store Connect API key works) |
| App Store Connect app id | 6770200026 |
| Launcher icon | assets/images/eventos_logo.png via flutter_launcher_icons, adaptive background #1A0B2E, web icons generated |
The binaries are labelled EventOxygen (android:label, CFBundleDisplayName), the App Store listing is EventOxygen, and MaterialApp.title is "Event App". STORE_LISTING.md and legal_urls.dart (eventos.app, [email protected]) still say EventOS, and the production org id is eventos. Keep listing copy consistent with the store name before each submission.
Environment at build time
Release builds select Environment.production: endpoint https://appengine.appmint.io, app id evventapp, org eventos. Debug builds use the development endpoint and org demo. The Stripe publishable key in environment.dart is a placeholder in both environments; the app fetches the real key from GET /client/events/stripe/config (or off the payment intent) at purchase time, so there is nothing to rotate in the build.
iOS: App Store
1. Bump the version. Once a marketing version has been approved, its train is closed; a new build number alone is refused by altool (90186). Bump the part before + as well.
2. Archive.
flutter clean && flutter pub get
flutter build ipa --release --export-options-plist=ios/ExportOptions.plistIf the archive stalls at "Running Xcode build", check for a missing App Store distribution profile for the bundle id and for an open Xcode holding DerivedData. Progress is the file count under ~/Library/Developer/Xcode/DerivedData/Runner-*, not CPU.
3. Upload.
xcrun altool --upload-app --type ios -f build/ios/ipa/*.ipa \
--apiKey <KEY_ID> --apiIssuer <ISSUER_ID>The .p8 under ~/.appstoreconnect/private_keys/ is found automatically. Processing takes 10–40 minutes.
4. Compliance and review. Set usesNonExemptEncryption: false on the new build, attach it to the version, then create a fresh review submission and submit. After a rejection, cancel the rejected submission first; re-submitting it in place never clears its state error. The review detail needs a contact with a +country phone number and, because browsing and buying need no login, demoAccountRequired can be false with notes explaining guest browse and the magic-code login.
Android: Google Play
flutter build appbundle --releaseSigned with the shared keystore under ~/.android-keystores/; uploaded to the internal track with the Play service account under ~/.gplay/. The listing text in STORE_LISTING.md covers description, data safety, content rating and permission purposes (camera, notifications, network) — update the name and version before pasting.
What ships and what does not
Worth restating for anyone writing release notes:
| Ships | Does not |
|---|---|
| Browse and buy without an account, tickets with rotating QR, transfer, schedule, people, profiles, feed, comments, reactions, reposts, bookmarks, connections, chat, meetings, media upload, in-app notifications tab | Push notifications, deep links, a QR scanner, offline mode, card payment on web |
Release checklist
| Check | Why |
|---|---|
flutter analyze lib shows no errors or warnings | Infos are pre-existing |
Version bumped in pubspec.yaml | Both parts for iOS after an approved train |
| Store listing name and version match the binary | EventOxygen, not EventOS |
Fast Login still behind kDebugMode | It carries a real account |
| Seeded demo org still answers for reviewers | Reviewers browse the public events list first |