Quick Start
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
Configure the app
cd my-kmp-app
bowler setup
cd mobile-appSet 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:installDebugUse 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.xcodeprojSelect 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:
| Where | Keys |
|---|---|
local.properties | sdk.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.xcconfig | API_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.jsonagain. The template’sACCOUNT-CREDENTIALS.mdcovers 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 # macOSAfter 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.
