Apple guideline 3.1.2(b) and the FTC Negative Option Rule both require that free trial terms — duration and post-trial price — are clearly disclosed before the user initiates the trial. A paywall that shows "Start Free Trial" without disclosing what the user will be charged after the trial is one of the most common subscription rejection reasons Apple cites. The FTC Negative Option Rule (effective 2024) extends this obligation to US consumers in digital subscription flows: failure to disclose post-trial pricing is an unfair or deceptive act regardless of where the purchase occurs. The compliance risk applies to the developer directly, not only to the platform relationship.
High because missing post-trial price disclosure is one of the most cited subscription rejection reasons under Apple guideline 3.1.2(b) and also triggers FTC Negative Option Rule exposure for US users.
Display the trial duration and the post-trial price together, near the CTA, before the user taps. Never hardcode these values — fetch them from the SDK so they stay accurate if the offer changes in App Store Connect.
// RevenueCat — fetch trial terms from SDK
const pkg = offering?.monthly;
const introPrice = pkg?.product.introductoryPrice;
const trialPeriod = introPrice?.subscriptionPeriod; // e.g., "P7D"
const regularPrice = pkg?.product.priceString;
// Display near CTA
<Text>7-day free trial</Text>
<Text>Then {regularPrice}/month — cancel anytime in Settings</Text>
<Text>You won't be charged until {formatTrialEndDate(trialPeriod)}</Text>
<SubscribeButton title="Start Free Trial" />
If you hardcode trial duration ("7-day free trial"), a change in App Store Connect without a code update creates a mismatch between the disclosed and actual trial — which is an additional violation.
app-store-iap-subscriptions.subscription-lifecycle.free-trial-termshighproduct.introductoryPrice (StoreKit 2 Product.SubscriptionInfo.introductoryOffer), Purchases.getOfferings() packages with introPrice from RevenueCat, AdaptyPaywallProduct.introductoryOfferEligibility, or SKProductSubscriptionPeriod. Failure patterns: "Start Free Trial" button with no mention of what happens after the trial; trial duration shown but no post-trial price; "Try 7 days free" CTA with the regular subscription price only shown in small text that could be considered obscured; toggling between "Free Trial" and "Subscribe" with confusing price presentation."PaywallScreen shows '7-Day Free Trial' button but no disclosure of the $9.99/month charge that follows — Apple guideline 3.1.2(b) requires clear post-trial pricing"<Text>7-day free trial</Text>
<Text>Then {regularPrice}/month — cancel anytime in Settings</Text>
<Text>You won't be charged until {trialEndDate}</Text>
<SubscribeButton title="Start Free Trial" />
// RevenueCat
const introPrice = pkg.product.introductoryPrice;
const trialPeriod = introPrice?.subscriptionPeriod; // e.g., "P7D"