Skip to main content

Overview

Superwall owns the paywall, so the only thing that changes is where you call show(). Everything else in Presenting Offers applies unchanged: the same placement call, the same purchase controller, the same outcome model.
Type ambiguity with SuperwallKit. Both Encore and SuperwallKit declare a type named PresentationResult. In any file that imports both, add a scoped import at the top:
Writing Encore.PresentationResult inline does not disambiguate, because Encore names both the module and the facade class, and Swift resolves the class first. The scoped enum import is the fix.

Trigger on paywall dismissal

Present an offer when a user closes your Superwall paywall without converting. Delegate methods are synchronous and nonisolated, so bridge with a Task:
Full contract: placement().

Trigger from a custom paywall action

Superwall paywalls can emit named actions. Handle the name in your delegate and route it to a placement:
In the Superwall editor, add a custom action named EncoreTrigger to the button or element that should open the offer.

Next