Convenience wrapper around the per-release flow. Bumps the platform's build number, rebuilds the release artifact, and uploads to the store.
mix mob.republish --ios # bump CFBundleVersion, mob.release, mob.publish --ios
mix mob.republish --ios --no-bump # skip the bump (Apple will reject same build #; mostly for testing)
mix mob.republish --android # bump versionCode, gradlew bundleRelease, mob.publish --android
mix mob.republish --android --track production # publish to a specific trackPlatform flag is required — Mob is intentionally platform-agnostic and refuses to default to either side.
What --ios does (under the hood)
Three steps. Each is a standalone command if you'd rather run them separately or need to troubleshoot one in isolation:
Bump
CFBundleVersioninios/Info.plistby 1:CURRENT=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" ios/Info.plist) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $((CURRENT + 1))" ios/Info.plistApple rejects re-uploads with the same
CFBundleVersion. The bump only touchesCFBundleVersion(the integer build number); yourCFBundleShortVersionString(the public semver) stays put.mix mob.release— builds_build/mob_release/<App>.ipa. SeeMix.Tasks.Mob.Releasefor what this produces. Bump-then-release order matters: the build number is baked into the binary, not inferred at upload time.mix mob.publish --ios— uploads viaxcrun altoolwith App Store Connect API key auth. SeeMix.Tasks.Mob.Publish.
Failure handling
If the bump itself fails (e.g. CFBundleVersion isn't an integer —
someone wrote "1.0" which actually belongs in CFBundleShortVersionString),
you get a clear error before anything else runs.
If mix mob.release fails, mix mob.publish is not invoked. The
build-number bump is NOT rolled back — you'll see a gap in your
uploaded versions, which Apple is fine with (gaps are allowed; going
backward isn't). Re-run after fixing whatever broke the build.
If mix mob.publish itself fails (network, Apple API error, etc.),
you may need to bump the version again before retrying — Apple
considers the build number "consumed" once they see it, even on
upload failure. Use --no-bump is rarely the right call; usually
the right move is just mix mob.republish --ios again.
Summary
Functions
Read versionCode from the given build.gradle, integer-bump it, and
write back. Returns {old, new} strings.
Read CFBundleVersion from the given Info.plist, integer-bump it, and
write back. Returns {old, new} strings.
Functions
Read versionCode from the given build.gradle, integer-bump it, and
write back. Returns {old, new} strings.
Raises with a clear message if no versionCode line is found.
Read CFBundleVersion from the given Info.plist, integer-bump it, and
write back. Returns {old, new} strings.
Raises with a clear message if the current value isn't a clean integer
— typically that means someone put a semver-style version
("1.0.0") where Apple expects an integer build counter; the semver
belongs in CFBundleShortVersionString instead.