Files
purchases-ios/Examples/CheckpointTester
Rick a3dc5f14cc feat(checkpoints): add app-owned offering presenter API (#7626)
* feat(checkpoints): add app-owned offering presenter API

* refactor(checkpoints): rename offering presenter to paywall presenter

* Add paywall presenter API for checkpoint offerings

* Fix paywall presenter linting

* Map paywall presenter outcomes to checkpoint results

* Add local checkpoint paywall presenter overrides

* Add checkpoint paywall presenter demo to tester

* Fix paywall presenter integration after rebase

* Pass purchase results through custom paywall presenters

* Add checkpoint presenter files to Xcode project

* Align checkpoint tester with FlowResult API

* Remove legacy checkpoint result APIs

* Synchronize customer info after custom paywall presentation

* Refine checkpoint paywall presentation handling

* Merge checkpoint workflow execution into presenter

* Centralize checkpoint paywall presenter selection

* Fix checkpoint tester paywall presentation lifecycle

* Release checkpoint presentation before syncing

* Rename global checkpoint paywall presenter

* Internalize paywall presentation params initializer

* Capture paywall presenter before checkpoint resolution

* Make paywall presentation result forward compatible

* Cover stale checkpoint presentation completions

* Extract checkpoint presentation slot

* Unify checkpoint presentation coordination

* Simplify checkpoint manager dependencies

* Simplify checkpoint presentation outcomes

* Internalize checkpoint workflow state

* Clarify checkpoint presentation naming

* Align presenter API with callback-only checkpoints

* Simplify checkpoint presentation internals

* Handle terminal offering steps in paywall resolution

* Disable exit offers for checkpoint paywalls

* Clarify obtained entitlement semantics

* Complete cancellation for detached checkpoint paywalls

* Update checkpoint files in Xcode project

* Avoid Swift if expression in checkpoint presenter

* Guard workflow presenter execution tests by platform

* Support older Swift checkpoint presenter builds

* Clarify checkpoint presentation type naming

* Clarify continued paywall result documentation

* Preserve completed default paywall outcomes

* Move checkpoint exit-offer opt-out to follow-up

* Remove cancellation handling for the retired async checkpoint API
2026-09-18 10:01:36 +02:00
..

CheckpointTester

CheckpointTester is a Tuist-generated example for the experimental checkpoint APIs.

The app demonstrates how application behavior can respond to checkpoint results:

  • configuring Purchases;
  • keeping premium content locked unless a checkpoint returns purchased or restored;
  • presenting a soft paywall without blocking its content;
  • completing an onboarding flow regardless of the checkpoint result;
  • skipping a checkpoint when CustomerInfo already contains an active entitlement;
  • exercising deterministic no-action and error results;
  • setting or unsetting subscriber attributes used by checkpoint rules;
  • editing custom checkpoint properties and displaying a live analytics event log.

Use the person button in any tab's navigation bar to set or unset one subscriber attribute. The attributes are part of the checkpoint rule evaluation scope, so this can change which rule matches without rebuilding the app. Unsetting passes an empty string, which is how the iOS SDK deletes an attribute.

The generated app shares PaywallsTester's bundle identifier and Products.storekit configuration so it can use the same local in-app purchase products and RevenueCat project.

Generate the project from the repository root:

TUIST_RC_API_KEY=appl_your_key \
tuist generate CheckpointTester --no-open

The app configures RevenueCat before showing its root screen, so generation requires a valid public iOS API key. The app explicitly imports RevenueCatUI's experimental Checkpoints SPI; regular SDK consumers do not see this API surface.