BowlerKitBowlerKit

Quick Start

10/11/2026

Create and run a BowlerKit Kotlin Multiplatform project with the Account or Guest profile.

This guide assumes the prerequisites are installed and a KMP-enabled BowlerKit CLI is available.

The CLI creates a configured project from the licensed distribution. You do not clone the private repository.

Create the project

Run the CLI

bowler create my-kmp-app

Select Kotlin Multiplatform, then choose Account or Guest.

Configure the app

cd my-kmp-app
bowler setup
cd mobile-app

Set the display name, application ID / bundle ID, and deep link scheme. For Account, set API_BASE_URL to a reachable backend host root, without /api/v1; the shared client adds the API paths.

For Account push and Google sign-in, register the final IDs in Firebase and download the native configuration files used below. Guest startup does not require Firebase files or a backend URL.

Run Android

echo "sdk.dir=/path/to/Android/sdk" >> local.properties
# Account push / Google sign-in configuration
cp /path/to/google-services.json androidApp/google-services.json
./gradlew -Pbowlerkit.iosOnly=false :androidApp:installDebug

Use a connected Android device or emulator. The explicit Gradle flag also enables Android modules on macOS, where the default build graph is iOS-only.

Run iOS (macOS)

# Account Firebase configuration
cp /path/to/GoogleService-Info.plist iosApp/iosApp/GoogleService-Info.plist
open iosApp/iosApp.xcodeproj

Select the iosApp scheme and a device or simulator in Xcode, set your signing team for a device build, then run.

Skip the Firebase copy commands for Guest.

Configuration

Keep credentials and per-developer configuration in these git-ignored files:

WhereKeys
local.propertiessdk.dir, API_BASE_URL, REVENUECAT_ANDROID_API_KEY, GOOGLE_SERVER_CLIENT_ID, ADMOB_ANDROID_APP_ID, ADMOB_ANDROID_INTERSTITIAL_UNIT_ID, ADMOB_ANDROID_REWARDED_UNIT_ID
iosApp/Configuration/Config.local.xcconfigAPI_BASE_URL, REVENUECAT_IOS_API_KEY, GOOGLE_IOS_CLIENT_ID, GOOGLE_IOS_REVERSED_CLIENT_ID, GOOGLE_SERVER_CLIENT_ID, ADMOB_IOS_APP_ID, ADMOB_IOS_INTERSTITIAL_UNIT_ID, ADMOB_IOS_REWARDED_UNIT_ID

In Config.local.xcconfig, write the API URL as https:/$()/host. A plain // starts a comment in xcconfig.

  • The AdMob defaults are Google's sample ids. Replace all of them before release.
  • Billing is unavailable until you provide a RevenueCat SDK key. Use Test Store keys (test_...) for development and real store keys for release.
  • For Android Google sign-in, register SHA-1 and SHA-256 fingerprints in Firebase, then download google-services.json again. The template’s ACCOUNT-CREDENTIALS.md covers native Google/Apple connected-account setup.

Guest profile

Guest skips Account API calls and remote preference/token synchronization, so it needs no backend URL. Purchases, restore, and ads may still use the network. See Guest mode and deep cleanup.

Verify

./gradlew -Pbowlerkit.iosOnly=false check :androidApp:assembleDebug :androidApp:assembleRelease
./gradlew :sharedLogic:iosSimulatorArm64Test        # macOS
xcodebuild -project iosApp/iosApp.xcodeproj -scheme iosApp -configuration Debug \
  -destination "generic/platform=iOS Simulator" build   # macOS

After building, launch both apps. For Account, sign in and confirm the profile and notification history load from your backend. For Guest, confirm a cold launch without login or a backend, persistent local settings, and the local reminder flow.

Releasing

With a KMP-enabled CLI, bowler ship changelog release stamps versionName/versionCode (Android) and MARKETING_VERSION/CURRENT_PROJECT_VERSION (iOS) together, then commits and tags. Build with ./gradlew -Pbowlerkit.iosOnly=false :androidApp:bundleRelease, and archive in Xcode for the App Store.