From 3cfe51c0d597307420bf87b6ac65ceab133bcea5 Mon Sep 17 00:00:00 2001 From: JayShortway <29483617+JayShortway@users.noreply.github.com> Date: Wed, 26 Nov 2025 16:16:49 +0100 Subject: [PATCH 1/8] Updates to Kotlin 2.2.21-titan-208 --- apiTester/build.gradle.kts | 6 ++++-- .../purchases/kmp/buildlogic/convention/configureKotlin.kt | 5 +++-- build-logic/settings.gradle.kts | 1 + gradle/libs.versions.toml | 2 +- settings.gradle.kts | 2 ++ 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/apiTester/build.gradle.kts b/apiTester/build.gradle.kts index ff7d34f53..8de8f2e0a 100644 --- a/apiTester/build.gradle.kts +++ b/apiTester/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.android.library) @@ -9,8 +11,8 @@ kotlin { // Compilation targets: androidTarget { compilations.all { - kotlinOptions { - jvmTarget = libs.versions.java.get() + this@androidTarget.compilerOptions { + jvmTarget.value(JvmTarget.fromTarget(libs.versions.java.get())) } } diff --git a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/kmp/buildlogic/convention/configureKotlin.kt b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/kmp/buildlogic/convention/configureKotlin.kt index cf79c975f..cc593b03e 100644 --- a/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/kmp/buildlogic/convention/configureKotlin.kt +++ b/build-logic/convention/src/main/kotlin/com/revenuecat/purchases/kmp/buildlogic/convention/configureKotlin.kt @@ -4,6 +4,7 @@ import com.revenuecat.purchases.kmp.buildlogic.ktx.getVersion import com.revenuecat.purchases.kmp.buildlogic.ktx.versionCatalog import org.gradle.api.Project import org.gradle.kotlin.dsl.configure +import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension internal fun Project.configureKotlin() { @@ -11,8 +12,8 @@ internal fun Project.configureKotlin() { // Compilation targets: androidTarget { compilations.all { - kotlinOptions { - jvmTarget = versionCatalog.getVersion("java") + this@androidTarget.compilerOptions { + jvmTarget.value(JvmTarget.fromTarget(versionCatalog.getVersion("java"))) } } diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts index ccb31ae41..d5cadc574 100644 --- a/build-logic/settings.gradle.kts +++ b/build-logic/settings.gradle.kts @@ -2,6 +2,7 @@ dependencyResolutionManagement { repositories { + maven("https://packages.jetbrains.team/maven/p/kt/dev") google() mavenCentral() } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1493c0d82..9ac2e5720 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ android-targetSdk = "35" ios-deploymentTarget-core = "13.0" ios-deploymentTarget-ui = "15.0" java = "1.8" -kotlin = "2.1.21" +kotlin ="2.2.21-titan-208" revenuecat-common = "17.21.2" revenuecat-kmp = "2.2.12+17.21.2" diff --git a/settings.gradle.kts b/settings.gradle.kts index 23b60066a..b9004ea64 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -4,6 +4,7 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") pluginManagement { includeBuild("build-logic") repositories { + maven("https://packages.jetbrains.team/maven/p/kt/dev") google() gradlePluginPortal() mavenCentral() @@ -12,6 +13,7 @@ pluginManagement { dependencyResolutionManagement { repositories { + maven("https://packages.jetbrains.team/maven/p/kt/dev") google() mavenCentral() } From 13eaf2d2627b48985eec7e90029a81954d304a69 Mon Sep 17 00:00:00 2001 From: JayShortway <29483617+JayShortway@users.noreply.github.com> Date: Thu, 27 Nov 2025 10:37:42 +0100 Subject: [PATCH 2/8] Adjusts the package name in preparation of SPM import --- core/build.gradle.kts | 1 + .../purchases/kmp/LogHandler.ios.kt | 12 +++--- .../revenuecat/purchases/kmp/LogLevel.ios.kt | 12 +++--- .../revenuecat/purchases/kmp/Purchases.ios.kt | 38 ++++++++--------- .../purchases/kmp/PurchasesDelegate.ios.kt | 10 ++--- mappings/build.gradle.kts | 1 + .../kmp/mappings/CacheFetchPolicy.ios.kt | 10 ++--- .../kmp/mappings/CustomerInfo.ios.kt | 2 +- .../kmp/mappings/DiscountPaymentMode.ios.kt | 8 ++-- .../kmp/mappings/DiscountType.ios.kt | 8 ++-- .../kmp/mappings/EntitlementInfo.ios.kt | 42 +++++++++---------- .../kmp/mappings/EntitlementInfos.ios.kt | 4 +- .../mappings/IntroEligibilityStatus.ios.kt | 12 +++--- .../purchases/kmp/mappings/Offering.ios.kt | 4 +- .../purchases/kmp/mappings/Offerings.ios.kt | 6 +-- .../purchases/kmp/mappings/Package.ios.kt | 22 +++++----- .../purchases/kmp/mappings/Period.ios.kt | 12 +++--- .../mappings/PresentedOfferingContext.ios.kt | 4 +- .../purchases/kmp/mappings/Price.ios.kt | 6 +-- .../kmp/mappings/ProductCategory.ios.kt | 6 +-- .../purchases/kmp/mappings/ProductType.ios.kt | 10 ++--- .../kmp/mappings/PromotionalOffer.ios.kt | 2 +- .../kmp/mappings/PurchasingData.ios.kt | 2 +- .../kmp/mappings/StoreProduct.ios.kt | 4 +- .../kmp/mappings/StoreProductDiscount.ios.kt | 2 +- .../kmp/mappings/StoreTransaction.ios.kt | 2 +- .../purchases/kmp/mappings/Storefront.ios.kt | 2 +- .../kmp/mappings/VerificationResult.ios.kt | 10 ++--- .../kmp/mappings/VirtualCurrencies.ios.kt | 4 +- .../kmp/mappings/VirtualCurrency.ios.kt | 2 +- .../kmp/mappings/WinBackOffer.ios.kt | 2 +- models/build.gradle.kts | 1 + revenuecatui/build.gradle.kts | 1 + .../kmp/ui/revenuecatui/PaywallOptionsKtx.kt | 10 ++--- .../ui/revenuecatui/UIKitCustomerCenter.kt | 4 +- .../kmp/ui/revenuecatui/UIKitPaywall.kt | 4 +- 36 files changed, 143 insertions(+), 139 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 4464f36d1..bfc6b51bb 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -41,6 +41,7 @@ kotlin { pod("PurchasesHybridCommon") { version = libs.versions.revenuecat.common.get() extraOpts += listOf("-compiler-option", "-fmodules") + packageName = "swiftPMImport.com.revenuecat.purchases.models" } } } diff --git a/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/LogHandler.ios.kt b/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/LogHandler.ios.kt index 82568a166..13026bccc 100644 --- a/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/LogHandler.ios.kt +++ b/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/LogHandler.ios.kt @@ -1,11 +1,11 @@ package com.revenuecat.purchases.kmp -import cocoapods.PurchasesHybridCommon.RCLogLevel -import cocoapods.PurchasesHybridCommon.RCLogLevelDebug -import cocoapods.PurchasesHybridCommon.RCLogLevelError -import cocoapods.PurchasesHybridCommon.RCLogLevelInfo -import cocoapods.PurchasesHybridCommon.RCLogLevelVerbose -import cocoapods.PurchasesHybridCommon.RCLogLevelWarn +import swiftPMImport.com.revenuecat.purchases.models.RCLogLevel +import swiftPMImport.com.revenuecat.purchases.models.RCLogLevelDebug +import swiftPMImport.com.revenuecat.purchases.models.RCLogLevelError +import swiftPMImport.com.revenuecat.purchases.models.RCLogLevelInfo +import swiftPMImport.com.revenuecat.purchases.models.RCLogLevelVerbose +import swiftPMImport.com.revenuecat.purchases.models.RCLogLevelWarn private typealias IosLogHandler = (RCLogLevel, String?) -> Unit diff --git a/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/LogLevel.ios.kt b/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/LogLevel.ios.kt index a22565fb6..f75c12a1a 100644 --- a/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/LogLevel.ios.kt +++ b/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/LogLevel.ios.kt @@ -1,11 +1,11 @@ package com.revenuecat.purchases.kmp -import cocoapods.PurchasesHybridCommon.RCLogLevelDebug -import cocoapods.PurchasesHybridCommon.RCLogLevelError -import cocoapods.PurchasesHybridCommon.RCLogLevelInfo -import cocoapods.PurchasesHybridCommon.RCLogLevelVerbose -import cocoapods.PurchasesHybridCommon.RCLogLevelWarn -import cocoapods.PurchasesHybridCommon.RCLogLevel as IosLogLevel +import swiftPMImport.com.revenuecat.purchases.models.RCLogLevelDebug +import swiftPMImport.com.revenuecat.purchases.models.RCLogLevelError +import swiftPMImport.com.revenuecat.purchases.models.RCLogLevelInfo +import swiftPMImport.com.revenuecat.purchases.models.RCLogLevelVerbose +import swiftPMImport.com.revenuecat.purchases.models.RCLogLevelWarn +import swiftPMImport.com.revenuecat.purchases.models.RCLogLevel as IosLogLevel internal fun IosLogLevel.toLogLevel(): LogLevel = when (this) { diff --git a/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/Purchases.ios.kt b/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/Purchases.ios.kt index 8d45ef30f..ec24a2e04 100644 --- a/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/Purchases.ios.kt +++ b/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/Purchases.ios.kt @@ -1,21 +1,21 @@ package com.revenuecat.purchases.kmp -import cocoapods.PurchasesHybridCommon.IOSAPIAvailabilityChecker -import cocoapods.PurchasesHybridCommon.RCCommonFunctionality -import cocoapods.PurchasesHybridCommon.RCCustomerInfo -import cocoapods.PurchasesHybridCommon.RCIntroEligibility -import cocoapods.PurchasesHybridCommon.RCPurchaseParamsBuilder -import cocoapods.PurchasesHybridCommon.RCPurchasesDelegateProtocol -import cocoapods.PurchasesHybridCommon.RCStoreProduct -import cocoapods.PurchasesHybridCommon.RCStoreTransaction -import cocoapods.PurchasesHybridCommon.RCVirtualCurrencies -import cocoapods.PurchasesHybridCommon.configureWithAPIKey -import cocoapods.PurchasesHybridCommon.isWebPurchaseRedemptionURL -import cocoapods.PurchasesHybridCommon.parseAsWebPurchaseRedemptionWithUrlString -import cocoapods.PurchasesHybridCommon.recordPurchaseForProductID -import cocoapods.PurchasesHybridCommon.setAirshipChannelID -import cocoapods.PurchasesHybridCommon.setOnesignalUserID -import cocoapods.PurchasesHybridCommon.showStoreMessagesForTypes +import swiftPMImport.com.revenuecat.purchases.models.IOSAPIAvailabilityChecker +import swiftPMImport.com.revenuecat.purchases.models.RCCommonFunctionality +import swiftPMImport.com.revenuecat.purchases.models.RCCustomerInfo +import swiftPMImport.com.revenuecat.purchases.models.RCIntroEligibility +import swiftPMImport.com.revenuecat.purchases.models.RCPurchaseParamsBuilder +import swiftPMImport.com.revenuecat.purchases.models.RCPurchasesDelegateProtocol +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProduct +import swiftPMImport.com.revenuecat.purchases.models.RCStoreTransaction +import swiftPMImport.com.revenuecat.purchases.models.RCVirtualCurrencies +import swiftPMImport.com.revenuecat.purchases.models.configureWithAPIKey +import swiftPMImport.com.revenuecat.purchases.models.isWebPurchaseRedemptionURL +import swiftPMImport.com.revenuecat.purchases.models.parseAsWebPurchaseRedemptionWithUrlString +import swiftPMImport.com.revenuecat.purchases.models.recordPurchaseForProductID +import swiftPMImport.com.revenuecat.purchases.models.setAirshipChannelID +import swiftPMImport.com.revenuecat.purchases.models.setOnesignalUserID +import swiftPMImport.com.revenuecat.purchases.models.showStoreMessagesForTypes import com.revenuecat.purchases.kmp.ktx.mapEntriesNotNull import com.revenuecat.purchases.kmp.mappings.buildStoreTransaction import com.revenuecat.purchases.kmp.mappings.toCustomerInfo @@ -61,9 +61,9 @@ import com.revenuecat.purchases.kmp.models.WinBackOffer import com.revenuecat.purchases.kmp.strings.ConfigureStrings import platform.Foundation.NSError import platform.Foundation.NSURL -import cocoapods.PurchasesHybridCommon.RCDangerousSettings as IosDangerousSettings -import cocoapods.PurchasesHybridCommon.RCPurchases as IosPurchases -import cocoapods.PurchasesHybridCommon.RCWinBackOffer as NativeIosWinBackOffer +import swiftPMImport.com.revenuecat.purchases.models.RCDangerousSettings as IosDangerousSettings +import swiftPMImport.com.revenuecat.purchases.models.RCPurchases as IosPurchases +import swiftPMImport.com.revenuecat.purchases.models.RCWinBackOffer as NativeIosWinBackOffer public actual class Purchases private constructor(private val iosPurchases: IosPurchases) { public actual companion object { diff --git a/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/PurchasesDelegate.ios.kt b/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/PurchasesDelegate.ios.kt index 81d5f065d..a5e954ed6 100644 --- a/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/PurchasesDelegate.ios.kt +++ b/core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/PurchasesDelegate.ios.kt @@ -1,10 +1,10 @@ package com.revenuecat.purchases.kmp -import cocoapods.PurchasesHybridCommon.RCCustomerInfo -import cocoapods.PurchasesHybridCommon.RCPurchases -import cocoapods.PurchasesHybridCommon.RCPurchasesDelegateProtocol -import cocoapods.PurchasesHybridCommon.RCStoreProduct -import cocoapods.PurchasesHybridCommon.RCStoreTransaction +import swiftPMImport.com.revenuecat.purchases.models.RCCustomerInfo +import swiftPMImport.com.revenuecat.purchases.models.RCPurchases +import swiftPMImport.com.revenuecat.purchases.models.RCPurchasesDelegateProtocol +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProduct +import swiftPMImport.com.revenuecat.purchases.models.RCStoreTransaction import com.revenuecat.purchases.kmp.mappings.toCustomerInfo import com.revenuecat.purchases.kmp.mappings.toPurchasesErrorOrThrow import com.revenuecat.purchases.kmp.mappings.toStoreProduct diff --git a/mappings/build.gradle.kts b/mappings/build.gradle.kts index 11b249601..9f968a5ef 100644 --- a/mappings/build.gradle.kts +++ b/mappings/build.gradle.kts @@ -27,6 +27,7 @@ kotlin { pod("PurchasesHybridCommon") { version = libs.versions.revenuecat.common.get() extraOpts += listOf("-compiler-option", "-fmodules") + packageName = "swiftPMImport.com.revenuecat.purchases.models" } } } diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/CacheFetchPolicy.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/CacheFetchPolicy.ios.kt index 7cb93346c..242526c1f 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/CacheFetchPolicy.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/CacheFetchPolicy.ios.kt @@ -1,11 +1,11 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.RCCacheFetchPolicyCachedOrFetched -import cocoapods.PurchasesHybridCommon.RCCacheFetchPolicyFetchCurrent -import cocoapods.PurchasesHybridCommon.RCCacheFetchPolicyFromCacheOnly -import cocoapods.PurchasesHybridCommon.RCCacheFetchPolicyNotStaleCachedOrFetched +import swiftPMImport.com.revenuecat.purchases.models.RCCacheFetchPolicyCachedOrFetched +import swiftPMImport.com.revenuecat.purchases.models.RCCacheFetchPolicyFetchCurrent +import swiftPMImport.com.revenuecat.purchases.models.RCCacheFetchPolicyFromCacheOnly +import swiftPMImport.com.revenuecat.purchases.models.RCCacheFetchPolicyNotStaleCachedOrFetched import com.revenuecat.purchases.kmp.models.CacheFetchPolicy -import cocoapods.PurchasesHybridCommon.RCCacheFetchPolicy as IosCacheFetchPolicy +import swiftPMImport.com.revenuecat.purchases.models.RCCacheFetchPolicy as IosCacheFetchPolicy public fun CacheFetchPolicy.toIosCacheFetchPolicy(): IosCacheFetchPolicy = when (this) { diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/CustomerInfo.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/CustomerInfo.ios.kt index 49c12c2e7..7d3b8aa4f 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/CustomerInfo.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/CustomerInfo.ios.kt @@ -4,7 +4,7 @@ import com.revenuecat.purchases.kmp.mappings.ktx.toEpochMilliseconds import com.revenuecat.purchases.kmp.models.CustomerInfo import platform.Foundation.dictionaryWithValuesForKeys import platform.darwin.NSObject -import cocoapods.PurchasesHybridCommon.RCCustomerInfo as IosCustomerInfo +import swiftPMImport.com.revenuecat.purchases.models.RCCustomerInfo as IosCustomerInfo public fun IosCustomerInfo.toCustomerInfo(): CustomerInfo { @Suppress("UNCHECKED_CAST") diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/DiscountPaymentMode.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/DiscountPaymentMode.ios.kt index c219fd583..c079c8a2d 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/DiscountPaymentMode.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/DiscountPaymentMode.ios.kt @@ -1,10 +1,10 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.RCPaymentModeFreeTrial -import cocoapods.PurchasesHybridCommon.RCPaymentModePayAsYouGo -import cocoapods.PurchasesHybridCommon.RCPaymentModePayUpFront +import swiftPMImport.com.revenuecat.purchases.models.RCPaymentModeFreeTrial +import swiftPMImport.com.revenuecat.purchases.models.RCPaymentModePayAsYouGo +import swiftPMImport.com.revenuecat.purchases.models.RCPaymentModePayUpFront import com.revenuecat.purchases.kmp.models.DiscountPaymentMode -import cocoapods.PurchasesHybridCommon.RCPaymentMode as IosDiscountPaymentMode +import swiftPMImport.com.revenuecat.purchases.models.RCPaymentMode as IosDiscountPaymentMode internal fun IosDiscountPaymentMode.toDiscountPaymentMode(): DiscountPaymentMode = when (this) { diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/DiscountType.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/DiscountType.ios.kt index 26d3842d0..8fe1399e5 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/DiscountType.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/DiscountType.ios.kt @@ -1,10 +1,10 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.RCDiscountTypeIntroductory -import cocoapods.PurchasesHybridCommon.RCDiscountTypePromotional -import cocoapods.PurchasesHybridCommon.RCDiscountTypeWinBack +import swiftPMImport.com.revenuecat.purchases.models.RCDiscountTypeIntroductory +import swiftPMImport.com.revenuecat.purchases.models.RCDiscountTypePromotional +import swiftPMImport.com.revenuecat.purchases.models.RCDiscountTypeWinBack import com.revenuecat.purchases.kmp.models.DiscountType -import cocoapods.PurchasesHybridCommon.RCDiscountType as IosDiscountType +import swiftPMImport.com.revenuecat.purchases.models.RCDiscountType as IosDiscountType internal fun IosDiscountType.toDiscountType(): DiscountType = when(this) { diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/EntitlementInfo.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/EntitlementInfo.ios.kt index dee03fe70..8df4559a2 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/EntitlementInfo.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/EntitlementInfo.ios.kt @@ -1,31 +1,31 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.RCAmazon -import cocoapods.PurchasesHybridCommon.RCAppStore -import cocoapods.PurchasesHybridCommon.RCBilling -import cocoapods.PurchasesHybridCommon.RCEntitlementInfo -import cocoapods.PurchasesHybridCommon.RCIntro -import cocoapods.PurchasesHybridCommon.RCMacAppStore -import cocoapods.PurchasesHybridCommon.RCNormal -import cocoapods.PurchasesHybridCommon.RCPaddle -import cocoapods.PurchasesHybridCommon.RCPrepaid -import cocoapods.PurchasesHybridCommon.RCPlayStore -import cocoapods.PurchasesHybridCommon.RCPromotional -import cocoapods.PurchasesHybridCommon.RCPurchaseOwnershipTypeFamilyShared -import cocoapods.PurchasesHybridCommon.RCPurchaseOwnershipTypePurchased -import cocoapods.PurchasesHybridCommon.RCPurchaseOwnershipTypeUnknown -import cocoapods.PurchasesHybridCommon.RCStripe -import cocoapods.PurchasesHybridCommon.RCTestStore -import cocoapods.PurchasesHybridCommon.RCTrial -import cocoapods.PurchasesHybridCommon.RCUnknownStore +import swiftPMImport.com.revenuecat.purchases.models.RCAmazon +import swiftPMImport.com.revenuecat.purchases.models.RCAppStore +import swiftPMImport.com.revenuecat.purchases.models.RCBilling +import swiftPMImport.com.revenuecat.purchases.models.RCEntitlementInfo +import swiftPMImport.com.revenuecat.purchases.models.RCIntro +import swiftPMImport.com.revenuecat.purchases.models.RCMacAppStore +import swiftPMImport.com.revenuecat.purchases.models.RCNormal +import swiftPMImport.com.revenuecat.purchases.models.RCPaddle +import swiftPMImport.com.revenuecat.purchases.models.RCPrepaid +import swiftPMImport.com.revenuecat.purchases.models.RCPlayStore +import swiftPMImport.com.revenuecat.purchases.models.RCPromotional +import swiftPMImport.com.revenuecat.purchases.models.RCPurchaseOwnershipTypeFamilyShared +import swiftPMImport.com.revenuecat.purchases.models.RCPurchaseOwnershipTypePurchased +import swiftPMImport.com.revenuecat.purchases.models.RCPurchaseOwnershipTypeUnknown +import swiftPMImport.com.revenuecat.purchases.models.RCStripe +import swiftPMImport.com.revenuecat.purchases.models.RCTestStore +import swiftPMImport.com.revenuecat.purchases.models.RCTrial +import swiftPMImport.com.revenuecat.purchases.models.RCUnknownStore import com.revenuecat.purchases.kmp.mappings.ktx.toEpochMilliseconds import com.revenuecat.purchases.kmp.models.EntitlementInfo import com.revenuecat.purchases.kmp.models.OwnershipType import com.revenuecat.purchases.kmp.models.PeriodType import com.revenuecat.purchases.kmp.models.Store -import cocoapods.PurchasesHybridCommon.RCPeriodType as IosPeriodType -import cocoapods.PurchasesHybridCommon.RCPurchaseOwnershipType as IosOwnershipType -import cocoapods.PurchasesHybridCommon.RCStore as IosStore +import swiftPMImport.com.revenuecat.purchases.models.RCPeriodType as IosPeriodType +import swiftPMImport.com.revenuecat.purchases.models.RCPurchaseOwnershipType as IosOwnershipType +import swiftPMImport.com.revenuecat.purchases.models.RCStore as IosStore internal fun RCEntitlementInfo.toEntitlementInfo(): EntitlementInfo { return EntitlementInfo( diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/EntitlementInfos.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/EntitlementInfos.ios.kt index e7188b13f..2fb312da7 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/EntitlementInfos.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/EntitlementInfos.ios.kt @@ -1,7 +1,7 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.RCEntitlementInfo -import cocoapods.PurchasesHybridCommon.RCEntitlementInfos +import swiftPMImport.com.revenuecat.purchases.models.RCEntitlementInfo +import swiftPMImport.com.revenuecat.purchases.models.RCEntitlementInfos import com.revenuecat.purchases.kmp.mappings.ktx.mapEntries import com.revenuecat.purchases.kmp.models.EntitlementInfos diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/IntroEligibilityStatus.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/IntroEligibilityStatus.ios.kt index 4f42b4ccc..625dd7204 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/IntroEligibilityStatus.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/IntroEligibilityStatus.ios.kt @@ -1,11 +1,11 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.RCIntroEligibility -import cocoapods.PurchasesHybridCommon.RCIntroEligibilityStatus -import cocoapods.PurchasesHybridCommon.RCIntroEligibilityStatusEligible -import cocoapods.PurchasesHybridCommon.RCIntroEligibilityStatusIneligible -import cocoapods.PurchasesHybridCommon.RCIntroEligibilityStatusNoIntroOfferExists -import cocoapods.PurchasesHybridCommon.RCIntroEligibilityStatusUnknown +import swiftPMImport.com.revenuecat.purchases.models.RCIntroEligibility +import swiftPMImport.com.revenuecat.purchases.models.RCIntroEligibilityStatus +import swiftPMImport.com.revenuecat.purchases.models.RCIntroEligibilityStatusEligible +import swiftPMImport.com.revenuecat.purchases.models.RCIntroEligibilityStatusIneligible +import swiftPMImport.com.revenuecat.purchases.models.RCIntroEligibilityStatusNoIntroOfferExists +import swiftPMImport.com.revenuecat.purchases.models.RCIntroEligibilityStatusUnknown import com.revenuecat.purchases.kmp.models.IntroEligibilityStatus public fun RCIntroEligibility.toIntroEligibilityStatus(): IntroEligibilityStatus = diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Offering.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Offering.ios.kt index 89420811a..a97fd5f77 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Offering.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Offering.ios.kt @@ -3,8 +3,8 @@ package com.revenuecat.purchases.kmp.mappings import com.revenuecat.purchases.kmp.models.Offering import com.revenuecat.purchases.kmp.models.Package import com.revenuecat.purchases.kmp.mappings.ktx.mapEntries -import cocoapods.PurchasesHybridCommon.RCOffering as NativeIosOffering -import cocoapods.PurchasesHybridCommon.RCPackage as NativeIosPackage +import swiftPMImport.com.revenuecat.purchases.models.RCOffering as NativeIosOffering +import swiftPMImport.com.revenuecat.purchases.models.RCPackage as NativeIosPackage public fun NativeIosOffering.toOffering(): Offering = IosOffering(this) diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Offerings.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Offerings.ios.kt index 993134701..d3f99f912 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Offerings.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Offerings.ios.kt @@ -1,10 +1,10 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.currentOfferingForPlacement +import swiftPMImport.com.revenuecat.purchases.models.currentOfferingForPlacement import com.revenuecat.purchases.kmp.mappings.ktx.mapEntries import com.revenuecat.purchases.kmp.models.Offerings -import cocoapods.PurchasesHybridCommon.RCOffering as IosOffering -import cocoapods.PurchasesHybridCommon.RCOfferings as IosOfferings +import swiftPMImport.com.revenuecat.purchases.models.RCOffering as IosOffering +import swiftPMImport.com.revenuecat.purchases.models.RCOfferings as IosOfferings public fun IosOfferings.toOfferings(): Offerings = Offerings( diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Package.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Package.ios.kt index 34ded998e..cede6433b 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Package.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Package.ios.kt @@ -3,17 +3,17 @@ package com.revenuecat.purchases.kmp.mappings import com.revenuecat.purchases.kmp.models.PackageType import com.revenuecat.purchases.kmp.models.PresentedOfferingContext import com.revenuecat.purchases.kmp.models.StoreProduct -import cocoapods.PurchasesHybridCommon.RCPackage as NativeIosPackage -import cocoapods.PurchasesHybridCommon.RCPackageType as IosPackageType -import cocoapods.PurchasesHybridCommon.RCPackageTypeAnnual as IosPackageTypeAnnual -import cocoapods.PurchasesHybridCommon.RCPackageTypeCustom as IosPackageTypeCustom -import cocoapods.PurchasesHybridCommon.RCPackageTypeLifetime as IosPackageTypeLifetime -import cocoapods.PurchasesHybridCommon.RCPackageTypeMonthly as IosPackageTypeMonthly -import cocoapods.PurchasesHybridCommon.RCPackageTypeSixMonth as IosPackageTypeSixMonth -import cocoapods.PurchasesHybridCommon.RCPackageTypeThreeMonth as IosPackageTypeThreeMonth -import cocoapods.PurchasesHybridCommon.RCPackageTypeTwoMonth as IosPackageTypeTwoMonth -import cocoapods.PurchasesHybridCommon.RCPackageTypeUnknown as IosPackageTypeUnknown -import cocoapods.PurchasesHybridCommon.RCPackageTypeWeekly as IosPackageTypeWeekly +import swiftPMImport.com.revenuecat.purchases.models.RCPackage as NativeIosPackage +import swiftPMImport.com.revenuecat.purchases.models.RCPackageType as IosPackageType +import swiftPMImport.com.revenuecat.purchases.models.RCPackageTypeAnnual as IosPackageTypeAnnual +import swiftPMImport.com.revenuecat.purchases.models.RCPackageTypeCustom as IosPackageTypeCustom +import swiftPMImport.com.revenuecat.purchases.models.RCPackageTypeLifetime as IosPackageTypeLifetime +import swiftPMImport.com.revenuecat.purchases.models.RCPackageTypeMonthly as IosPackageTypeMonthly +import swiftPMImport.com.revenuecat.purchases.models.RCPackageTypeSixMonth as IosPackageTypeSixMonth +import swiftPMImport.com.revenuecat.purchases.models.RCPackageTypeThreeMonth as IosPackageTypeThreeMonth +import swiftPMImport.com.revenuecat.purchases.models.RCPackageTypeTwoMonth as IosPackageTypeTwoMonth +import swiftPMImport.com.revenuecat.purchases.models.RCPackageTypeUnknown as IosPackageTypeUnknown +import swiftPMImport.com.revenuecat.purchases.models.RCPackageTypeWeekly as IosPackageTypeWeekly import com.revenuecat.purchases.kmp.models.Package as RCPackage public fun NativeIosPackage.toPackage(): RCPackage = IosPackage(this) diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Period.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Period.ios.kt index 51a9cc413..7991e2348 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Period.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Period.ios.kt @@ -1,11 +1,11 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.RCSubscriptionPeriod as IosPeriod -import cocoapods.PurchasesHybridCommon.RCSubscriptionPeriodUnit as IosPeriodUnit -import cocoapods.PurchasesHybridCommon.RCSubscriptionPeriodUnitDay -import cocoapods.PurchasesHybridCommon.RCSubscriptionPeriodUnitMonth -import cocoapods.PurchasesHybridCommon.RCSubscriptionPeriodUnitWeek -import cocoapods.PurchasesHybridCommon.RCSubscriptionPeriodUnitYear +import swiftPMImport.com.revenuecat.purchases.models.RCSubscriptionPeriod as IosPeriod +import swiftPMImport.com.revenuecat.purchases.models.RCSubscriptionPeriodUnit as IosPeriodUnit +import swiftPMImport.com.revenuecat.purchases.models.RCSubscriptionPeriodUnitDay +import swiftPMImport.com.revenuecat.purchases.models.RCSubscriptionPeriodUnitMonth +import swiftPMImport.com.revenuecat.purchases.models.RCSubscriptionPeriodUnitWeek +import swiftPMImport.com.revenuecat.purchases.models.RCSubscriptionPeriodUnitYear import com.revenuecat.purchases.kmp.models.Period import com.revenuecat.purchases.kmp.models.PeriodUnit diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/PresentedOfferingContext.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/PresentedOfferingContext.ios.kt index 331b5f944..63c525aff 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/PresentedOfferingContext.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/PresentedOfferingContext.ios.kt @@ -2,8 +2,8 @@ package com.revenuecat.purchases.kmp.mappings import com.revenuecat.purchases.kmp.models.PresentedOfferingContext import com.revenuecat.purchases.kmp.models.PresentedOfferingTargetingContext -import cocoapods.PurchasesHybridCommon.RCPresentedOfferingContext as IosPresentedOfferingContext -import cocoapods.PurchasesHybridCommon.RCTargetingContext as IosPresentedOfferingTargetingContext +import swiftPMImport.com.revenuecat.purchases.models.RCPresentedOfferingContext as IosPresentedOfferingContext +import swiftPMImport.com.revenuecat.purchases.models.RCTargetingContext as IosPresentedOfferingTargetingContext internal fun IosPresentedOfferingContext.toPresentedOfferingContext() = PresentedOfferingContext( offeringIdentifier = offeringIdentifier(), diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Price.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Price.ios.kt index e4ae38397..79a971ff6 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Price.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Price.ios.kt @@ -1,8 +1,8 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.RCStoreProduct -import cocoapods.PurchasesHybridCommon.RCStoreProductDiscount -import cocoapods.PurchasesHybridCommon.priceAmount +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProduct +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProductDiscount +import swiftPMImport.com.revenuecat.purchases.models.priceAmount import com.revenuecat.purchases.kmp.models.Price internal fun RCStoreProduct.toPrice(): Price = diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/ProductCategory.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/ProductCategory.ios.kt index c2323fc34..ea0552612 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/ProductCategory.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/ProductCategory.ios.kt @@ -1,8 +1,8 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.RCStoreProductCategory -import cocoapods.PurchasesHybridCommon.RCStoreProductCategoryNonSubscription -import cocoapods.PurchasesHybridCommon.RCStoreProductCategorySubscription +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProductCategory +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProductCategoryNonSubscription +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProductCategorySubscription import com.revenuecat.purchases.kmp.models.ProductCategory internal fun RCStoreProductCategory.toProductCategory(): ProductCategory = diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/ProductType.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/ProductType.ios.kt index dcd737569..5ef89ee5a 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/ProductType.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/ProductType.ios.kt @@ -1,11 +1,11 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.RCStoreProductTypeAutoRenewableSubscription -import cocoapods.PurchasesHybridCommon.RCStoreProductTypeConsumable -import cocoapods.PurchasesHybridCommon.RCStoreProductTypeNonConsumable -import cocoapods.PurchasesHybridCommon.RCStoreProductTypeNonRenewableSubscription +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProductTypeAutoRenewableSubscription +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProductTypeConsumable +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProductTypeNonConsumable +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProductTypeNonRenewableSubscription import com.revenuecat.purchases.kmp.models.ProductType -import cocoapods.PurchasesHybridCommon.RCStoreProductType as IosStoreProductType +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProductType as IosStoreProductType internal fun IosStoreProductType.toProductType(): ProductType = when (this) { diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/PromotionalOffer.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/PromotionalOffer.ios.kt index 631eb89a7..245271a43 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/PromotionalOffer.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/PromotionalOffer.ios.kt @@ -2,7 +2,7 @@ package com.revenuecat.purchases.kmp.mappings import com.revenuecat.purchases.kmp.models.PromotionalOffer import com.revenuecat.purchases.kmp.models.StoreProductDiscount -import cocoapods.PurchasesHybridCommon.RCPromotionalOffer as NativeIosPromotionalOffer +import swiftPMImport.com.revenuecat.purchases.models.RCPromotionalOffer as NativeIosPromotionalOffer public fun NativeIosPromotionalOffer.toPromotionalOffer(): PromotionalOffer = IosPromotionalOffer(this) diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/PurchasingData.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/PurchasingData.ios.kt index 1edf74516..b25bc70f9 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/PurchasingData.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/PurchasingData.ios.kt @@ -2,7 +2,7 @@ package com.revenuecat.purchases.kmp.mappings import com.revenuecat.purchases.kmp.models.ProductType import com.revenuecat.purchases.kmp.models.PurchasingData -import cocoapods.PurchasesHybridCommon.RCStoreProduct as NativeIosStoreProduct +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProduct as NativeIosStoreProduct internal class IosPurchasingData( product: NativeIosStoreProduct diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/StoreProduct.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/StoreProduct.ios.kt index 85adf11e0..4a361ba3b 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/StoreProduct.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/StoreProduct.ios.kt @@ -10,8 +10,8 @@ import com.revenuecat.purchases.kmp.models.StoreProduct import com.revenuecat.purchases.kmp.models.StoreProductDiscount import com.revenuecat.purchases.kmp.models.SubscriptionOption import com.revenuecat.purchases.kmp.models.SubscriptionOptions -import cocoapods.PurchasesHybridCommon.RCStoreProduct as NativeIosStoreProduct -import cocoapods.PurchasesHybridCommon.RCStoreProductDiscount as IosStoreProductDiscount +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProduct as NativeIosStoreProduct +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProductDiscount as IosStoreProductDiscount public fun NativeIosStoreProduct.toStoreProduct(): StoreProduct = IosStoreProduct(this) diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/StoreProductDiscount.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/StoreProductDiscount.ios.kt index 2f487d24e..07bcc9680 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/StoreProductDiscount.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/StoreProductDiscount.ios.kt @@ -5,7 +5,7 @@ import com.revenuecat.purchases.kmp.models.DiscountType import com.revenuecat.purchases.kmp.models.Period import com.revenuecat.purchases.kmp.models.Price import com.revenuecat.purchases.kmp.models.StoreProductDiscount -import cocoapods.PurchasesHybridCommon.RCStoreProductDiscount as NativeIosStoreProductDiscount +import swiftPMImport.com.revenuecat.purchases.models.RCStoreProductDiscount as NativeIosStoreProductDiscount public fun NativeIosStoreProductDiscount.toStoreProductDiscount(): StoreProductDiscount = IosStoreProductDiscount(this) diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/StoreTransaction.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/StoreTransaction.ios.kt index 143498ff8..6c2332b02 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/StoreTransaction.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/StoreTransaction.ios.kt @@ -2,7 +2,7 @@ package com.revenuecat.purchases.kmp.mappings import com.revenuecat.purchases.kmp.mappings.ktx.toEpochMilliseconds import com.revenuecat.purchases.kmp.models.StoreTransaction -import cocoapods.PurchasesHybridCommon.RCStoreTransaction as IosStoreTransaction +import swiftPMImport.com.revenuecat.purchases.models.RCStoreTransaction as IosStoreTransaction public fun IosStoreTransaction.toStoreTransaction(): StoreTransaction = StoreTransaction( diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Storefront.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Storefront.ios.kt index 62c3e21bf..5d8fe2a3d 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Storefront.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/Storefront.ios.kt @@ -1,6 +1,6 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.RCStorefront +import swiftPMImport.com.revenuecat.purchases.models.RCStorefront import com.revenuecat.purchases.kmp.models.Storefront public fun RCStorefront.toStorefront(): Storefront = diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/VerificationResult.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/VerificationResult.ios.kt index 24adaa7f5..7f5b55c4d 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/VerificationResult.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/VerificationResult.ios.kt @@ -1,11 +1,11 @@ package com.revenuecat.purchases.kmp.mappings import com.revenuecat.purchases.kmp.models.VerificationResult -import cocoapods.PurchasesHybridCommon.RCVerificationResult as IosVerificationResult -import cocoapods.PurchasesHybridCommon.RCVerificationResultFailed as IosVerificationResultFailed -import cocoapods.PurchasesHybridCommon.RCVerificationResultNotRequested as IosVerificationResultNotRequested -import cocoapods.PurchasesHybridCommon.RCVerificationResultVerified as IosVerificationResultVerified -import cocoapods.PurchasesHybridCommon.RCVerificationResultVerifiedOnDevice as IosVerificationResultVerifiedOnDevice +import swiftPMImport.com.revenuecat.purchases.models.RCVerificationResult as IosVerificationResult +import swiftPMImport.com.revenuecat.purchases.models.RCVerificationResultFailed as IosVerificationResultFailed +import swiftPMImport.com.revenuecat.purchases.models.RCVerificationResultNotRequested as IosVerificationResultNotRequested +import swiftPMImport.com.revenuecat.purchases.models.RCVerificationResultVerified as IosVerificationResultVerified +import swiftPMImport.com.revenuecat.purchases.models.RCVerificationResultVerifiedOnDevice as IosVerificationResultVerifiedOnDevice internal fun IosVerificationResult.toVerificationResult(): VerificationResult = when (this) { diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/VirtualCurrencies.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/VirtualCurrencies.ios.kt index d3809a353..aeab796d4 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/VirtualCurrencies.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/VirtualCurrencies.ios.kt @@ -1,9 +1,9 @@ package com.revenuecat.purchases.kmp.mappings -import cocoapods.PurchasesHybridCommon.RCVirtualCurrency +import swiftPMImport.com.revenuecat.purchases.models.RCVirtualCurrency import com.revenuecat.purchases.kmp.mappings.ktx.mapEntries import com.revenuecat.purchases.kmp.models.VirtualCurrencies -import cocoapods.PurchasesHybridCommon.RCVirtualCurrencies as IosVirtualCurrencies +import swiftPMImport.com.revenuecat.purchases.models.RCVirtualCurrencies as IosVirtualCurrencies public fun IosVirtualCurrencies.toVirtualCurrencies(): VirtualCurrencies { return VirtualCurrencies( diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/VirtualCurrency.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/VirtualCurrency.ios.kt index f15879773..96625e437 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/VirtualCurrency.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/VirtualCurrency.ios.kt @@ -1,7 +1,7 @@ package com.revenuecat.purchases.kmp.mappings import com.revenuecat.purchases.kmp.models.VirtualCurrency -import cocoapods.PurchasesHybridCommon.RCVirtualCurrency as IosVirtualCurrency +import swiftPMImport.com.revenuecat.purchases.models.RCVirtualCurrency as IosVirtualCurrency public fun IosVirtualCurrency.toVirtualCurrency(): VirtualCurrency { return VirtualCurrency( diff --git a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/WinBackOffer.ios.kt b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/WinBackOffer.ios.kt index 3ca3b880c..f47261870 100644 --- a/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/WinBackOffer.ios.kt +++ b/mappings/src/iosMain/kotlin/com/revenuecat/purchases/kmp/mappings/WinBackOffer.ios.kt @@ -2,7 +2,7 @@ package com.revenuecat.purchases.kmp.mappings import com.revenuecat.purchases.kmp.models.StoreProductDiscount import com.revenuecat.purchases.kmp.models.WinBackOffer -import cocoapods.PurchasesHybridCommon.RCWinBackOffer as NativeIosWinBackOffer +import swiftPMImport.com.revenuecat.purchases.models.RCWinBackOffer as NativeIosWinBackOffer public fun NativeIosWinBackOffer.toWinBackOffer(): WinBackOffer = IosWinBackOffer(this) diff --git a/models/build.gradle.kts b/models/build.gradle.kts index 4feb9c14f..42219cb2c 100644 --- a/models/build.gradle.kts +++ b/models/build.gradle.kts @@ -24,6 +24,7 @@ kotlin { pod("PurchasesHybridCommon") { version = libs.versions.revenuecat.common.get() extraOpts += listOf("-compiler-option", "-fmodules") + packageName = "swiftPMImport.com.revenuecat.purchases.models" } } } diff --git a/revenuecatui/build.gradle.kts b/revenuecatui/build.gradle.kts index f29d0b9e9..f4d32a017 100644 --- a/revenuecatui/build.gradle.kts +++ b/revenuecatui/build.gradle.kts @@ -31,6 +31,7 @@ kotlin { pod("PurchasesHybridCommonUI") { version = libs.versions.revenuecat.common.get() extraOpts += listOf("-compiler-option", "-fmodules") + packageName = "swiftPMImport.com.revenuecat.purchases.revenuecatui" } } } diff --git a/revenuecatui/src/iosMain/kotlin/com/revenuecat/purchases/kmp/ui/revenuecatui/PaywallOptionsKtx.kt b/revenuecatui/src/iosMain/kotlin/com/revenuecat/purchases/kmp/ui/revenuecatui/PaywallOptionsKtx.kt index cf1d77900..9060b86ed 100644 --- a/revenuecatui/src/iosMain/kotlin/com/revenuecat/purchases/kmp/ui/revenuecatui/PaywallOptionsKtx.kt +++ b/revenuecatui/src/iosMain/kotlin/com/revenuecat/purchases/kmp/ui/revenuecatui/PaywallOptionsKtx.kt @@ -1,7 +1,7 @@ package com.revenuecat.purchases.kmp.ui.revenuecatui -import cocoapods.PurchasesHybridCommonUI.RCPaywallViewController -import cocoapods.PurchasesHybridCommonUI.RCPaywallViewControllerDelegateProtocol +import swiftPMImport.com.revenuecat.purchases.revenuecatui.RCPaywallViewController +import swiftPMImport.com.revenuecat.purchases.revenuecatui.RCPaywallViewControllerDelegateProtocol import com.revenuecat.purchases.kmp.mappings.toCustomerInfo import com.revenuecat.purchases.kmp.mappings.toPackage import com.revenuecat.purchases.kmp.mappings.toPurchasesErrorOrThrow @@ -13,9 +13,9 @@ import kotlinx.cinterop.pointed import platform.CoreGraphics.CGSize import platform.Foundation.NSError import platform.darwin.NSObject -import cocoapods.PurchasesHybridCommon.RCCustomerInfo as PhcCustomerInfo -import cocoapods.PurchasesHybridCommon.RCPackage as PhcPackage -import cocoapods.PurchasesHybridCommon.RCStoreTransaction as PhcStoreTransaction +import swiftPMImport.com.revenuecat.purchases.models.RCCustomerInfo as PhcCustomerInfo +import swiftPMImport.com.revenuecat.purchases.models.RCPackage as PhcPackage +import swiftPMImport.com.revenuecat.purchases.models.RCStoreTransaction as PhcStoreTransaction import objcnames.classes.RCCustomerInfo as ObjcNamesCustomerInfo import objcnames.classes.RCPackage as ObjcNamesPackage import objcnames.classes.RCStoreTransaction as ObjcNamesStoreTransaction diff --git a/revenuecatui/src/iosMain/kotlin/com/revenuecat/purchases/kmp/ui/revenuecatui/UIKitCustomerCenter.kt b/revenuecatui/src/iosMain/kotlin/com/revenuecat/purchases/kmp/ui/revenuecatui/UIKitCustomerCenter.kt index 58fb8a6e0..7edb48dd0 100644 --- a/revenuecatui/src/iosMain/kotlin/com/revenuecat/purchases/kmp/ui/revenuecatui/UIKitCustomerCenter.kt +++ b/revenuecatui/src/iosMain/kotlin/com/revenuecat/purchases/kmp/ui/revenuecatui/UIKitCustomerCenter.kt @@ -4,8 +4,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.viewinterop.UIKitViewController -import cocoapods.PurchasesHybridCommonUI.CustomerCenterUIViewController -import cocoapods.PurchasesHybridCommonUI.RCCustomerCenterViewControllerDelegateWrapperProtocol +import swiftPMImport.com.revenuecat.purchases.revenuecatui.CustomerCenterUIViewController +import swiftPMImport.com.revenuecat.purchases.revenuecatui.RCCustomerCenterViewControllerDelegateWrapperProtocol import com.revenuecat.purchases.kmp.ui.revenuecatui.modifier.layoutViewController import com.revenuecat.purchases.kmp.ui.revenuecatui.modifier.rememberLayoutViewControllerState import platform.darwin.NSObject diff --git a/revenuecatui/src/iosMain/kotlin/com/revenuecat/purchases/kmp/ui/revenuecatui/UIKitPaywall.kt b/revenuecatui/src/iosMain/kotlin/com/revenuecat/purchases/kmp/ui/revenuecatui/UIKitPaywall.kt index e1c41ac6b..93baf98df 100644 --- a/revenuecatui/src/iosMain/kotlin/com/revenuecat/purchases/kmp/ui/revenuecatui/UIKitPaywall.kt +++ b/revenuecatui/src/iosMain/kotlin/com/revenuecat/purchases/kmp/ui/revenuecatui/UIKitPaywall.kt @@ -4,8 +4,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.viewinterop.UIKitViewController -import cocoapods.PurchasesHybridCommonUI.RCPaywallFooterViewController -import cocoapods.PurchasesHybridCommonUI.RCPaywallViewController +import swiftPMImport.com.revenuecat.purchases.revenuecatui.RCPaywallFooterViewController +import swiftPMImport.com.revenuecat.purchases.revenuecatui.RCPaywallViewController import com.revenuecat.purchases.kmp.mappings.toIosOffering import com.revenuecat.purchases.kmp.ui.revenuecatui.modifier.layoutViewController import com.revenuecat.purchases.kmp.ui.revenuecatui.modifier.rememberLayoutViewControllerState From f23a0b6749004ec1dd4c79b94908f93570485989 Mon Sep 17 00:00:00 2001 From: JayShortway <29483617+JayShortway@users.noreply.github.com> Date: Wed, 26 Nov 2025 16:33:32 +0100 Subject: [PATCH 3/8] Migrates modules from CocoaPods to SPM --- core/build.gradle.kts | 21 ++++-------- core/core.podspec | 54 ------------------------------- mappings/build.gradle.kts | 16 ++++----- mappings/mappings.podspec | 54 ------------------------------- models/build.gradle.kts | 16 ++++----- models/models.podspec | 54 ------------------------------- revenuecatui/build.gradle.kts | 16 ++++----- revenuecatui/revenuecatui.podspec | 54 ------------------------------- 8 files changed, 24 insertions(+), 261 deletions(-) delete mode 100644 core/core.podspec delete mode 100644 mappings/mappings.podspec delete mode 100644 models/models.podspec delete mode 100644 revenuecatui/revenuecatui.podspec diff --git a/core/build.gradle.kts b/core/build.gradle.kts index bfc6b51bb..bf53b76fb 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -2,7 +2,6 @@ import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.STRING plugins { id("revenuecat-public-library") - alias(libs.plugins.kotlin.cocoapods) alias(libs.plugins.codingfeline.buildkonfig) } @@ -29,20 +28,12 @@ kotlin { } } - cocoapods { - version = libs.versions.revenuecat.kmp.get() - ios.deploymentTarget = libs.versions.ios.deploymentTarget.core.get() - - framework { - baseName = "Purchases" - isStatic = true - } - - pod("PurchasesHybridCommon") { - version = libs.versions.revenuecat.common.get() - extraOpts += listOf("-compiler-option", "-fmodules") - packageName = "swiftPMImport.com.revenuecat.purchases.models" - } + swiftPMDependencies { + `package`( + url = url("https://github.com/RevenueCat/purchases-hybrid-common.git"), + version = exact(libs.versions.revenuecat.common.get()), + products = listOf(product("PurchasesHybridCommon")), + ) } } diff --git a/core/core.podspec b/core/core.podspec deleted file mode 100644 index 56c8b8ba6..000000000 --- a/core/core.podspec +++ /dev/null @@ -1,54 +0,0 @@ -Pod::Spec.new do |spec| - spec.name = 'core' - spec.version = '2.2.12+17.21.2' - spec.homepage = '' - spec.source = { :http=> ''} - spec.authors = '' - spec.license = '' - spec.summary = '' - spec.vendored_frameworks = 'build/cocoapods/framework/Purchases.framework' - spec.libraries = 'c++' - spec.ios.deployment_target = '13.0' - spec.dependency 'PurchasesHybridCommon', '17.21.2' - - if !Dir.exist?('build/cocoapods/framework/Purchases.framework') || Dir.empty?('build/cocoapods/framework/Purchases.framework') - raise " - - Kotlin framework 'Purchases' doesn't exist yet, so a proper Xcode project can't be generated. - 'pod install' should be executed after running ':generateDummyFramework' Gradle task: - - ./gradlew :core:generateDummyFramework - - Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)" - end - - spec.xcconfig = { - 'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO', - } - - spec.pod_target_xcconfig = { - 'KOTLIN_PROJECT_PATH' => ':core', - 'PRODUCT_MODULE_NAME' => 'Purchases', - } - - spec.script_phases = [ - { - :name => 'Build core', - :execution_position => :before_compile, - :shell_path => '/bin/sh', - :script => <<-SCRIPT - if [ "YES" = "$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED" ]; then - echo "Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"" - exit 0 - fi - set -ev - REPO_ROOT="$PODS_TARGET_SRCROOT" - "$REPO_ROOT/../gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \ - -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \ - -Pkotlin.native.cocoapods.archs="$ARCHS" \ - -Pkotlin.native.cocoapods.configuration="$CONFIGURATION" - SCRIPT - } - ] - -end \ No newline at end of file diff --git a/mappings/build.gradle.kts b/mappings/build.gradle.kts index 9f968a5ef..e2ba6585c 100644 --- a/mappings/build.gradle.kts +++ b/mappings/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("revenuecat-internal-library") - alias(libs.plugins.kotlin.cocoapods) } kotlin { @@ -20,15 +19,12 @@ kotlin { } } - cocoapods { - version = libs.versions.revenuecat.kmp.get() - ios.deploymentTarget = libs.versions.ios.deploymentTarget.core.get() - - pod("PurchasesHybridCommon") { - version = libs.versions.revenuecat.common.get() - extraOpts += listOf("-compiler-option", "-fmodules") - packageName = "swiftPMImport.com.revenuecat.purchases.models" - } + swiftPMDependencies { + `package`( + url = url("https://github.com/RevenueCat/purchases-hybrid-common.git"), + version = exact(libs.versions.revenuecat.common.get()), + products = listOf(product("PurchasesHybridCommon")), + ) } } diff --git a/mappings/mappings.podspec b/mappings/mappings.podspec deleted file mode 100644 index bb8cf3dcf..000000000 --- a/mappings/mappings.podspec +++ /dev/null @@ -1,54 +0,0 @@ -Pod::Spec.new do |spec| - spec.name = 'mappings' - spec.version = '2.2.12+17.21.2' - spec.homepage = '' - spec.source = { :http=> ''} - spec.authors = '' - spec.license = '' - spec.summary = '' - spec.vendored_frameworks = 'build/cocoapods/framework/mappings.framework' - spec.libraries = 'c++' - spec.ios.deployment_target = '13.0' - spec.dependency 'PurchasesHybridCommon', '17.21.2' - - if !Dir.exist?('build/cocoapods/framework/mappings.framework') || Dir.empty?('build/cocoapods/framework/mappings.framework') - raise " - - Kotlin framework 'mappings' doesn't exist yet, so a proper Xcode project can't be generated. - 'pod install' should be executed after running ':generateDummyFramework' Gradle task: - - ./gradlew :mappings:generateDummyFramework - - Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)" - end - - spec.xcconfig = { - 'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO', - } - - spec.pod_target_xcconfig = { - 'KOTLIN_PROJECT_PATH' => ':mappings', - 'PRODUCT_MODULE_NAME' => 'mappings', - } - - spec.script_phases = [ - { - :name => 'Build mappings', - :execution_position => :before_compile, - :shell_path => '/bin/sh', - :script => <<-SCRIPT - if [ "YES" = "$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED" ]; then - echo "Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"" - exit 0 - fi - set -ev - REPO_ROOT="$PODS_TARGET_SRCROOT" - "$REPO_ROOT/../gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \ - -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \ - -Pkotlin.native.cocoapods.archs="$ARCHS" \ - -Pkotlin.native.cocoapods.configuration="$CONFIGURATION" - SCRIPT - } - ] - -end \ No newline at end of file diff --git a/models/build.gradle.kts b/models/build.gradle.kts index 42219cb2c..96d67fce0 100644 --- a/models/build.gradle.kts +++ b/models/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("revenuecat-public-library") - alias(libs.plugins.kotlin.cocoapods) } kotlin { @@ -17,15 +16,12 @@ kotlin { } } - cocoapods { - version = libs.versions.revenuecat.kmp.get() - ios.deploymentTarget = libs.versions.ios.deploymentTarget.core.get() - - pod("PurchasesHybridCommon") { - version = libs.versions.revenuecat.common.get() - extraOpts += listOf("-compiler-option", "-fmodules") - packageName = "swiftPMImport.com.revenuecat.purchases.models" - } + swiftPMDependencies { + `package`( + url = url("https://github.com/RevenueCat/purchases-hybrid-common.git"), + version = exact(libs.versions.revenuecat.common.get()), + products = listOf(product("PurchasesHybridCommon")), + ) } } diff --git a/models/models.podspec b/models/models.podspec deleted file mode 100644 index ab9b11f6a..000000000 --- a/models/models.podspec +++ /dev/null @@ -1,54 +0,0 @@ -Pod::Spec.new do |spec| - spec.name = 'models' - spec.version = '2.2.12+17.21.2' - spec.homepage = '' - spec.source = { :http=> ''} - spec.authors = '' - spec.license = '' - spec.summary = '' - spec.vendored_frameworks = 'build/cocoapods/framework/models.framework' - spec.libraries = 'c++' - spec.ios.deployment_target = '13.0' - spec.dependency 'PurchasesHybridCommon', '17.21.2' - - if !Dir.exist?('build/cocoapods/framework/models.framework') || Dir.empty?('build/cocoapods/framework/models.framework') - raise " - - Kotlin framework 'models' doesn't exist yet, so a proper Xcode project can't be generated. - 'pod install' should be executed after running ':generateDummyFramework' Gradle task: - - ./gradlew :models:generateDummyFramework - - Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)" - end - - spec.xcconfig = { - 'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO', - } - - spec.pod_target_xcconfig = { - 'KOTLIN_PROJECT_PATH' => ':models', - 'PRODUCT_MODULE_NAME' => 'models', - } - - spec.script_phases = [ - { - :name => 'Build models', - :execution_position => :before_compile, - :shell_path => '/bin/sh', - :script => <<-SCRIPT - if [ "YES" = "$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED" ]; then - echo "Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"" - exit 0 - fi - set -ev - REPO_ROOT="$PODS_TARGET_SRCROOT" - "$REPO_ROOT/../gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \ - -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \ - -Pkotlin.native.cocoapods.archs="$ARCHS" \ - -Pkotlin.native.cocoapods.configuration="$CONFIGURATION" - SCRIPT - } - ] - -end \ No newline at end of file diff --git a/revenuecatui/build.gradle.kts b/revenuecatui/build.gradle.kts index f4d32a017..32eaa50c0 100644 --- a/revenuecatui/build.gradle.kts +++ b/revenuecatui/build.gradle.kts @@ -2,7 +2,6 @@ plugins { id("revenuecat-public-library") alias(libs.plugins.jetbrains.compose) alias(libs.plugins.compose.compiler) - alias(libs.plugins.kotlin.cocoapods) } kotlin { @@ -24,15 +23,12 @@ kotlin { } } - cocoapods { - version = libs.versions.revenuecat.kmp.get() - ios.deploymentTarget = libs.versions.ios.deploymentTarget.ui.get() - - pod("PurchasesHybridCommonUI") { - version = libs.versions.revenuecat.common.get() - extraOpts += listOf("-compiler-option", "-fmodules") - packageName = "swiftPMImport.com.revenuecat.purchases.revenuecatui" - } + swiftPMDependencies { + `package`( + url = url("https://github.com/RevenueCat/purchases-hybrid-common.git"), + version = exact(libs.versions.revenuecat.common.get()), + products = listOf(product("PurchasesHybridCommonUI")), + ) } } diff --git a/revenuecatui/revenuecatui.podspec b/revenuecatui/revenuecatui.podspec deleted file mode 100644 index 262323165..000000000 --- a/revenuecatui/revenuecatui.podspec +++ /dev/null @@ -1,54 +0,0 @@ -Pod::Spec.new do |spec| - spec.name = 'revenuecatui' - spec.version = '2.2.12+17.21.2' - spec.homepage = '' - spec.source = { :http=> ''} - spec.authors = '' - spec.license = '' - spec.summary = '' - spec.vendored_frameworks = 'build/cocoapods/framework/revenuecatui.framework' - spec.libraries = 'c++' - spec.ios.deployment_target = '15.0' - spec.dependency 'PurchasesHybridCommonUI', '17.21.2' - - if !Dir.exist?('build/cocoapods/framework/revenuecatui.framework') || Dir.empty?('build/cocoapods/framework/revenuecatui.framework') - raise " - - Kotlin framework 'revenuecatui' doesn't exist yet, so a proper Xcode project can't be generated. - 'pod install' should be executed after running ':generateDummyFramework' Gradle task: - - ./gradlew :revenuecatui:generateDummyFramework - - Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)" - end - - spec.xcconfig = { - 'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO', - } - - spec.pod_target_xcconfig = { - 'KOTLIN_PROJECT_PATH' => ':revenuecatui', - 'PRODUCT_MODULE_NAME' => 'revenuecatui', - } - - spec.script_phases = [ - { - :name => 'Build revenuecatui', - :execution_position => :before_compile, - :shell_path => '/bin/sh', - :script => <<-SCRIPT - if [ "YES" = "$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED" ]; then - echo "Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"" - exit 0 - fi - set -ev - REPO_ROOT="$PODS_TARGET_SRCROOT" - "$REPO_ROOT/../gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \ - -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \ - -Pkotlin.native.cocoapods.archs="$ARCHS" \ - -Pkotlin.native.cocoapods.configuration="$CONFIGURATION" - SCRIPT - } - ] - spec.resources = ['build/compose/cocoapods/compose-resources'] -end \ No newline at end of file From e7e26035ab9a9300825e5225357e26de79bf363d Mon Sep 17 00:00:00 2001 From: JayShortway <29483617+JayShortway@users.noreply.github.com> Date: Tue, 2 Dec 2025 16:36:21 +0100 Subject: [PATCH 4/8] Updates public API dump --- models/api/models.api | 6 +++--- revenuecatui/api/revenuecatui.api | 14 +++++++------- revenuecatui/api/revenuecatui.klib.api | 6 ------ 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/models/api/models.api b/models/api/models.api index bfdec0c07..d9b52e25a 100644 --- a/models/api/models.api +++ b/models/api/models.api @@ -148,15 +148,15 @@ public final class com/revenuecat/purchases/kmp/models/OfferPaymentMode : java/l } public abstract interface class com/revenuecat/purchases/kmp/models/Offering { - public abstract fun get (Ljava/lang/String;)Lcom/revenuecat/purchases/kmp/models/Package; + public fun get (Ljava/lang/String;)Lcom/revenuecat/purchases/kmp/models/Package; public abstract fun getAnnual ()Lcom/revenuecat/purchases/kmp/models/Package; public abstract fun getAvailablePackages ()Ljava/util/List; public abstract fun getIdentifier ()Ljava/lang/String; public abstract fun getLifetime ()Lcom/revenuecat/purchases/kmp/models/Package; public abstract fun getMetadata ()Ljava/util/Map; - public abstract fun getMetadataString (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + public fun getMetadataString (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; public abstract fun getMonthly ()Lcom/revenuecat/purchases/kmp/models/Package; - public abstract fun getPackage (Ljava/lang/String;)Lcom/revenuecat/purchases/kmp/models/Package; + public fun getPackage (Ljava/lang/String;)Lcom/revenuecat/purchases/kmp/models/Package; public abstract fun getServerDescription ()Ljava/lang/String; public abstract fun getSixMonth ()Lcom/revenuecat/purchases/kmp/models/Package; public abstract fun getThreeMonth ()Lcom/revenuecat/purchases/kmp/models/Package; diff --git a/revenuecatui/api/revenuecatui.api b/revenuecatui/api/revenuecatui.api index 9499b2b08..8d15ec643 100644 --- a/revenuecatui/api/revenuecatui.api +++ b/revenuecatui/api/revenuecatui.api @@ -15,13 +15,13 @@ public final class com/revenuecat/purchases/kmp/ui/revenuecatui/PaywallKt { } public abstract interface class com/revenuecat/purchases/kmp/ui/revenuecatui/PaywallListener { - public abstract fun onPurchaseCancelled ()V - public abstract fun onPurchaseCompleted (Lcom/revenuecat/purchases/kmp/models/CustomerInfo;Lcom/revenuecat/purchases/kmp/models/StoreTransaction;)V - public abstract fun onPurchaseError (Lcom/revenuecat/purchases/kmp/models/PurchasesError;)V - public abstract fun onPurchaseStarted (Lcom/revenuecat/purchases/kmp/models/Package;)V - public abstract fun onRestoreCompleted (Lcom/revenuecat/purchases/kmp/models/CustomerInfo;)V - public abstract fun onRestoreError (Lcom/revenuecat/purchases/kmp/models/PurchasesError;)V - public abstract fun onRestoreStarted ()V + public fun onPurchaseCancelled ()V + public fun onPurchaseCompleted (Lcom/revenuecat/purchases/kmp/models/CustomerInfo;Lcom/revenuecat/purchases/kmp/models/StoreTransaction;)V + public fun onPurchaseError (Lcom/revenuecat/purchases/kmp/models/PurchasesError;)V + public fun onPurchaseStarted (Lcom/revenuecat/purchases/kmp/models/Package;)V + public fun onRestoreCompleted (Lcom/revenuecat/purchases/kmp/models/CustomerInfo;)V + public fun onRestoreError (Lcom/revenuecat/purchases/kmp/models/PurchasesError;)V + public fun onRestoreStarted ()V } public final class com/revenuecat/purchases/kmp/ui/revenuecatui/PaywallListener$DefaultImpls { diff --git a/revenuecatui/api/revenuecatui.klib.api b/revenuecatui/api/revenuecatui.klib.api index 47d9763d8..b107ea295 100644 --- a/revenuecatui/api/revenuecatui.klib.api +++ b/revenuecatui/api/revenuecatui.klib.api @@ -48,19 +48,13 @@ final class com.revenuecat.purchases.kmp.ui.revenuecatui/PaywallOptions { // com } } -final val com.revenuecat.purchases.kmp.ui.revenuecatui.modifier/com_revenuecat_purchases_kmp_ui_revenuecatui_modifier_LayoutViewControllerState$stableprop // com.revenuecat.purchases.kmp.ui.revenuecatui.modifier/com_revenuecat_purchases_kmp_ui_revenuecatui_modifier_LayoutViewControllerState$stableprop|#static{}com_revenuecat_purchases_kmp_ui_revenuecatui_modifier_LayoutViewControllerState$stableprop[0] -final val com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_IosCustomerCenterDelegate$stableprop // com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_IosCustomerCenterDelegate$stableprop|#static{}com_revenuecat_purchases_kmp_ui_revenuecatui_IosCustomerCenterDelegate$stableprop[0] -final val com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_IosPaywallDelegate$stableprop // com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_IosPaywallDelegate$stableprop|#static{}com_revenuecat_purchases_kmp_ui_revenuecatui_IosPaywallDelegate$stableprop[0] final val com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_PaywallOptions$stableprop // com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_PaywallOptions$stableprop|#static{}com_revenuecat_purchases_kmp_ui_revenuecatui_PaywallOptions$stableprop[0] final val com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_PaywallOptions_Builder$stableprop // com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_PaywallOptions_Builder$stableprop|#static{}com_revenuecat_purchases_kmp_ui_revenuecatui_PaywallOptions_Builder$stableprop[0] -final fun com.revenuecat.purchases.kmp.ui.revenuecatui.modifier/com_revenuecat_purchases_kmp_ui_revenuecatui_modifier_LayoutViewControllerState$stableprop_getter(): kotlin/Int // com.revenuecat.purchases.kmp.ui.revenuecatui.modifier/com_revenuecat_purchases_kmp_ui_revenuecatui_modifier_LayoutViewControllerState$stableprop_getter|com_revenuecat_purchases_kmp_ui_revenuecatui_modifier_LayoutViewControllerState$stableprop_getter(){}[0] final fun com.revenuecat.purchases.kmp.ui.revenuecatui/CustomerCenter(androidx.compose.ui/Modifier?, kotlin/Function0, androidx.compose.runtime/Composer?, kotlin/Int, kotlin/Int) // com.revenuecat.purchases.kmp.ui.revenuecatui/CustomerCenter|CustomerCenter(androidx.compose.ui.Modifier?;kotlin.Function0;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){}[0] final fun com.revenuecat.purchases.kmp.ui.revenuecatui/OriginalTemplatePaywallFooter(com.revenuecat.purchases.kmp.ui.revenuecatui/PaywallOptions, kotlin/Function3?, androidx.compose.runtime/Composer?, kotlin/Int, kotlin/Int) // com.revenuecat.purchases.kmp.ui.revenuecatui/OriginalTemplatePaywallFooter|OriginalTemplatePaywallFooter(com.revenuecat.purchases.kmp.ui.revenuecatui.PaywallOptions;kotlin.Function3?;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){}[0] final fun com.revenuecat.purchases.kmp.ui.revenuecatui/Paywall(com.revenuecat.purchases.kmp.ui.revenuecatui/PaywallOptions, androidx.compose.runtime/Composer?, kotlin/Int) // com.revenuecat.purchases.kmp.ui.revenuecatui/Paywall|Paywall(com.revenuecat.purchases.kmp.ui.revenuecatui.PaywallOptions;androidx.compose.runtime.Composer?;kotlin.Int){}[0] final fun com.revenuecat.purchases.kmp.ui.revenuecatui/PaywallFooter(com.revenuecat.purchases.kmp.ui.revenuecatui/PaywallOptions, kotlin/Function3?, androidx.compose.runtime/Composer?, kotlin/Int, kotlin/Int) // com.revenuecat.purchases.kmp.ui.revenuecatui/PaywallFooter|PaywallFooter(com.revenuecat.purchases.kmp.ui.revenuecatui.PaywallOptions;kotlin.Function3?;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){}[0] final fun com.revenuecat.purchases.kmp.ui.revenuecatui/PaywallOptions(kotlin/Function0, kotlin/Function1 = ...): com.revenuecat.purchases.kmp.ui.revenuecatui/PaywallOptions // com.revenuecat.purchases.kmp.ui.revenuecatui/PaywallOptions|PaywallOptions(kotlin.Function0;kotlin.Function1){}[0] -final fun com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_IosCustomerCenterDelegate$stableprop_getter(): kotlin/Int // com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_IosCustomerCenterDelegate$stableprop_getter|com_revenuecat_purchases_kmp_ui_revenuecatui_IosCustomerCenterDelegate$stableprop_getter(){}[0] -final fun com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_IosPaywallDelegate$stableprop_getter(): kotlin/Int // com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_IosPaywallDelegate$stableprop_getter|com_revenuecat_purchases_kmp_ui_revenuecatui_IosPaywallDelegate$stableprop_getter(){}[0] final fun com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_PaywallOptions$stableprop_getter(): kotlin/Int // com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_PaywallOptions$stableprop_getter|com_revenuecat_purchases_kmp_ui_revenuecatui_PaywallOptions$stableprop_getter(){}[0] final fun com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_PaywallOptions_Builder$stableprop_getter(): kotlin/Int // com.revenuecat.purchases.kmp.ui.revenuecatui/com_revenuecat_purchases_kmp_ui_revenuecatui_PaywallOptions_Builder$stableprop_getter|com_revenuecat_purchases_kmp_ui_revenuecatui_PaywallOptions_Builder$stableprop_getter(){}[0] From c4299747aeac062a76d0d5f174666f739cdd5d23 Mon Sep 17 00:00:00 2001 From: JayShortway <29483617+JayShortway@users.noreply.github.com> Date: Wed, 26 Nov 2025 16:16:49 +0100 Subject: [PATCH 5/8] Deintegrates CocoaPods from iosApp --- iosApp/Podfile | 11 --- iosApp/Podfile.lock | 30 --------- iosApp/iosApp.xcodeproj/project.pbxproj | 67 +------------------ .../contents.xcworkspacedata | 30 --------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 --- 5 files changed, 2 insertions(+), 144 deletions(-) delete mode 100644 iosApp/Podfile delete mode 100644 iosApp/Podfile.lock delete mode 100644 iosApp/iosApp.xcworkspace/contents.xcworkspacedata delete mode 100644 iosApp/iosApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/iosApp/Podfile b/iosApp/Podfile deleted file mode 100644 index 960f5780f..000000000 --- a/iosApp/Podfile +++ /dev/null @@ -1,11 +0,0 @@ -# Uncomment the next line to define a global platform for your project -# platform :ios, '9.0' - -target 'iosApp' do - # Comment the next line if you don't want to use dynamic frameworks - # use_frameworks! - - # Pods for iosApp - pod 'PurchasesHybridCommon', '17.21.2' - pod 'PurchasesHybridCommonUI', '17.21.2' -end diff --git a/iosApp/Podfile.lock b/iosApp/Podfile.lock deleted file mode 100644 index 20845fff7..000000000 --- a/iosApp/Podfile.lock +++ /dev/null @@ -1,30 +0,0 @@ -PODS: - - PurchasesHybridCommon (17.19.1): - - RevenueCat (= 5.48.0) - - PurchasesHybridCommonUI (17.19.1): - - PurchasesHybridCommon (= 17.19.1) - - RevenueCatUI (= 5.48.0) - - RevenueCat (5.48.0) - - RevenueCatUI (5.48.0): - - RevenueCat (= 5.48.0) - -DEPENDENCIES: - - PurchasesHybridCommon (= 17.19.1) - - PurchasesHybridCommonUI (= 17.19.1) - -SPEC REPOS: - trunk: - - PurchasesHybridCommon - - PurchasesHybridCommonUI - - RevenueCat - - RevenueCatUI - -SPEC CHECKSUMS: - PurchasesHybridCommon: a4837eebc889b973668af685d6c23b89a038461d - PurchasesHybridCommonUI: bf5566763f906429584534a117a7862537b92c0c - RevenueCat: 1e61140a343a77dc286f171b3ffab99ca09a4b57 - RevenueCatUI: 625b2b2f4ee8c052d2e9939c2b906cdaecded253 - -PODFILE CHECKSUM: 61fe29d346ca2feebf71ac039e98e81570b2552e - -COCOAPODS: 1.16.2 diff --git a/iosApp/iosApp.xcodeproj/project.pbxproj b/iosApp/iosApp.xcodeproj/project.pbxproj index 1384f7e39..1f1314d1b 100644 --- a/iosApp/iosApp.xcodeproj/project.pbxproj +++ b/iosApp/iosApp.xcodeproj/project.pbxproj @@ -9,7 +9,6 @@ /* Begin PBXBuildFile section */ 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557BA273AAA24004C7B11 /* Assets.xcassets */; }; 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */; }; - 0E12A6F5E3C5A368A45100AA /* libPods-iosApp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7970694DAED6D108F4AB7D20 /* libPods-iosApp.a */; }; 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2152FB032600AC8F00CF470E /* iOSApp.swift */; }; 7555FF83242A565900829871 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7555FF82242A565900829871 /* ContentView.swift */; }; FD277EB72D2C6C5B00E392B7 /* SKConfig.storekit in Resources */ = {isa = PBXBuildFile; fileRef = FD277EB62D2C6C5B00E392B7 /* SKConfig.storekit */; }; @@ -22,10 +21,7 @@ 7555FF7B242A565900829871 /* purchases-kmp Sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "purchases-kmp Sample.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 7555FF82242A565900829871 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 7555FF8C242A565B00829871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 7970694DAED6D108F4AB7D20 /* libPods-iosApp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-iosApp.a"; sourceTree = BUILT_PRODUCTS_DIR; }; AB3632DC29227652001CCB65 /* Config.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; - ADB7642423335C54609E9121 /* Pods-iosApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iosApp.debug.xcconfig"; path = "Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig"; sourceTree = ""; }; - E4E97109987A6338537554BE /* Pods-iosApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iosApp.release.xcconfig"; path = "Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig"; sourceTree = ""; }; FD277EB62D2C6C5B00E392B7 /* SKConfig.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = SKConfig.storekit; sourceTree = ""; }; /* End PBXFileReference section */ @@ -34,7 +30,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0E12A6F5E3C5A368A45100AA /* libPods-iosApp.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -52,27 +47,16 @@ 38C5C97CCB7C1B4002B5B2EE /* Pods */ = { isa = PBXGroup; children = ( - ADB7642423335C54609E9121 /* Pods-iosApp.debug.xcconfig */, - E4E97109987A6338537554BE /* Pods-iosApp.release.xcconfig */, ); path = Pods; sourceTree = ""; }; - 42799AB246E5F90AF97AA0EF /* Frameworks */ = { - isa = PBXGroup; - children = ( - 7970694DAED6D108F4AB7D20 /* libPods-iosApp.a */, - ); - name = Frameworks; - sourceTree = ""; - }; 7555FF72242A565900829871 = { isa = PBXGroup; children = ( AB1DB47929225F7C00F7AF9C /* Configuration */, 7555FF7D242A565900829871 /* iosApp */, 7555FF7C242A565900829871 /* Products */, - 42799AB246E5F90AF97AA0EF /* Frameworks */, 38C5C97CCB7C1B4002B5B2EE /* Pods */, ); sourceTree = ""; @@ -113,12 +97,10 @@ isa = PBXNativeTarget; buildConfigurationList = 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "iosApp" */; buildPhases = ( - E546C444910C3630A98ADF58 /* [CP] Check Pods Manifest.lock */, F36B1CEB2AD83DDC00CB74D5 /* Compile Kotlin Framework */, 7555FF77242A565900829871 /* Sources */, B92378962B6B1156000C7307 /* Frameworks */, 7555FF79242A565900829871 /* Resources */, - BADF33751A0CFC72A3F9017A /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -176,45 +158,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - BADF33751A0CFC72A3F9017A /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - E546C444910C3630A98ADF58 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-iosApp-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; F36B1CEB2AD83DDC00CB74D5 /* Compile Kotlin Framework */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -368,7 +311,6 @@ }; 7555FFA6242A565B00829871 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ADB7642423335C54609E9121 /* Pods-iosApp.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Development"; @@ -376,9 +318,7 @@ DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\""; DEVELOPMENT_TEAM = 8SXR2327BM; ENABLE_PREVIEWS = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)\n$(SRCROOT)/../composeApp/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)", - ); + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)\n$(SRCROOT)/../composeApp/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)"; INFOPLIST_FILE = iosApp/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.1; LD_RUNPATH_SEARCH_PATHS = ( @@ -401,7 +341,6 @@ }; 7555FFA7242A565B00829871 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E4E97109987A6338537554BE /* Pods-iosApp.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Development"; @@ -409,9 +348,7 @@ DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\""; DEVELOPMENT_TEAM = "${TEAM_ID}"; ENABLE_PREVIEWS = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)\n$(SRCROOT)/../composeApp/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)", - ); + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)\n$(SRCROOT)/../composeApp/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)"; INFOPLIST_FILE = iosApp/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.1; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/iosApp/iosApp.xcworkspace/contents.xcworkspacedata b/iosApp/iosApp.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 4b6f2d363..000000000 --- a/iosApp/iosApp.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/iosApp/iosApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iosApp/iosApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003..000000000 --- a/iosApp/iosApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - From 9ae8b028108bd72b065a707afd6e2767e0dac085 Mon Sep 17 00:00:00 2001 From: JayShortway <29483617+JayShortway@users.noreply.github.com> Date: Wed, 26 Nov 2025 16:33:32 +0100 Subject: [PATCH 6/8] Migrates iosApp from CoocaPods to SPM --- .gitignore | 4 + composeApp/build.gradle.kts | 7 + .../Package.resolved | 23 ++ .../Package.swift | 32 +++ .../_internal_linkage_SwiftPMImport.m | 0 .../include/_internal_linkage_SwiftPMImport.h | 0 .../subpackages/_core/Package.swift | 32 +++ .../subpackages/_core/Sources/_core/_core.m | 0 .../_core/Sources/_core/include/_core.h | 0 .../subpackages/_mappings/Package.swift | 32 +++ .../_mappings/Sources/_mappings/_mappings.m | 0 .../Sources/_mappings/include/_mappings.h | 0 .../subpackages/_models/Package.swift | 32 +++ .../_models/Sources/_models/_models.m | 0 .../_models/Sources/_models/include/_models.h | 0 .../subpackages/_revenuecatui/Package.swift | 32 +++ .../Sources/_revenuecatui/_revenuecatui.m | 0 .../_revenuecatui/include/_revenuecatui.h | 0 iosApp/iosApp.xcodeproj/project.pbxproj | 210 ++++++++++++------ .../contents.xcworkspacedata | 7 + .../xcshareddata/swiftpm/Package.resolved | 24 ++ 21 files changed, 371 insertions(+), 64 deletions(-) create mode 100644 iosApp/_internal_linkage_SwiftPMImport/Package.resolved create mode 100644 iosApp/_internal_linkage_SwiftPMImport/Package.swift create mode 100644 iosApp/_internal_linkage_SwiftPMImport/Sources/_internal_linkage_SwiftPMImport/_internal_linkage_SwiftPMImport.m create mode 100644 iosApp/_internal_linkage_SwiftPMImport/Sources/_internal_linkage_SwiftPMImport/include/_internal_linkage_SwiftPMImport.h create mode 100644 iosApp/_internal_linkage_SwiftPMImport/subpackages/_core/Package.swift create mode 100644 iosApp/_internal_linkage_SwiftPMImport/subpackages/_core/Sources/_core/_core.m create mode 100644 iosApp/_internal_linkage_SwiftPMImport/subpackages/_core/Sources/_core/include/_core.h create mode 100644 iosApp/_internal_linkage_SwiftPMImport/subpackages/_mappings/Package.swift create mode 100644 iosApp/_internal_linkage_SwiftPMImport/subpackages/_mappings/Sources/_mappings/_mappings.m create mode 100644 iosApp/_internal_linkage_SwiftPMImport/subpackages/_mappings/Sources/_mappings/include/_mappings.h create mode 100644 iosApp/_internal_linkage_SwiftPMImport/subpackages/_models/Package.swift create mode 100644 iosApp/_internal_linkage_SwiftPMImport/subpackages/_models/Sources/_models/_models.m create mode 100644 iosApp/_internal_linkage_SwiftPMImport/subpackages/_models/Sources/_models/include/_models.h create mode 100644 iosApp/_internal_linkage_SwiftPMImport/subpackages/_revenuecatui/Package.swift create mode 100644 iosApp/_internal_linkage_SwiftPMImport/subpackages/_revenuecatui/Sources/_revenuecatui/_revenuecatui.m create mode 100644 iosApp/_internal_linkage_SwiftPMImport/subpackages/_revenuecatui/Sources/_revenuecatui/include/_revenuecatui.h create mode 100644 iosApp/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 iosApp/iosApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/.gitignore b/.gitignore index 0b8896b3a..6a3df33ad 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,7 @@ vendor/ # Share IssueNavigationConfiguration !.idea/vcs.xml + +# KMP SwiftPM import +.swiftpm +.build diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 045f4823c..70ca01f93 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -55,6 +55,13 @@ kotlin { implementation(libs.androidx.activity.compose) } } + + swiftPMDependencies { + xcodeProjectPathForKmpIJPlugin.set( + layout.projectDirectory.file("../iosApp/iosApp.xcodeproj") + ) + } + } android { diff --git a/iosApp/_internal_linkage_SwiftPMImport/Package.resolved b/iosApp/_internal_linkage_SwiftPMImport/Package.resolved new file mode 100644 index 000000000..daf05c65d --- /dev/null +++ b/iosApp/_internal_linkage_SwiftPMImport/Package.resolved @@ -0,0 +1,23 @@ +{ + "pins" : [ + { + "identity" : "purchases-hybrid-common", + "kind" : "remoteSourceControl", + "location" : "https://github.com/RevenueCat/purchases-hybrid-common.git", + "state" : { + "revision" : "653dd5ac999ee3c0e4a712b4facc29a76d85472c", + "version" : "17.21.2" + } + }, + { + "identity" : "purchases-ios-spm", + "kind" : "remoteSourceControl", + "location" : "https://github.com/RevenueCat/purchases-ios-spm", + "state" : { + "revision" : "db54c3955115a5bc968db5a29737104638aeba93", + "version" : "5.49.2" + } + } + ], + "version" : 2 +} diff --git a/iosApp/_internal_linkage_SwiftPMImport/Package.swift b/iosApp/_internal_linkage_SwiftPMImport/Package.swift new file mode 100644 index 000000000..8d30bb30d --- /dev/null +++ b/iosApp/_internal_linkage_SwiftPMImport/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version: 5.9 +import PackageDescription +let package = Package( + name: "_internal_linkage_SwiftPMImport", + platforms: [ + .iOS("15.0"), + ], + products: [ + .library( + name: "_internal_linkage_SwiftPMImport", + type: .none, + targets: ["_internal_linkage_SwiftPMImport"] + ), + ], + dependencies: [ + .package(path: "subpackages/_revenuecatui"), + .package(path: "subpackages/_core"), + .package(path: "subpackages/_mappings"), + .package(path: "subpackages/_models"), + ], + targets: [ + .target( + name: "_internal_linkage_SwiftPMImport", + dependencies: [ + .product(name: "_revenuecatui", package: "_revenuecatui"), + .product(name: "_core", package: "_core"), + .product(name: "_mappings", package: "_mappings"), + .product(name: "_models", package: "_models"), + ] + ), + ] +) diff --git a/iosApp/_internal_linkage_SwiftPMImport/Sources/_internal_linkage_SwiftPMImport/_internal_linkage_SwiftPMImport.m b/iosApp/_internal_linkage_SwiftPMImport/Sources/_internal_linkage_SwiftPMImport/_internal_linkage_SwiftPMImport.m new file mode 100644 index 000000000..e69de29bb diff --git a/iosApp/_internal_linkage_SwiftPMImport/Sources/_internal_linkage_SwiftPMImport/include/_internal_linkage_SwiftPMImport.h b/iosApp/_internal_linkage_SwiftPMImport/Sources/_internal_linkage_SwiftPMImport/include/_internal_linkage_SwiftPMImport.h new file mode 100644 index 000000000..e69de29bb diff --git a/iosApp/_internal_linkage_SwiftPMImport/subpackages/_core/Package.swift b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_core/Package.swift new file mode 100644 index 000000000..05c8d2c7d --- /dev/null +++ b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_core/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version: 5.9 +import PackageDescription +let package = Package( + name: "_core", + platforms: [ + .iOS("15.0"), + ], + products: [ + .library( + name: "_core", + type: .none, + targets: ["_core"] + ), + ], + dependencies: [ + .package( + url: "https://github.com/RevenueCat/purchases-hybrid-common.git", + exact: "17.21.2", + ), + ], + targets: [ + .target( + name: "_core", + dependencies: [ + .product( + name: "PurchasesHybridCommon", + package: "purchases-hybrid-common", + ), + ] + ), + ] +) diff --git a/iosApp/_internal_linkage_SwiftPMImport/subpackages/_core/Sources/_core/_core.m b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_core/Sources/_core/_core.m new file mode 100644 index 000000000..e69de29bb diff --git a/iosApp/_internal_linkage_SwiftPMImport/subpackages/_core/Sources/_core/include/_core.h b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_core/Sources/_core/include/_core.h new file mode 100644 index 000000000..e69de29bb diff --git a/iosApp/_internal_linkage_SwiftPMImport/subpackages/_mappings/Package.swift b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_mappings/Package.swift new file mode 100644 index 000000000..d46e4528b --- /dev/null +++ b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_mappings/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version: 5.9 +import PackageDescription +let package = Package( + name: "_mappings", + platforms: [ + .iOS("15.0"), + ], + products: [ + .library( + name: "_mappings", + type: .none, + targets: ["_mappings"] + ), + ], + dependencies: [ + .package( + url: "https://github.com/RevenueCat/purchases-hybrid-common.git", + exact: "17.21.2", + ), + ], + targets: [ + .target( + name: "_mappings", + dependencies: [ + .product( + name: "PurchasesHybridCommon", + package: "purchases-hybrid-common", + ), + ] + ), + ] +) diff --git a/iosApp/_internal_linkage_SwiftPMImport/subpackages/_mappings/Sources/_mappings/_mappings.m b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_mappings/Sources/_mappings/_mappings.m new file mode 100644 index 000000000..e69de29bb diff --git a/iosApp/_internal_linkage_SwiftPMImport/subpackages/_mappings/Sources/_mappings/include/_mappings.h b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_mappings/Sources/_mappings/include/_mappings.h new file mode 100644 index 000000000..e69de29bb diff --git a/iosApp/_internal_linkage_SwiftPMImport/subpackages/_models/Package.swift b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_models/Package.swift new file mode 100644 index 000000000..44200e58c --- /dev/null +++ b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_models/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version: 5.9 +import PackageDescription +let package = Package( + name: "_models", + platforms: [ + .iOS("15.0"), + ], + products: [ + .library( + name: "_models", + type: .none, + targets: ["_models"] + ), + ], + dependencies: [ + .package( + url: "https://github.com/RevenueCat/purchases-hybrid-common.git", + exact: "17.21.2", + ), + ], + targets: [ + .target( + name: "_models", + dependencies: [ + .product( + name: "PurchasesHybridCommon", + package: "purchases-hybrid-common", + ), + ] + ), + ] +) diff --git a/iosApp/_internal_linkage_SwiftPMImport/subpackages/_models/Sources/_models/_models.m b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_models/Sources/_models/_models.m new file mode 100644 index 000000000..e69de29bb diff --git a/iosApp/_internal_linkage_SwiftPMImport/subpackages/_models/Sources/_models/include/_models.h b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_models/Sources/_models/include/_models.h new file mode 100644 index 000000000..e69de29bb diff --git a/iosApp/_internal_linkage_SwiftPMImport/subpackages/_revenuecatui/Package.swift b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_revenuecatui/Package.swift new file mode 100644 index 000000000..755d27c0d --- /dev/null +++ b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_revenuecatui/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version: 5.9 +import PackageDescription +let package = Package( + name: "_revenuecatui", + platforms: [ + .iOS("15.0"), + ], + products: [ + .library( + name: "_revenuecatui", + type: .none, + targets: ["_revenuecatui"] + ), + ], + dependencies: [ + .package( + url: "https://github.com/RevenueCat/purchases-hybrid-common.git", + exact: "17.21.2", + ), + ], + targets: [ + .target( + name: "_revenuecatui", + dependencies: [ + .product( + name: "PurchasesHybridCommonUI", + package: "purchases-hybrid-common", + ), + ] + ), + ] +) diff --git a/iosApp/_internal_linkage_SwiftPMImport/subpackages/_revenuecatui/Sources/_revenuecatui/_revenuecatui.m b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_revenuecatui/Sources/_revenuecatui/_revenuecatui.m new file mode 100644 index 000000000..e69de29bb diff --git a/iosApp/_internal_linkage_SwiftPMImport/subpackages/_revenuecatui/Sources/_revenuecatui/include/_revenuecatui.h b/iosApp/_internal_linkage_SwiftPMImport/subpackages/_revenuecatui/Sources/_revenuecatui/include/_revenuecatui.h new file mode 100644 index 000000000..e69de29bb diff --git a/iosApp/iosApp.xcodeproj/project.pbxproj b/iosApp/iosApp.xcodeproj/project.pbxproj index 1f1314d1b..50ee91c8c 100644 --- a/iosApp/iosApp.xcodeproj/project.pbxproj +++ b/iosApp/iosApp.xcodeproj/project.pbxproj @@ -7,44 +7,106 @@ objects = { /* Begin PBXBuildFile section */ - 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557BA273AAA24004C7B11 /* Assets.xcassets */; }; - 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */; }; - 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2152FB032600AC8F00CF470E /* iOSApp.swift */; }; - 7555FF83242A565900829871 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7555FF82242A565900829871 /* ContentView.swift */; }; - FD277EB72D2C6C5B00E392B7 /* SKConfig.storekit in Resources */ = {isa = PBXBuildFile; fileRef = FD277EB62D2C6C5B00E392B7 /* SKConfig.storekit */; }; + 058557BB273AAA24004C7B11 = { + isa = PBXBuildFile; + fileRef = 058557BA273AAA24004C7B11; + }; + 058557D9273AAEEB004C7B11 = { + isa = PBXBuildFile; + fileRef = 058557D8273AAEEB004C7B11; + }; + 2152FB042600AC8F00CF470E = { + isa = PBXBuildFile; + fileRef = 2152FB032600AC8F00CF470E; + }; + 7555FF83242A565900829871 = { + isa = PBXBuildFile; + fileRef = 7555FF82242A565900829871; + }; + C4138C1E60F991BF33CA9E77 = { + isa = PBXBuildFile; + productRef = 5D9EC301A4E3A958E2117A1D; + }; + FD277EB72D2C6C5B00E392B7 = { + isa = PBXBuildFile; + fileRef = FD277EB62D2C6C5B00E392B7; + }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 058557BA273AAA24004C7B11 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; - 2152FB032600AC8F00CF470E /* iOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSApp.swift; sourceTree = ""; }; - 7555FF7B242A565900829871 /* purchases-kmp Sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "purchases-kmp Sample.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 7555FF82242A565900829871 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - 7555FF8C242A565B00829871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AB3632DC29227652001CCB65 /* Config.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; - FD277EB62D2C6C5B00E392B7 /* SKConfig.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = SKConfig.storekit; sourceTree = ""; }; + 058557BA273AAA24004C7B11 = { + isa = PBXFileReference; + lastKnownFileType = folder.assetcatalog; + path = Assets.xcassets; + sourceTree = ""; + }; + 058557D8273AAEEB004C7B11 = { + isa = PBXFileReference; + lastKnownFileType = folder.assetcatalog; + path = "Preview Assets.xcassets"; + sourceTree = ""; + }; + 2152FB032600AC8F00CF470E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.swift; + path = iOSApp.swift; + sourceTree = ""; + }; + 7555FF7B242A565900829871 = { + isa = PBXFileReference; + explicitFileType = wrapper.application; + includeInIndex = 0; + path = "purchases-kmp Sample.app"; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 7555FF82242A565900829871 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.swift; + path = ContentView.swift; + sourceTree = ""; + }; + 7555FF8C242A565B00829871 = { + isa = PBXFileReference; + lastKnownFileType = text.plist.xml; + path = Info.plist; + sourceTree = ""; + }; + AB3632DC29227652001CCB65 = { + isa = PBXFileReference; + fileEncoding = 4; + lastKnownFileType = text.xcconfig; + path = Config.xcconfig; + sourceTree = ""; + }; + FD277EB62D2C6C5B00E392B7 = { + isa = PBXFileReference; + lastKnownFileType = text; + path = SKConfig.storekit; + sourceTree = ""; + }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - B92378962B6B1156000C7307 /* Frameworks */ = { + B92378962B6B1156000C7307 = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + C4138C1E60F991BF33CA9E77, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 058557D7273AAEEB004C7B11 /* Preview Content */ = { + 058557D7273AAEEB004C7B11 = { isa = PBXGroup; children = ( - 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */, + 058557D8273AAEEB004C7B11, ); path = "Preview Content"; sourceTree = ""; }; - 38C5C97CCB7C1B4002B5B2EE /* Pods */ = { + 38C5C97CCB7C1B4002B5B2EE = { isa = PBXGroup; children = ( ); @@ -54,38 +116,38 @@ 7555FF72242A565900829871 = { isa = PBXGroup; children = ( - AB1DB47929225F7C00F7AF9C /* Configuration */, - 7555FF7D242A565900829871 /* iosApp */, - 7555FF7C242A565900829871 /* Products */, - 38C5C97CCB7C1B4002B5B2EE /* Pods */, + AB1DB47929225F7C00F7AF9C, + 7555FF7D242A565900829871, + 7555FF7C242A565900829871, + 38C5C97CCB7C1B4002B5B2EE, ); sourceTree = ""; }; - 7555FF7C242A565900829871 /* Products */ = { + 7555FF7C242A565900829871 = { isa = PBXGroup; children = ( - 7555FF7B242A565900829871 /* purchases-kmp Sample.app */, + 7555FF7B242A565900829871, ); name = Products; sourceTree = ""; }; - 7555FF7D242A565900829871 /* iosApp */ = { + 7555FF7D242A565900829871 = { isa = PBXGroup; children = ( - 058557BA273AAA24004C7B11 /* Assets.xcassets */, - 7555FF82242A565900829871 /* ContentView.swift */, - 7555FF8C242A565B00829871 /* Info.plist */, - 2152FB032600AC8F00CF470E /* iOSApp.swift */, - 058557D7273AAEEB004C7B11 /* Preview Content */, - FD277EB62D2C6C5B00E392B7 /* SKConfig.storekit */, + 058557BA273AAA24004C7B11, + 7555FF82242A565900829871, + 7555FF8C242A565B00829871, + 2152FB032600AC8F00CF470E, + 058557D7273AAEEB004C7B11, + FD277EB62D2C6C5B00E392B7, ); path = iosApp; sourceTree = ""; }; - AB1DB47929225F7C00F7AF9C /* Configuration */ = { + AB1DB47929225F7C00F7AF9C = { isa = PBXGroup; children = ( - AB3632DC29227652001CCB65 /* Config.xcconfig */, + AB3632DC29227652001CCB65, ); path = Configuration; sourceTree = ""; @@ -93,28 +155,31 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 7555FF7A242A565900829871 /* iosApp */ = { + 7555FF7A242A565900829871 = { isa = PBXNativeTarget; - buildConfigurationList = 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "iosApp" */; + buildConfigurationList = 7555FFA5242A565B00829871; buildPhases = ( - F36B1CEB2AD83DDC00CB74D5 /* Compile Kotlin Framework */, - 7555FF77242A565900829871 /* Sources */, - B92378962B6B1156000C7307 /* Frameworks */, - 7555FF79242A565900829871 /* Resources */, + F36B1CEB2AD83DDC00CB74D5, + 7555FF77242A565900829871, + B92378962B6B1156000C7307, + 7555FF79242A565900829871, ); buildRules = ( ); dependencies = ( ); name = iosApp; + packageProductDependencies = ( + 5D9EC301A4E3A958E2117A1D, + ); productName = iosApp; - productReference = 7555FF7B242A565900829871 /* purchases-kmp Sample.app */; + productReference = 7555FF7B242A565900829871; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 7555FF73242A565900829871 /* Project object */ = { + 7555FF73242A565900829871 = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1130; @@ -126,7 +191,7 @@ }; }; }; - buildConfigurationList = 7555FF76242A565900829871 /* Build configuration list for PBXProject "iosApp" */; + buildConfigurationList = 7555FF76242A565900829871; compatibilityVersion = "Xcode 12.0"; developmentRegion = en; hasScannedForEncodings = 0; @@ -135,30 +200,33 @@ Base, ); mainGroup = 7555FF72242A565900829871; - productRefGroup = 7555FF7C242A565900829871 /* Products */; + packageReferences = ( + 1216FB07F7808A2D34441211, + ); + productRefGroup = 7555FF7C242A565900829871; projectDirPath = ""; projectRoot = ""; targets = ( - 7555FF7A242A565900829871 /* iosApp */, + 7555FF7A242A565900829871, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 7555FF79242A565900829871 /* Resources */ = { + 7555FF79242A565900829871 = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */, - FD277EB72D2C6C5B00E392B7 /* SKConfig.storekit in Resources */, - 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */, + 058557D9273AAEEB004C7B11, + FD277EB72D2C6C5B00E392B7, + 058557BB273AAA24004C7B11, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - F36B1CEB2AD83DDC00CB74D5 /* Compile Kotlin Framework */ = { + F36B1CEB2AD83DDC00CB74D5 = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -179,21 +247,21 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 7555FF77242A565900829871 /* Sources */ = { + 7555FF77242A565900829871 = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */, - 7555FF83242A565900829871 /* ContentView.swift in Sources */, + 2152FB042600AC8F00CF470E, + 7555FF83242A565900829871, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 7555FFA3242A565B00829871 /* Debug */ = { + 7555FFA3242A565B00829871 = { isa = XCBuildConfiguration; - baseConfigurationReference = AB3632DC29227652001CCB65 /* Config.xcconfig */; + baseConfigurationReference = AB3632DC29227652001CCB65; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -253,9 +321,9 @@ }; name = Debug; }; - 7555FFA4242A565B00829871 /* Release */ = { + 7555FFA4242A565B00829871 = { isa = XCBuildConfiguration; - baseConfigurationReference = AB3632DC29227652001CCB65 /* Config.xcconfig */; + baseConfigurationReference = AB3632DC29227652001CCB65; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -309,7 +377,7 @@ }; name = Release; }; - 7555FFA6242A565B00829871 /* Debug */ = { + 7555FFA6242A565B00829871 = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -339,7 +407,7 @@ }; name = Debug; }; - 7555FFA7242A565B00829871 /* Release */ = { + 7555FFA7242A565B00829871 = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -371,25 +439,39 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 7555FF76242A565900829871 /* Build configuration list for PBXProject "iosApp" */ = { + 7555FF76242A565900829871 = { isa = XCConfigurationList; buildConfigurations = ( - 7555FFA3242A565B00829871 /* Debug */, - 7555FFA4242A565B00829871 /* Release */, + 7555FFA3242A565B00829871, + 7555FFA4242A565B00829871, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "iosApp" */ = { + 7555FFA5242A565B00829871 = { isa = XCConfigurationList; buildConfigurations = ( - 7555FFA6242A565B00829871 /* Debug */, - 7555FFA7242A565B00829871 /* Release */, + 7555FFA6242A565B00829871, + 7555FFA7242A565B00829871, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 1216FB07F7808A2D34441211 = { + isa = XCLocalSwiftPackageReference; + relativePath = _internal_linkage_SwiftPMImport; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 5D9EC301A4E3A958E2117A1D = { + isa = XCSwiftPackageProductDependency; + productName = _internal_linkage_SwiftPMImport; + }; +/* End XCSwiftPackageProductDependency section */ }; - rootObject = 7555FF73242A565900829871 /* Project object */; + rootObject = 7555FF73242A565900829871; } diff --git a/iosApp/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iosApp/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/iosApp/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000..7af237344 --- /dev/null +++ b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,24 @@ +{ + "originHash" : "cfcd41ff956336be936b50bad5bd0ca0ff2228590d45e9c9d24339f6e57400ee", + "pins" : [ + { + "identity" : "purchases-hybrid-common", + "kind" : "remoteSourceControl", + "location" : "https://github.com/RevenueCat/purchases-hybrid-common.git", + "state" : { + "revision" : "653dd5ac999ee3c0e4a712b4facc29a76d85472c", + "version" : "17.21.2" + } + }, + { + "identity" : "purchases-ios-spm", + "kind" : "remoteSourceControl", + "location" : "https://github.com/RevenueCat/purchases-ios-spm", + "state" : { + "revision" : "db54c3955115a5bc968db5a29737104638aeba93", + "version" : "5.49.2" + } + } + ], + "version" : 3 +} From b6f2c6e02d663c4763c784258b9cdb11b536f1f6 Mon Sep 17 00:00:00 2001 From: JayShortway <29483617+JayShortway@users.noreply.github.com> Date: Mon, 8 Dec 2025 19:16:26 +0100 Subject: [PATCH 7/8] Migrates CI --- .circleci/config.yml | 40 +++++++++++++++++++--------------------- fastlane/Fastfile | 40 +++++++++++++++++++--------------------- 2 files changed, 38 insertions(+), 42 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e7cc35da5..7131298af 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -37,13 +37,6 @@ commands: name: Install Android SDK platform tools command: sdkmanager "platform-tools" - install-cocoapods-on-macos: - steps: - - run: - name: Install CocoaPods - command: bundle exec pod install --repo-update - working_directory: iosApp - save-kotlin-native-compiler-to-cache: steps: - run: @@ -117,9 +110,9 @@ executors: ruby3: docker: - image: cimg/ruby:3.3.0 - xcode15: + xcode16: macos: - xcode: 15.4.0 + xcode: 16.4.0 resource_class: macos.m1.medium.gen1 environment: # Avoid waiting for Homebrew to auto update existing packages, as everything we care about is @@ -129,7 +122,7 @@ executors: jobs: update-purchases-hybrid-common-version: description: "Opens a PR updating the purchases-hybrid-common dependency to the latest version." - executor: xcode15 + executor: xcode16 steps: - checkout - revenuecat/install-gem-mac-dependencies: @@ -174,7 +167,7 @@ jobs: destination: detekt validate-binary-compatibility: - executor: xcode15 + executor: xcode16 steps: - install-android-sdk-on-macos - checkout @@ -208,7 +201,7 @@ jobs: - save-incremental-gradle-build-to-workspace build-libraries-ios: - executor: xcode15 + executor: xcode16 steps: - checkout - restore-gradle-user-home-directory-from-cache @@ -216,7 +209,6 @@ jobs: - attach-workspace-at-working-directory - revenuecat/install-gem-mac-dependencies: cache-version: v1 - - install-cocoapods-on-macos - run: name: Build libraries for iOS command: | @@ -249,7 +241,7 @@ jobs: - save-incremental-gradle-build-to-workspace build-sample-ios: - executor: xcode15 + executor: xcode16 steps: - checkout - restore-gradle-user-home-directory-from-cache @@ -257,15 +249,23 @@ jobs: - attach-workspace-at-working-directory - revenuecat/install-gem-mac-dependencies: cache-version: v1 - - install-cocoapods-on-macos - run: - name: Build sample app for iOS + name: Build Kotlin code for iOS sample app for every architecture command: | tasks=() for arch in Arm64 SimulatorArm64 X64; do tasks+=(":composeApp:compileKotlinIos$arch") done ./gradlew "${tasks[@]}" + - run: + name: Build iOS sample app + command: | + xcodebuild \ + -project iosApp/iosApp.xcodeproj \ + -scheme iosApp \ + -configuration Debug \ + -sdk iphonesimulator \ + build; - save-gradle-user-home-directory-to-cache - save-kotlin-native-compiler-to-cache - save-incremental-gradle-build-to-workspace @@ -288,7 +288,7 @@ jobs: - save-incremental-gradle-build-to-workspace public-api-tests-ios: - executor: xcode15 + executor: xcode16 steps: - checkout - restore-gradle-user-home-directory-from-cache @@ -296,7 +296,6 @@ jobs: - attach-workspace-at-working-directory - revenuecat/install-gem-mac-dependencies: cache-version: v1 - - install-cocoapods-on-macos - run: name: Test public API for iOS command: | @@ -327,7 +326,7 @@ jobs: - save-incremental-gradle-build-to-workspace unit-tests-ios: - executor: xcode15 + executor: xcode16 steps: - checkout - restore-gradle-user-home-directory-from-cache @@ -347,7 +346,7 @@ jobs: publish: description: "Publishes the SDK, either a SNAPSHOT or release version." - executor: xcode15 + executor: xcode16 parameters: snapshot: description: Whether to publish a SNAPSHOT version. Will publish a final release if set to false. @@ -357,7 +356,6 @@ jobs: - install-android-sdk-on-macos - revenuecat/install-gem-mac-dependencies: cache-version: v1 - - install-cocoapods-on-macos - restore-gradle-user-home-directory-from-cache - restore-kotlin-native-compiler-from-cache - when: diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 097b8685b..352de07b6 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -15,11 +15,7 @@ PATH_CHANGELOG_LATEST = './CHANGELOG-LATEST.md' PATH_CHANGELOG = './CHANGELOG.md' PATH_VERSIONS = './VERSIONS.md' FILES_WITH_SDK_VERSION = { - './gradle/libs.versions.toml' => ["revenuecat-kmp = \"{x}\""], - './core/core.podspec' => ["spec.version = '{x}'"], - './mappings/mappings.podspec' => ["spec.version = '{x}'"], - './models/models.podspec' => ["spec.version = '{x}'"], - './revenuecatui/revenuecatui.podspec' => ["spec.version = '{x}'"] + './gradle/libs.versions.toml' => ["revenuecat-kmp = \"{x}\""] } desc "Bumps version, edits changelog, and creates pull request" @@ -85,11 +81,10 @@ lane :update_hybrid_common do |options| UI.message("ℹ️ Setting Purchases Hybrid Common version: #{new_phc_version}") files_to_update = { "gradle/libs.versions.toml" => ["revenuecat-common = \"{x}\""], - "core/core.podspec" => ["spec.dependency 'PurchasesHybridCommon', '{x}'"], - "mappings/mappings.podspec" => ["spec.dependency 'PurchasesHybridCommon', '{x}'"], - "models/models.podspec" => ["spec.dependency 'PurchasesHybridCommon', '{x}'"], - "revenuecatui/revenuecatui.podspec" => ["spec.dependency 'PurchasesHybridCommonUI', '{x}'"], - "iosApp/Podfile" => [" pod 'PurchasesHybridCommon', '{x}'", " pod 'PurchasesHybridCommonUI', '{x}'"], + "iosApp/_internal_linkage_SwiftPMImport/subpackages/_core/Package.swift" => ["exact: \"{x}\","], + "iosApp/_internal_linkage_SwiftPMImport/subpackages/_mappings/Package.swift" => ["exact: \"{x}\","], + "iosApp/_internal_linkage_SwiftPMImport/subpackages/_models/Package.swift" => ["exact: \"{x}\","], + "iosApp/_internal_linkage_SwiftPMImport/subpackages/_revenuecatui/Package.swift" => ["exact: \"{x}\","], } if dry_run @@ -105,16 +100,19 @@ lane :update_hybrid_common do |options| open_pr: options[:open_pr] || false, automatic_release: options[:automatic_release] || false ) - # Making sure Podfile.lock is updated. - podfile = "iosApp/Podfile" - cocoapods( - podfile: podfile, - repo_update: true + # Making sure Package.resolved is updated. + spm( + command: "resolve", + package_path: "iosApp/_internal_linkage_SwiftPMImport", + ) + spm( + command: "resolve", + package_path: "iosApp/iosApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm", ) if options[:open_pr] git_commit( - path: ["#{podfile}.lock"], - message: "Updates Podfile.lock", + path: [package_resolved], + message: "Updates Package.resolved", skip_git_hooks: true ) push_to_git_remote( @@ -185,13 +183,13 @@ def get_phc_version .captures[0] UI.user_error!("Android PHC version not found.") if android_phc_version.nil? - ios_phc_version = File.read("../core/core.podspec") - .match("spec.dependency 'PurchasesHybridCommon', '(.*)'") + ios_phc_version = File.read("../iosApp/_internal_linkage_SwiftPMImport/subpackages/_core/Package.swift") + .match("exact: \"(.*)\",") .captures[0] UI.user_error!("iOS PHC version not found.") if ios_phc_version.nil? - ios_phc_ui_version = File.read("../revenuecatui/revenuecatui.podspec") - .match("spec.dependency 'PurchasesHybridCommonUI', '(.*)'") + ios_phc_ui_version = File.read("../iosApp/_internal_linkage_SwiftPMImport/subpackages/_revenuecatui/Package.swift") + .match("exact: \"(.*)\",") .captures[0] UI.user_error!("iOS PHC UI version not found.") if ios_phc_ui_version.nil? From 21cc92d6fd99f7d9dd0ac15748d80f41d08fb27a Mon Sep 17 00:00:00 2001 From: JayShortway <29483617+JayShortway@users.noreply.github.com> Date: Tue, 2 Dec 2025 13:58:39 +0100 Subject: [PATCH 8/8] Adds v3 migration doc --- migrations/3.0.0-dev-MIGRATION.md | 74 +++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 migrations/3.0.0-dev-MIGRATION.md diff --git a/migrations/3.0.0-dev-MIGRATION.md b/migrations/3.0.0-dev-MIGRATION.md new file mode 100644 index 000000000..871d99b95 --- /dev/null +++ b/migrations/3.0.0-dev-MIGRATION.md @@ -0,0 +1,74 @@ +# 3.0.0-dev Migration Guide +Version 3.0.0 is in developer preview and ready for early feedback! + +> [!WARNING] +> `3.0.0-dev` versions are **not** ready for production use. As of now there is **zero guarantee** that purchases-kmp will be going in this direction. + +This version is based on the public preview of Kotlin's upcoming SwiftPM import feature, which is currently being developed by JetBrains. Please try it out and [report any issues](https://github.com/RevenueCat/purchases-kmp/issues/new/) you find. Make sure to state clearly that you're using version 3.0.0. Thanks! + +## Remove the native iOS SDK +Coming from a version before `3.0.0-dev01`, your iOS project will have a dependency on RevenueCat's `PurchasesHybridCommon` native iOS dependency. This should be removed. The instructions depend on how you added it. + +### Remove from Swift Package Manager +If you've added `PurchasesHybridCommon` to your iOS project using Swift Package Manager, do the following: +1. Open Xcode and select your project in the Project navigator. +2. Click Package Dependencies. +3. Select the `PurchasesHybridCommon` dependency and click the '-' (minus) button to remove it. + +### Remove from CocoaPods +If you've added `PurchasesHybridCommon` to your iOS project using CocoaPods, there are 2 possible places where the `PurchasesHybridCommon` dependency could be defined. Make sure it is removed from both. + +Your `Podfile` might contain a line as follows. Remove this line: +```ruby +pod 'PurchasesHybridCommon', '17.21.2' +``` + +Your `build.gradle[.kts]` might contain a section as follows. Remove this section: +```kotlin +pod("PurchasesHybridCommon") { + version = "17.21.2" + extraOpts += listOf("-compiler-option", "-fmodules") +} +``` + +## Enable SwiftPM import +> [!NOTE] +> This is subject to change as JetBrains develops the SwiftPM import feature in Kotlin. + +This version of purchases-kmp is based on the public preview of Kotlin's upcoming SwiftPM import feature, currently being developed by JetBrains. The following steps are required to enable this feature. This is a one-time setup. + +Add the following Maven repository in your `settings.gradle[.kts]` file: +```kotlin +dependencyResolutionManagement { + repositories { + maven("https://packages.jetbrains.team/maven/p/kt/dev") + // existing repositories + } +} + +pluginManagement { + repositories { + maven("https://packages.jetbrains.team/maven/p/kt/dev") + // existing repositories + } +} +``` + +Then, make sure to use the following Kotlin version: `2.2.21-titan-208`. + +If you are using the Kotlin Multiplatform plugin for Android Studio or IntelliJ, specify the following in your `build.gradle[.kts]` file: +```kotlin +kotlin { + swiftPMDependencies { + xcodeProjectPathForKmpIJPlugin.set( + // Specify path to the xcodeproj with :embedAndSignAppleFrameworkForXcode integration: + layout.projectDirectory.file("../iosApp/iosApp.xcodeproj") + ) + } +} +``` + +Now, try to build your iOS project. If you're using [direct integration](https://kotlinlang.org/docs/multiplatform/multiplatform-direct-integration.html) (`embedAndSignAppleFrameworkForXcode`), the build probably fails. However, it will print a Gradle command (`integrateLinkagePackage` with prefilled arguments) for you to run. Run that command to generate the linkage package. This will create a local Swift package named `_internal_linkage_SwiftPMImport`. This package should be version controlled. If you now build your iOS project again, it should succeed. + +## Reporting undocumented issues: +Feel free to file an issue! [New RevenueCat Issue](https://github.com/RevenueCat/purchases-kmp/issues/new/). Make sure to state clearly that you're using version 3.0.0. Thanks!