Automates release notes and review submission after IPA upload to App Store Connect.
Built by Filip Kowalski
X: @filippkowalski
Website: fkowalski.com
Support: buymeacoffee.com/filipkowalski
dart pub getexport APP_STORE_API_KEY_ID=your_key_id
export APP_STORE_ISSUER_ID=your_issuer_id
export APP_STORE_P8_KEY_PATH=/path/to/AuthKey.p8 # optionalYou can find these values in App Store Connect > Users and Access > Keys.
Default P8 key path: ~/.appstoreconnect/private_keys/AuthKey_{KEY_ID}.p8
dart submit_to_app_store.dart 1.13.0dart submit_to_app_store.dart 1.13.0+30dart submit_to_app_store.dart 1.13.0 --project-path /path/to/projectdart submit_to_app_store.dart 1.13.0 --dry-rundart submit_to_app_store.dart 1.13.0 --bundle-id com.example.app- Detects Bundle ID - Auto-detects from your Xcode project
- Finds Your App - Locates the app in App Store Connect
- Waits for Build - Waits for the uploaded build to finish processing
- Creates/Updates Version - Gets existing or creates new version
- Links Build - Associates the build with the version
- Adds Release Notes - Adds notes to all localizations
- Submits for Review - Submits the version for App Store review
Default release notes: "Bug fixes and improvements."
To customize, edit the releaseNotes constant in submit_to_app_store.dart.
chmod +x submit_to_app_store.dart
./submit_to_app_store.dart 1.13.0Typical workflow:
-
Build and upload IPA:
flutter build ipa xcrun altool --upload-app -f build/ios/ipa/*.ipa \ --type ios \ --apiKey $APP_STORE_API_KEY_ID \ --apiIssuer $APP_STORE_ISSUER_ID
-
Run this script:
dart submit_to_app_store.dart 1.13.0+30
- Uses
josepackage for JWT token generation (ES256 signing) - Native Dart async/await instead of blocking calls
- Strong typing with Dart's type system
- Uses
argspackage for command-line argument parsing - Uses
httppackage for HTTP requests
Run dart pub get
Set APP_STORE_P8_KEY_PATH or place the key at: ~/.appstoreconnect/private_keys/AuthKey_{KEY_ID}.p8
Verify the bundle ID matches your app in App Store Connect
Make sure you uploaded the IPA first using xcrun altool
This is a conversion of the original Python script to Dart, maintaining the same functionality and workflow.