From 75063bdb21a180723e49337ac33aa8dcf036f8c2 Mon Sep 17 00:00:00 2001 From: NachoSoto Date: Thu, 14 Sep 2023 12:16:45 -0700 Subject: [PATCH] Changed approach to discourage with a warning log --- .../Logging/Strings/ConfigureStrings.swift | 4 +++ Sources/Purchasing/Configuration.swift | 26 ++++++--------- Sources/Purchasing/Purchases/Purchases.swift | 4 +-- .../ObjCAPITester/RCConfigurationAPI.m | 5 ++- .../SwiftAPITester/ConfigurationAPI.swift | 2 -- .../Purchasing/ConfigurationTests.swift | 32 ++++++++++++++----- .../Purchases/PurchasesConfiguringTests.swift | 2 +- 7 files changed, 42 insertions(+), 33 deletions(-) diff --git a/Sources/Logging/Strings/ConfigureStrings.swift b/Sources/Logging/Strings/ConfigureStrings.swift index c3ec5b426a..4ff05e9a54 100644 --- a/Sources/Logging/Strings/ConfigureStrings.swift +++ b/Sources/Logging/Strings/ConfigureStrings.swift @@ -33,6 +33,8 @@ enum ConfigureStrings { case observer_mode_enabled + case observer_mode_with_storekit2 + case response_verification_mode(Signing.ResponseVerificationMode) case delegate_set @@ -98,6 +100,8 @@ extension ConfigureStrings: LogMessage { return "StoreKit 2 support enabled" case .observer_mode_enabled: return "Purchases is configured in observer mode" + case .observer_mode_with_storekit2: + return "Observer mode is not currently compatible with StoreKit 2." case let .response_verification_mode(mode): switch mode { case .disabled: diff --git a/Sources/Purchasing/Configuration.swift b/Sources/Purchasing/Configuration.swift index 93e5e62589..01f04f7b19 100644 --- a/Sources/Purchasing/Configuration.swift +++ b/Sources/Purchasing/Configuration.swift @@ -64,6 +64,8 @@ import Foundation private init(with builder: Builder) { Self.verify(apiKey: builder.apiKey) + Self.verify(observerMode: builder.observerMode, + storeKit2Setting: builder.storeKit2Setting) self.apiKey = builder.apiKey self.appUserID = builder.appUserID @@ -142,28 +144,12 @@ import Foundation * RevenueCat's backend. Default is `false`. * * - Warning: This assumes your IAP implementation uses StoreKit 1. - * If you use StoreKit 2, use ``with(observerMode:storeKitVersion:)`` instead. + * Observer mode is not compatible with StoreKit 2. */ @objc public func with(observerMode: Bool) -> Configuration.Builder { - return self.with(observerMode: observerMode, storeKitVersion: .storeKit1) - } - - /** - * Set `observerMode` with a corresponding `StoreKit` implementation. - * - Parameter observerMode: Set this to `true` if you have your own IAP implementation and want to use only - * RevenueCat's backend. Default is `false`. - * - Parameter storeKitVersion: Set this to the StoreKit implementation your app uses for purchases. - * I.e.: if your app uses `StoreKit 1`, set it to ``Configuration/StoreKitVersion/storeKit1`` - * and if your app uses `StoreKit 2`, set it to ``Configuration/StoreKitVersion/storeKit2``. - * Apps using `StoreKit 1` use `SKPaymentQueue` for transactions, - * whereas `StoreKit 2` uses `StoreKit.Product.Purchase`. - */ - @objc public func with(observerMode: Bool, storeKitVersion: StoreKitVersion) -> Builder { self.observerMode = observerMode - self.storeKit2Setting = .init(version: storeKitVersion) return self } - /** * Set `userDefaults`. * - Parameter userDefaults: Custom `UserDefaults` to use @@ -318,6 +304,12 @@ extension Configuration { } } + fileprivate static func verify(observerMode: Bool, storeKit2Setting: StoreKit2Setting) { + if observerMode, storeKit2Setting.usesStoreKit2IfAvailable { + Logger.warn(Strings.configure.observer_mode_with_storekit2) + } + } + private static let applePlatformKeyPrefix: String = "appl_" } diff --git a/Sources/Purchasing/Purchases/Purchases.swift b/Sources/Purchasing/Purchases/Purchases.swift index af58b09d8f..1859d4191f 100644 --- a/Sources/Purchasing/Purchases/Purchases.swift +++ b/Sources/Purchasing/Purchases/Purchases.swift @@ -1139,8 +1139,8 @@ public extension Purchases { * * - Returns: An instantiated ``Purchases`` object that has been set as a singleton. * - * - Note: This assumes your IAP implementation uses StoreKit 1. - * If you use StoreKit 2, use ``Configuration/Builder/with(observerMode:storeKitVersion:)`` instead. + * - Warning: This assumes your IAP implementation uses StoreKit 1. + * Observer mode is not compatible with StoreKit 2. */ @objc(configureWithAPIKey:appUserID:observerMode:) @discardableResult static func configure(withAPIKey apiKey: String, diff --git a/Tests/APITesters/ObjCAPITester/ObjCAPITester/RCConfigurationAPI.m b/Tests/APITesters/ObjCAPITester/ObjCAPITester/RCConfigurationAPI.m index 793050a496..cee7cb911f 100644 --- a/Tests/APITesters/ObjCAPITester/ObjCAPITester/RCConfigurationAPI.m +++ b/Tests/APITesters/ObjCAPITester/ObjCAPITester/RCConfigurationAPI.m @@ -13,9 +13,8 @@ @implementation RCConfigurationAPI + (void)checkAPI { RCConfigurationBuilder *builder = [RCConfiguration builderWithAPIKey:@""]; - RCConfiguration *config __unused = [[[[[[[[[[[[builder withApiKey:@""] - withObserverMode:false] - withObserverMode:true storeKitVersion:RCConfigurationStoreKitVersionStoreKit1] + RCConfiguration *config __unused = [[[[[[[[[[[builder withApiKey:@""] + withObserverMode:false] withUserDefaults:NSUserDefaults.standardUserDefaults] withAppUserID:@""] withAppUserID:nil] diff --git a/Tests/APITesters/SwiftAPITester/SwiftAPITester/ConfigurationAPI.swift b/Tests/APITesters/SwiftAPITester/SwiftAPITester/ConfigurationAPI.swift index 3b1711e755..c556bb3d16 100644 --- a/Tests/APITesters/SwiftAPITester/SwiftAPITester/ConfigurationAPI.swift +++ b/Tests/APITesters/SwiftAPITester/SwiftAPITester/ConfigurationAPI.swift @@ -15,8 +15,6 @@ func checkConfigurationAPI() { .with(appUserID: "") .with(appUserID: nil) .with(observerMode: true) - .with(observerMode: false, storeKitVersion: .storeKit1) - .with(observerMode: true, storeKitVersion: .storeKit2) .with(userDefaults: UserDefaults.standard) .with(dangerousSettings: DangerousSettings()) .with(dangerousSettings: DangerousSettings(autoSyncPurchases: true)) diff --git a/Tests/UnitTests/Purchasing/ConfigurationTests.swift b/Tests/UnitTests/Purchasing/ConfigurationTests.swift index 4ae9b4d642..ba51cf70ad 100644 --- a/Tests/UnitTests/Purchasing/ConfigurationTests.swift +++ b/Tests/UnitTests/Purchasing/ConfigurationTests.swift @@ -31,34 +31,50 @@ class ConfigurationTests: TestCase { expect(Configuration.validate(apiKey: "swRTCezdEzjnJSxdexDNJfcfiFrMXwqZ")) == .legacy } - @available(*, deprecated) - func testObserverModeDefaultsToStoreKit1() { - let observerMode = Bool.random() + func testNoObserverModeWithStoreKit1() { + let configuration = Configuration.Builder(withAPIKey: "test").build() + + expect(configuration.observerMode) == false + expect(configuration.storeKit2Setting) == .enabledOnlyForOptimizations + self.logger.verifyMessageWasNotLogged(Strings.configure.observer_mode_with_storekit2) + } + + @available(*, deprecated) + func testNoObserverModeWithStoreKit2() { let configuration = Configuration.Builder(withAPIKey: "test") - .with(observerMode: observerMode) + .with(usesStoreKit2IfAvailable: true) .build() - expect(configuration.observerMode) == observerMode - expect(configuration.storeKit2Setting) == .enabledOnlyForOptimizations + expect(configuration.observerMode) == false + expect(configuration.storeKit2Setting) == .enabledForCompatibleDevices + + self.logger.verifyMessageWasNotLogged(Strings.configure.observer_mode_with_storekit2) } func testObserverModeWithStoreKit1() { let configuration = Configuration.Builder(withAPIKey: "test") - .with(observerMode: true, storeKitVersion: .storeKit1) + .with(observerMode: true) .build() expect(configuration.observerMode) == true expect(configuration.storeKit2Setting) == .enabledOnlyForOptimizations + + self.logger.verifyMessageWasNotLogged(Strings.configure.observer_mode_with_storekit2) } + @available(*, deprecated) func testObserverModeWithStoreKit2() { let configuration = Configuration.Builder(withAPIKey: "test") - .with(observerMode: true, storeKitVersion: .storeKit2) + .with(observerMode: true) + .with(usesStoreKit2IfAvailable: true) .build() expect(configuration.observerMode) == true expect(configuration.storeKit2Setting) == .enabledForCompatibleDevices + + self.logger.verifyMessageWasLogged(Strings.configure.observer_mode_with_storekit2, + level: .warn) } } diff --git a/Tests/UnitTests/Purchasing/Purchases/PurchasesConfiguringTests.swift b/Tests/UnitTests/Purchasing/Purchases/PurchasesConfiguringTests.swift index 6b64644a1a..e0ac94301d 100644 --- a/Tests/UnitTests/Purchasing/Purchases/PurchasesConfiguringTests.swift +++ b/Tests/UnitTests/Purchasing/Purchases/PurchasesConfiguringTests.swift @@ -519,7 +519,7 @@ class PurchasesConfiguringTests: BasePurchasesTests { private static func create(observerMode: Bool) -> Purchases { return Purchases.configure( with: .init(withAPIKey: "") - .with(observerMode: observerMode, storeKitVersion: .storeKit1) + .with(observerMode: observerMode) ) }