Skip to content

Feature request: Support StoreKit billing plan selection for 12-month commitment subscriptions #161

Description

@freemansion

Description

Summary

Apple introduced monthly subscriptions with a 12-month commitment, configured on an existing yearly auto-renewable subscription. StoreKit exposes this through Product.SubscriptionInfo.pricingTerms and requires passing an explicit purchase
option to choose the billing plan:

try await product.purchase(options: [.billingPlanType(.monthly)])

Currently, Adapty iOS SDK exposes:

try await Adapty.makePurchase(product: product)

but I cannot find a public way to pass Product.PurchaseOption.billingPlanType(_:) or otherwise choose between .upFront and .monthly billing plans for the same yearly product.

Use case

We have one App Store product, that can be sold as:

  • yearly upfront: billingPlanType == .upFront
  • monthly payments with 12-month commitment: billingPlanType == .monthly

Both choices share the same App Store product ID, but they need distinct UI rows and distinct purchase routing.

Current workaround

For the commitment option, we have to bypass Adapty purchase flow and call StoreKit directly:

let result = try await sk2Product.purchase(options: [.billingPlanType(.monthly)])

Then we call Adapty restore/profile refresh to sync entitlement state.

This works for StoreKit purchase selection, but it may lose or weaken Adapty dashboard attribution, paywall variation attribution, A/B test attribution, and purchase analytics because the purchase did not go through:

Adapty.makePurchase(product:)

Requested API

Please add a public purchase API that allows selecting the StoreKit billing plan while preserving Adapty purchase tracking and paywall attribution.

Possible shape:

try await Adapty.makePurchase(
    product: product,
    options: [.billingPlanType(.monthly)]
)

or a typed Adapty abstraction:

try await Adapty.makePurchase(
    product: product,
    billingPlanType: .monthly
)

For yearly upfront:

try await Adapty.makePurchase(
    product: product,
    billingPlanType: .upFront
)

Why this matters

Without this, apps that use Adapty for paywalls and subscription analytics must choose between:

  1. using Adapty purchase flow but not being able to select the monthly commitment billing plan, or
  2. using native StoreKit purchase flow and risking incomplete Adapty dashboard/paywall attribution.

Environment

  • iOS SDK: Xcode 26.5 SDK
  • Runtime requirement: iOS 26.4+
  • StoreKit API: Product.SubscriptionInfo.pricingTerms, Product.PurchaseOption.billingPlanType(_:)
  • Adapty iOS SDK: current public API exposes Adapty.makePurchase(product:)

Question

Is billing plan selection for 12-month commitment subscriptions already supported somewhere in the SDK or planned for an upcoming release?

If not, would you consider exposing a public API for passing Product.PurchaseOption.billingPlanType(_:) while keeping Adapty’s transaction validation, profile updates, paywall attribution, and dashboard analytics intact?

Proposed Solution

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions