Builds a release-signed artifact ready to upload to the app store.
mix mob.release # iOS .ipa (default)
mix mob.release --ios # iOS .ipa (explicit)
mix mob.release --android # Android .aab
mix mob.release --security-gate # run mix mob.security_scan first;
# abort the release on any
# critical/high/medium finding--security-gate
Runs the full security scan against the project (every layer: Hex/Gradle/Swift dep CVEs, bundled-runtime drift, C/Kotlin/Swift static analysis) before building or signing. If the scan surfaces any critical/high/medium finding, the release aborts with a non-zero exit code — nothing is built, nothing is signed. Combine with the rest of your release flags as needed:
mix mob.release --android --security-gate
mix mob.release --ios --security-gateEquivalent to running mix mob.security_scan --strict and only
proceeding to mix mob.release if the scan exits 0; the gate
flag just bundles the two into one command so a wrong-order
invocation can't slip through.
--ios output
_build/mob_release/<App>.ipa
--android output
android/app/build/outputs/bundle/release/app-release.aab
--ios prerequisites
- Apple Developer Program membership (paid, $99/yr)
- An "Apple Distribution" certificate in your keychain (Xcode → Settings → Accounts → Manage Certificates → +)
- An App Store provisioning profile for your bundle ID, downloaded
to
~/Library/Developer/Xcode/UserData/Provisioning Profiles/.mix mob.provision --distributionautomates the profile download.
--android prerequisites
android/keystore.propertiesfilled in with your upload keystore credentials.android/upload_jks.keystoremust exist. Seeandroid/keystore.properties.example.
What --android does
- Ensures the Android OTP runtime is cached (
~/.mob/cache/otp-android-*). - Stages a temp tree: OTP runtime + app BEAMs + exqlite BEAMs.
- Runs
MobDev.OtpAssetBundle.build/2to produceandroid/app/src/main/assets/otp.zip— stripped and compressed.MobBridge.extractOtpIfNeeded()extracts this on first launch. - Runs
./gradlew bundleReleaseto produce the signed AAB.
Use mix mob.publish --android to upload to Google Play.