Release
Stamp KMP versions together and build Android and iOS release artifacts.
Prepare configuration
Confirm the final identity, backend origin, signing configuration, Firebase files for Account, RevenueCat offerings/real store SDK keys, and production AdMob IDs. See Rename Package, Payments and Ads, and Push Notifications.
Stamp versions
From the generated project root, with a CLI distribution that includes the KMP release workflow:
bowler ship changelog releaseThe release stamps these values together, then commits and tags:
| File (relative to project root) | Version values |
|---|---|
mobile-app/androidApp/build.gradle.kts | versionName, versionCode |
mobile-app/iosApp/Configuration/Config.xcconfig | MARKETING_VERSION, CURRENT_PROJECT_VERSION |
.bowlerkit/changelog.md is the project changelog. Review the release entries and resulting diff/tag before building. Keep the two platforms' version values aligned if editing manually. The CLI workflow prepares metadata; it does not produce the native store artifacts.
Android App Bundle
From generated mobile-app/:
./gradlew -Pbowlerkit.iosOnly=false :androidApp:bundleReleaseThe explicit property includes Android modules on macOS. Configure your own release signing before upload; androidApp/build.gradle.kts enables release shrinking/minification but does not supply a customer signing configuration. Build success alone is not evidence that the bundle is ready for Google Play.
iOS archive
On macOS, from mobile-app/:
open iosApp/iosApp.xcodeprojIn Xcode select the iosApp scheme, configure the signing team and distribution capabilities, choose a generic iOS device destination, then use Product → Archive. Validate and distribute the archive through Organizer with your App Store account.
Validate
Before producing release artifacts:
./gradlew -Pbowlerkit.iosOnly=false check :androidApp:assembleDebug :androidApp:assembleRelease
./gradlew :sharedLogic:iosSimulatorArm64Test
xcodebuild -project iosApp/iosApp.xcodeproj -scheme iosApp -configuration Debug \
-destination "generic/platform=iOS Simulator" buildThe last two checks require macOS. Exercise both native apps with release configuration: Account login/links/push, Guest launch/local reminders, purchase/restore, consent, and ad failures. Simulator builds do not replace signed-device and store testing.
