Purchases checked with Apple
When your app reports a purchase or a restore, Xee asks Apple about it with your In-App Purchase key. Premium is on as soon as the purchase returns.
headline without shipping a build.Xee is the subscription backend for iOS apps. It checks every purchase with Apple, keeps each user’s access current, and runs A/B tests on the values in your SwiftUI paywall. Claude sets it up from your editor.
Paywalls
It remains a normal SwiftUI view in your app. Xee keeps the values you might want to change without a release: the headline, the button text, which products show, whether the trial toggle is on. The value on screen today becomes the default in your Swift code, so the paywall still works offline.
Prices, trial lengths and legal text stay with the product and the code, where they are always right.
How Claude turns a paywall into variables// The values come from Xee; the defaults are today's screen.
let paywall = try await Xee.getPaywallVariant(paywallId: "main")
let v = paywall.remoteConfig?.dictionary
let headline = v?["headline"] as? String ?? "Unlock every feature"
let button = v?["button_text"] as? String ?? "Continue"
// One access level for every product.
let profile = try await Xee.getProfile()
let isPremium = profile.accessLevels["premium"]?.isActive == trueWhat Xee does
When your app reports a purchase or a restore, Xee asks Apple about it with your In-App Purchase key. Premium is on as soon as the purchase returns.
Apple's App Store Server Notifications reach Xee while your app is closed, so every profile knows about a renewal, a billing retry or a refund.
Test a headline, the button text or which plan is preselected. Send 5 to 95% of users to B, watch who buys, and ship the winner from the dashboard.
When a customer asks Apple for a refund, Xee answers Apple's consumption request with how the purchase was used and the outcome you prefer.
One timeline per user: every purchase, restore, renewal and notification from Apple, with what Xee did about it.
Revenue by product, the paywall funnel, refunds and retention, per app, without exporting anything.
Claude
Xee has an MCP server. Connected to Claude Code, Claude reads your paywalls, moves their values into Xee, pushes new versions and reads test results, without you leaving the editor. You start and ship tests yourself, in the dashboard.
Connect Claude to Xee$ claude mcp add --transport http xee https://api.xee.ai/mcpMigrate
The calls map almost one to one, and the access level, the profile and the paywall-then-products flow work the way you know. Run both SDKs for a while, bring your subscribers into Xee, and remove the old one when your own numbers say it is safe.
Read the migration guide| Adapty | Xee |
|---|---|
Adapty.activate | Xee.activate(with:) |
Adapty.getProfile() | Xee.getProfile() |
Adapty.getPaywall(placementId:) | Xee.getPaywallVariant(paywallId:) |
Adapty.getPaywallProducts(paywall:) | Xee.getPaywallVariantProducts(paywallVariant:) |
Adapty.logShowPaywall | Xee.logShowPaywallVariant(_:) |
Set up
button_text is a test away.