diff --git a/packages/apple/Sources/OpenIapModule.swift b/packages/apple/Sources/OpenIapModule.swift index 12888f10..2200b6f3 100644 --- a/packages/apple/Sources/OpenIapModule.swift +++ b/packages/apple/Sources/OpenIapModule.swift @@ -1615,14 +1615,14 @@ public final class OpenIapModule: NSObject, OpenIapModuleProtocol { /// Resolves iOS purchase props from request params. /// Returns either RequestPurchaseIosProps or RequestSubscriptionIosProps based on request type. - private func resolveIOSPurchaseProps(from params: RequestPurchaseProps) throws -> any IosPropsProtocol { + func resolveIOSPurchaseProps(from params: RequestPurchaseProps) throws -> any IosPropsProtocol { switch params.request { case let .purchase(platforms): - if let ios = platforms.ios { + if let ios = platforms.apple ?? platforms.ios { return ios } case let .subscription(platforms): - if let ios = platforms.ios { + if let ios = platforms.apple ?? platforms.ios { return ios } } diff --git a/packages/apple/Tests/OpenIapTests.swift b/packages/apple/Tests/OpenIapTests.swift index 8cdeb2de..91ad6b2a 100644 --- a/packages/apple/Tests/OpenIapTests.swift +++ b/packages/apple/Tests/OpenIapTests.swift @@ -453,6 +453,47 @@ final class OpenIapTests: XCTestCase { XCTAssertNil(decoded.advancedCommerceData) } + @available(iOS 15.0, macOS 14.0, tvOS 16.0, watchOS 8.0, *) + func testResolvePurchasePropsUsesAppleAlias() throws { + let props = RequestPurchaseProps( + request: .purchase(RequestPurchasePropsByPlatforms( + apple: RequestPurchaseIosProps(sku: "dev.hyo.apple"), + ios: RequestPurchaseIosProps(sku: "dev.hyo.legacy") + )) + ) + + let resolved = try OpenIapModule.shared.resolveIOSPurchaseProps(from: props) + + XCTAssertEqual(resolved.sku, "dev.hyo.apple") + } + + @available(iOS 15.0, macOS 14.0, tvOS 16.0, watchOS 8.0, *) + func testResolvePurchasePropsFallsBackToLegacyIosAlias() throws { + let props = RequestPurchaseProps( + request: .purchase(RequestPurchasePropsByPlatforms( + ios: RequestPurchaseIosProps(sku: "dev.hyo.legacy") + )) + ) + + let resolved = try OpenIapModule.shared.resolveIOSPurchaseProps(from: props) + + XCTAssertEqual(resolved.sku, "dev.hyo.legacy") + } + + @available(iOS 15.0, macOS 14.0, tvOS 16.0, watchOS 8.0, *) + func testResolveSubscriptionPropsUsesAppleAlias() throws { + let props = RequestPurchaseProps( + request: .subscription(RequestSubscriptionPropsByPlatforms( + apple: RequestSubscriptionIosProps(sku: "dev.hyo.sub.apple"), + ios: RequestSubscriptionIosProps(sku: "dev.hyo.sub.legacy") + )) + ) + + let resolved = try OpenIapModule.shared.resolveIOSPurchaseProps(from: props) + + XCTAssertEqual(resolved.sku, "dev.hyo.sub.apple") + } + func testAdvancedCommerceDataJSONSerialization() throws { let props = RequestPurchaseIosProps( advancedCommerceData: "promo_code_abc", diff --git a/packages/docs/src/generated/version-metadata.json b/packages/docs/src/generated/version-metadata.json index 145c8d35..491c12c4 100644 --- a/packages/docs/src/generated/version-metadata.json +++ b/packages/docs/src/generated/version-metadata.json @@ -6,7 +6,7 @@ "godotPackageVersion": "2.3.1", "kmpPackageVersion": "2.3.1", "mauiPackageId": "OpenIap.Maui", - "mauiPackageVersion": "1.1.1", + "mauiPackageVersion": "1.1.2", "googleCompileSdk": "35", "googleMinSdk": "23", "googlePlayBillingVersion": "8.3.0",