docs
/
EventOxygen

Release

Identifiers, the EventOS versus EventOxygen naming, and the App Store and Play upload flow.

Identifiers

Value
Dart packageevent_app, version 1.0.0+8 in pubspec.yaml
Android application idcom.appmint.event_app; signing via android/key.properties
iOSRunner target with ios/ExportOptions.plist; usage strings for camera, microphone, photo library and photo library add, all naming EventOxygen
Apple teamC66W933VKV (same team as Appmint Mobile, so the same App Store Connect API key works)
App Store Connect app id6770200026
Launcher iconassets/images/eventos_logo.png via flutter_launcher_icons, adaptive background #1A0B2E, web icons generated
Two names for one app

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.plist

If 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 --release

Signed 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:

ShipsDoes 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 tabPush notifications, deep links, a QR scanner, offline mode, card payment on web

Release checklist

CheckWhy
flutter analyze lib shows no errors or warningsInfos are pre-existing
Version bumped in pubspec.yamlBoth parts for iOS after an approved train
Store listing name and version match the binaryEventOxygen, not EventOS
Fast Login still behind kDebugModeIt carries a real account
Seeded demo org still answers for reviewersReviewers browse the public events list first