Skip to content

About

Remotely configure every aspect of your paywall and double your revenue.

Topics

Resources

Code of conduct

Contributing

Stars

175 stars

Watchers

7 watching

Forks

Repository files navigation


logo

In-App Paywalls Made Easy 💸


SwiftPM Compatible Cocoapods Compatible iOS Versions Supported MIT License Community Active Version Number


Superwall lets you remotely configure every aspect of your paywall — helping you find winners quickly.

SuperwallKit.framework

SuperwallKit is an open source framework that provides a wrapper around WebKit for presenting and creating paywalls. It interacts with the Superwall backend letting you easily iterate paywalls on the fly in Swift or Objective-C!

Migrating to v4

  • If you're upgrading from v3.x of our SDK, please follow our Migration Guide

Features

Superwall
✅ Server-side paywall iteration
🎯 Paywall conversion rate tracking - know whether a user converted after seeing a paywall
🆓 Trial start rate tracking - know and measure your trial start rate out of the box
📊 Analytics - automatic calculation of metrics like conversion and views
✏️ A/B Testing - automatically calculate metrics for different paywalls
📝 Online documentation up to date
🔀 Integrations - over a dozen integrations to easily send conversion data where you need it
💯 Well maintained - frequent releases
📮 Great support - email a founder: jake@superwall.com

Installation

Swift Package Manager

The preferred installation method is with Swift Package Manager. This is a tool for automating the distribution of Swift code and is integrated into the swift compiler. In Xcode, do the following:

  • Select File ▸ Add Packages...
  • Search for https://github.com/superwall/Superwall-iOS in the search bar.
  • Set the Dependency Rule to Up to Next Major Version with the lower bound set to 4.0.0.
  • Make sure your project name is selected in Add to Project.
  • Then, Add Package.

Cocoapods

Cocoapods is an alternative dependency manager for iOS projects. For usage and installation instructions, please visit their website. To include the Superwall SDK in your app, add the following to your Podfile:

pod 'SuperwallKit', '< 5.0.0'

Next, run pod repo update to update your local spec repo.

Then, run pod install from your terminal.

Getting Started

Sign up for a free account on Superwall and read our docs.

You can also view our iOS SDK docs. If you'd like to view it in Xcode, select Product ▸ Build Documentation.

Read our Kodeco (previously Ray Wenderlich) tutorial: Superwall: Remote Paywall Configuration on iOS.

Check out our sample apps for a hands-on demonstration of the SDK:

Contributing

Please see the CONTRIBUTING file for how to help.

Device IP observations

IP collection is off by default. It only runs when the backend turns on attributionOptions.mmp.enabled in the app's config. When it's off, no IP lookups are made and no ipV4/ipV6 attributes are exposed.

During enrichment, the SDK also starts a best-effort request to https://v4.superwall-enrichment.com/api/v1/enrich. It sends no user attributes or API key to this endpoint. The host is kept separate from the main enrichment API on purpose: it only has an IPv4 address (no AAAA record), so the request always goes out over IPv4. It has no development version, so the request is only made with the release network environments. Timestamps may be sent with or without milliseconds.

It also asks https://beacon-v6.superwall.com/api/v1/enrich for the IPv6 address. That host is reachable over both IPv4 and IPv6 (Cloudflare can't make a proxied host IPv6-only), so the SDK makes this request over a connection that may only use IPv6 (NWConnection with the IP version set to IPv6). On a network without IPv6 the request fails, and the device simply has no ipV6. The endpoint must answer GET with {"device": {"ipAddress": <IPv6>, "ipAddressObservedAt": <ISO 8601>}}, like the IPv4 one. This lookup isn't made on watchOS.

The existing enrichment API continues to provide geo and demand scoring. It must also return the observed ipV4 or ipV6 and corresponding ISO 8601 ipV4ObservedAt / ipV6ObservedAt timestamp to capture that connection's address.

The SDK exposes ipV4, ipV6, ipV4ObservedAt, and ipV6ObservedAt as device attributes when available. They remain separate: an IPv4 response does not erase IPv6. The IPv6 address is often one of the device's temporary privacy addresses, so it changes more often than IPv4. These are public network egress addresses, potentially shared through NAT or VPN.

The extra request never blocks configuration or purchases. While the MMP is on, a lookup can start whenever device attributes are read, at most once every 15 minutes, or a minute after a failed one. The IPv4 and IPv6 lookups keep separate schedules. The IPv4 collector is session-local; the existing enrichment cache may restore a still-fresh observation after relaunch. All observations are omitted from device attributes after 15 minutes; network changes can make them stale sooner. Any ipAddress the enrichment API returns is passed through unchanged. They are not proof of identity. Downstream consumers must preserve the timestamps and apply their own freshness policy. Wrapper SDKs receive this behavior when they adopt a native SDK release containing it.

About

Remotely configure every aspect of your paywall and double your revenue.

Topics

Resources

Code of conduct

Contributing

Stars

175 stars

Watchers

7 watching

Forks

Releases

Used by

Contributors

Languages