[Billing Plans]: Dont support upFront compound product identifiers#6786
Merged
Conversation
MarkVillacampa
approved these changes
May 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Don't support
:upFrontin product identifiers since the backend doesn't support them. This isn't a breaking change since nothing has been released yet.Note
Medium Risk
Changes product identifier handling in
ProductsManagerand adds new public API (BillingPlanType,InstallmentsInfo) that affects how StoreKit2 products are returned when billing-plan suffixes are used; mistakes could cause products to be dropped or misidentified. Most behavior is gated behind Swift 6.3.2 / iOS 26.4 availability, reducing blast radius on older platforms.Overview
Adds first-class support for StoreKit 2 billing-plan compound product identifiers (e.g.
productId:monthly) by parsing identifiers, de-duplicating StoreKit fetches to base product IDs, and optionally returning billing-plan-specificSK2StoreProductvariants while removing the base product when it wasn’t explicitly requested.Introduces new public types
BillingPlanTypeandInstallmentsInfo, and exposesStoreProduct.installmentsInfo(iOS 26.4+) populated via a newInstallmentsInfoFactoryfor eligible monthly billing plans; unsupported/invalid plan identifiers (including:upFront) are ignored with new StoreKit log warnings.Updates unit tests, API testers, and the PurchaseTester app to cover/display compound identifiers, billing plan types, and installments info, plus adds helper availability checks and adjusts
SK2StoreProducthashing/equality to include the compound identifier.Reviewed by Cursor Bugbot for commit 56efb8a. Bugbot is set up for automated code reviews on this repo. Configure here.