BowlerKitBowlerKit

Release

10/11/2026

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 release

The release stamps these values together, then commits and tags:

File (relative to project root)Version values
mobile-app/androidApp/build.gradle.ktsversionName, versionCode
mobile-app/iosApp/Configuration/Config.xcconfigMARKETING_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:bundleRelease

The 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.xcodeproj

In 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" build

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