Repository navigation
Conversation
The verify steps told agents to filter logcat with `adb logcat -s Purchases`
and wait for "😻👼 Purchases is configured". purchases-android logs under the
tag "[Purchases] - <LEVEL>", so the exact-tag filter matches nothing, and that
banner string does not exist in the SDK. The check could never pass, and
troubleshoot then blamed the manifest for a failure the filter caused.
The steps now grep for "[Purchases]" and look for the real configure lines
("SDK Version - ...", "Package name - ..."), which the SDK prints at debug
level from PurchasesFactory. An empty result still only usually means
configure never ran, because a custom Purchases.logHandler also hides the
lines.
The KMP files expected the same banner, on iOS too, and purchases-ios does not
log it either. purchases-kmp keeps the native log handlers, so every KMP check
now looks for the "SDK Version - ..." line both SDKs print at debug level
during configure, and troubleshoot states it instead of deferring to the
native files. The line shows the native SDK's version, not the purchases-kmp
version.
Source: purchases-android common/logUtils.kt, ConfigureStrings.kt,
PurchasesFactory.kt; purchases-ios ConfigureStrings.swift, Purchases.swift;
purchases-kmp Purchases.apple.kt
The testing and troubleshooting skills said a sideloaded debug build cannot buy even for license testers, and in one place that internal testing won't work. Google's billing test guide says license testers bypass the check that blocks apps not uploaded to Google Play, so sideloaded debug builds with debug signatures can buy, and internal testing is a regular test track. RevenueCat's sandbox guide adds that products do not load until the tester opens the track's opt-in link, and that a debug build fails for a license tester who has not opted in. So every sandbox path now asks for a license tester who has opted in to an internal or closed testing track, and only then allows sideloaded builds. Flutter and React Native files carried the same claims and change with it. Accounts that are not license testers either cannot buy or pay real money on any track, internal testing included: Google says testers pay unless they are license testers, and RevenueCat's test matrix shows a real charge for a sideloaded debug build. The skills now say that instead of promising that development never charges real money or that only closed and open tracks charge. Play Console paths follow Google's current help pages (Settings > License testing, Test and release > Testing), and the signing check names the Play app signing page rather than a menu path. The React Native track build uses the production EAS profile, because the default preview profile builds an APK for internal distribution. Google's few-hours availability delay is stated. Source: https://developer.android.com/google/play/billing/test, https://support.google.com/googleplay/android-developer/answer/6062777, https://support.google.com/googleplay/android-developer/answer/9845334, https://support.google.com/googleplay/android-developer/answer/9842756, https://www.revenuecat.com/docs/test-and-launch/sandbox/google-play-store, https://docs.expo.dev/build/internal-distribution/
integrate said minSdk 21. purchases-android requires API 23 since 10.0.0, and purchases-ui requires 24, so an app following the skill fails the manifest merge, and the 21 floor contradicted the minSdk 24 advice in troubleshoot. migrate pointed at "a recent 8.x" while the current major is 10.x, and customer-center said "8.x or newer" for APIs that arrived in 8.12.0 (CustomerCenter) and 8.13.0 (ShowCustomerCenter). migrate also notes that 10.x brings Play Billing Library 8.3.0. The observer mode path keeps the app's own billing code, which then has to compile against Billing Library 8. Source: purchases-android README requirements, gradle/libs.versions.toml, ui/revenuecatui/build.gradle.kts, CHANGELOG.md (10.0.0)
The skills named the buttons "Successful Purchase" and "Failed Purchase". The Test Store dialog shows "Test valid purchase", "Test failed purchase", and "Cancel" on both Android and iOS, and on Android the failure surfaces as TestStoreSimulatedPurchaseError. An agent asking a user to tap a button that does not exist slows every test session, and the error code is what tests should assert on. The shared SKILL.md and the iOS, Flutter, React Native, and KMP files change together because the hybrids show the native dialogs. Source: purchases-android SimulatedStoreBillingWrapper.kt, purchases-ios Sources/Purchasing/SimulatedStore/SimulatedStorePurchaseUI.swift
The KMP files explained `2.10.2+17.55.1` style versions with a bundled purchases-hybrid-common, told iOS users to wire the bridge pod or run `pod deintegrate`, and told users to pin the native SDKs themselves. All of that is 2.x behavior. Since 3.0.0, versions are plain (3.10.1 today), the iOS SDK ships inside purchases-kmp so the PurchasesHybridCommon pods and packages must be removed, and purchases-android comes in as a dependency. Current releases need Kotlin 2.3.20+ and API 23, or 24 with purchases-kmp-ui, whose Android artifact declares minSdk 24. 3.0 to 3.9 can log upgraded iOS users out, so everyone should be on 3.10.0+. The files also said the Android configuration needs a Context overload. purchases-kmp has none: PurchasesConfiguration.Builder takes only the API key and the Application comes from AndroidX App Startup, so the skill now says to keep that provider in the manifest. The pointers that sent readers to the purchases-kmp README, which covers none of this, now go to pages that do: the Paywalls and Customer Center docs list the purchases-kmp-ui coordinate, which the KMP installation page does not, and the purchases-kmp API reference lists the ktx await functions. troubleshoot also covers the Amazon module that 3.0.0 makes you add yourself, and no longer assumes the Android module is called :app. Source: purchases-kmp README, migrations/3.0.0-MIGRATION.md, CHANGELOG.md (3.9.0 warning, 3.10.0 fix), gradle/libs.versions.toml (10.22.1), core and revenuecatui klib API dumps, revenuecatui/build.gradle.kts, API reference (com.revenuecat.purchases.kmp.ktx); RevenueCat docs for Kotlin Multiplatform installation (ExperimentalForeignApi, isStatic), Paywalls installation, and Customer Center for KMP
nihalgonsalves
approved these changes
Oct 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #66.
Description
[Purchases]tag, real configure lines)purchases-kmp-uiNote
Low Risk
Markdown-only updates to integration skills; no application or SDK code changes.
Overview
This PR refreshes RevenueCat agent skills (Android, KMP, testing, troubleshoot, migrate, paywall, Customer Center) after a platform audit—documentation only, no runtime code.
Android & verification: Docs now require minSdk 23 (24 with
purchases-ui/ Customer Center), point migration at purchases-android 10.x and Play Billing 8, and replace misleading configure checks withadb logcat | grep "\[Purchases\]"andSDK Version/Package namedebug lines (including notes on customlogHandler).Google Play testing: Guidance is rewritten so sandbox purchases need a license tester who opted in to an internal/closed track; sideloaded/debug builds can work after opt-in; non-testers may be charged on testing tracks. Play Console paths and propagation timing are updated, and the mistaken “internal testing won’t work” checklist item is removed.
KMP 3.x: Install/configure docs drop the
wrapper+depsversion format, document plain 3.10+ versions, Kotlin 2.3.20+, no manual iOS pods / PurchasesHybridCommon, API-key-onlyPurchasesConfigurationwith AndroidX App Startup, Amazon module pinning, and updated official doc links.Cross-platform: Test Store UI labels are Test valid purchase / Test failed purchase everywhere; Android Test Store failure documents
TestStoreSimulatedPurchaseError; Customer Center notes cite purchases-ui 8.12.0 / 8.13.0 minimums.Reviewed by Cursor Bugbot for commit 206bf8f. Bugbot is set up for automated code reviews on this repo. Configure here.