Everybody wants to maximize their in-app revenue; however, sometimes they compromise with the UX to achieve that. The trick to raising your revenue graph is by providing a super UX to your users. If you are developing an app for the iOS audience, learning how you can leverage StoreKit 3 is crucial.
In this blog, we will discuss the nuances of monetization in iOS, iPadOS, macOS, watchOS, and tvOS while developing an app. From the benefits of StoreKit 3 to how you can get started with it, we will share all the important stuff required in building an app that provides maximum revenue.
StoreKit 3 is primarily known for providing privacy-focused and efficient ways to manage in-app purchases and subscriptions across Apple platforms. It is a robust and crucial tool for developers. Let’s understand why it matters in 2025:
Privacy-Centric Design: StoreKit 3 stays ahead of the evolving App Store policies and ensures compliance by minimizing data tracking. It also offloads purchase validation to Apple’s secure servers.
Simplified Subscription Management: You get modern API integrations through StoreKit 3, which positively affects handling of renewals, cancellations, billing, and upgrade issues.
Real-Time Transaction Updates: The TransactionListener tool in StoreKit 3 allows developers to access timely and reliable transaction data.
Support for Family Sharing & Offer Codes: These features allow developers to drive retention and reach wider audiences without additional implementation burden.
Cross-Platform Consistency: Platform-specific bugs are reduced through StoreKit 3 as it unifies behavior across iOS, iPadOS, macOS, watchOS, and tvOS. This helps in a consistent IAP experience for users.
If you’re also exploring how to render 2D or 3D content for your games or apps, it helps to understand thedifference between SpriteKit, SceneKit, and Metal to make an informed architectural decision alongside StoreKit 3.
How to Get Started With StoreKit 3?
Getting started with StoreKit 3 is fairly simple. Let’s understand what changed and what didn’t in StoreKit 3, frameworks in modern Swift, and how you can use Xcode StoreKit to test the environment effectively.
What changed in StoreKit 3?
Modern Swift Concurrency Support
TransactionListener
Entitlement Verification
Unified Across Platforms
Fetching products, handling purchases, and checking entitlements have become easier with modern Swift concurrency support. StoreKit 3 replaces SKProduct and SKPaymentTransaction with strongly typed Swift structs, improving readability and safety. Developers can easily listen to transactions in real time. Receipt validation happens via secure Apple servers, and the same API is seen across iOS, macOS, watchOS, and tvOS.
What did not change?
App Store Review Requirements
Revenue Share Model
Product Setup in App Store Connect
Apple’s IAP mechanisms for digital content have been the same. Moreover, Apple’s commission and rules on digital purchases remain the same. App Store Connect is still available; you can configure products or subscriptions from there, just as before.
Overview of StoreKit Framework in Modern Swift
StoreKit 3 is Swift-friendly and asynchronous. Here’s a simple flow:
import StoreKit
// Fetching available products
let products = try await Product.products(for: ["com.example.app.premium"])
guard let premiumProduct = products.first else { return }
// Purchasing a product
let result = try await premiumProduct.purchase()
switch result {
case .success(let verificationResult):
switch verificationResult {
case .verified(let transaction):
// Grant entitlement
await transaction.finish()
case .unverified(_, let error):
print("Unverified: \(error)")
}
case .userCancelled:
break
case .pending:
// Handle pending state
break
}
Not sure whether to go with Swift or Unity for your next app or game? Learn more about the pros and cons inSwift vs Unity for iOS game development to decide which suits your monetization model better.
How to Set Up Your Product Catalog & .storekit Configuration?
You can set up your product catalog and .storekit configuration through these steps:
Step 1: Define Products in App Store Connect
Go to App Store Connect → My Apps → Your App → In-App Purchases
Add products like consumables, non-consumables, subscriptions, etc.
Use clear Product IDs (e.g., com.appname.premium.yearly)
Step 2: Create .storekit Configuration
In Xcode:
File → New → File → StoreKit Configuration File
Define mock products for local testing.
Use this file in your scheme for testing StoreKit locally.
How to Implement In-App Purchases in StoreKit 3?
Here is a step-by-step guide to implement in-app purchases in StoreKit 3.
The very first step is to import the StoreKit framework. After that, you need to fetch products.
@MainActor
func loadProducts() async {
do {
let storeProducts = try await Product.products(for: ["com.example.app.premium"])
self.products = storeProducts
} catch {
print("Failed to load products: \(error)")
}
}
The next step includes the display of products in the UI. You can do this using SwiftUI or UIKit.
The next step involves purchasing the product and verifying its authenticity.
@MainActor
func purchase(product: Product) async {
do {
let result = try await product.purchase()
switch result {
case .success(let verification):
switch verification {
case .verified(let transaction):
// Grant access
print("Purchase verified: \(transaction.productID)")
await transaction.finish()
case .unverified(_, let error):
print("Purchase unverified: \(error)")
}
case .userCancelled:
print("User cancelled the purchase.")
case .pending:
print("Purchase is pending approval.")
}
} catch {
print("Purchase failed: \(error)")
}
}
In the next step, you need to ensure that users keep access even after relaunch or device change.
func startTransactionListener() {
Task.detached {
for await result in Transaction.updates {
if case .verified(let transaction) = result {
// Grant/refresh access
await transaction.finish()
}
}
}
}
Now you need to allow users to restore their purchases in the last step.
@MainActor
func restorePurchases() async {
do {
for await result in Transaction.currentEntitlements {
if case .verified(let transaction) = result {
print("Restored: \(transaction.productID)")
// Grant access again
}
}
} catch {
print("Restore failed: \(error)")
}
}
If you’re working on casual games and want a lightweight framework, here’s a guide on how tobuild a 2D iOS game without Unity while still taking advantage of StoreKit 3’s monetization features.
How to Build Paywalls That Don’t Annoy in 2025?
Paywalls should be persuasive and not pushy. If your paywall annoys users, it counts as bad UX. Here’s a simple guide to building a paywall that does not repel users. First things first, launching a paywall right when the app starts is a big red flag. Research shows that users rarely convert if you throw a paywall right at the beginning.
Users are far more likely to convert when:
They’ve just experienced value from your app
They’re trying to access a premium feature
They’ve completed an onboarding flow or task
Make sure to apply the above pointers when you are onboarding a user for the first time. There are strategies through which you can soft-launch your paywall. These include providing the paywall after the user completes a task, after certain sessions, or after the user taps on a locked feature.
Soft Walls vs. Hard Walls: Which One Should You Use?
There are mainly two types of paywall barriers, soft wall and hard wall. Let’s understand this through a table, and you will also understand which one you should use.
Type
Description
Ideal For
Soft Wall
Limits access but doesn’t block entirely
Habit-based apps, games, and learning tools
Hard Wall
Completely blocks access until payment is made
Premium utilities, pro features, B2B apps
Use soft walls when your app benefits from user trust and long-term retention, or when you offer freemium content or trial-based engagement. Use hard walls when your app offers professional-grade features or tools, or when users are already familiar with the product’s value before paying.
Whether you’re planning to implement soft or hard walls, a good foundation starts when youmake an iPhone game from scratch with scalable monetization options in mind.
How to Increase Revenue Without Breaking the UX?
One of the toughest tasks in developing games is balancing monetization with user experience. Data-backed strategies will help you boost revenue and retention. Let’s start by understanding how to implement introductory offers, free trials, and promos.
Configure intro offers and trials in App Store Connect under your product’s pricing.
StoreKit 3 automatically displays these offers via the Product.SubscriptionOffer API.
if let offer = product.subscription?.introductoryOffer {
print("Trial: \(offer.paymentMode), Duration: \(offer.duration)")
}
You can easily increase revenue by tweaking your paywalls, and it is not about pushing harder; it is about selling smarter. Let’s understand what works in detail.
Offer trials to lower commitment anxiety
Segment users with meaningful pricing
Test, measure, and optimize continuously
Use P-IAP to bring users into the funnel via marketing
Respect UX to keep users happy
The team at BR Softech is well-versed in building paywalls that not just attract but convert. If you want help building a smart paywall or setting up A/B tests using StoreKit 3 + RevenueCat, you can contact us, and we can help you boost your revenue through our tested methods.
How to Optimize Price and Subscription Strategy in 2025?
Launching a subscription model is easy; optimizing it according to your target audience is a bit tricky. Choosing pricing tiers, experimenting with durations, minimizing churn, and maintaining a smooth transaction experience are some of the healthy subscription optimization strategies.
Let’s understand how we can apply price and subscription strategies without hurting the user experience.
Choose the Right Price Tiers
Your app should have a tailored price tier specific to every country, and not just currency conversion.
Country
Suggested Price (USD Equivalent)
Strategy
US
$4.99/month
Standard pricing
India
₹149/month (~$1.79)
Lower tier
UK
£3.99/month
Mid-tier
Research regional spending habits, and in price-sensitive markets offer lower tier subscription for a high LTV. Here’s another intuitive table to describe how you can optimize the subscription duration.
Duration
Best For
Pros
Cons
Monthly
Price-sensitive users
Low barrier to entry
High churn potential
Annual
Committed users
Higher LTV, fewer renewals
Lower initial conversion
Lifetime
Power users, one-time value
Big upfront revenue
No recurring income
You must offer all the options; however, you should persuade users to choose the annual option through:
Visual pricing comparisons
‘Best Value’ tags
Limited-time annual discounts
Why is Monitoring Performance and Iteration Necessary?
We shall understand deeply why metrics matter in this part of the blog. Moreover, how you can track user activity using StoreKit 3 and Apple Server Notifications. We shall also discuss some of the third-party tools like Mixpanel, RevenueCat, and Adapty.
If you truly want to grow your business in the long term, monitoring performance is necessary, as it helps you optimize pricing and subscription strategies over time. Study the behavior of your audience and continuously improve both revenue and user experience.
Metric
Why It’s Important
Revenue (ARPU)
Tells you how much each user is worth
LTV (Lifetime Value)
Helps forecast and justify paid acquisition
Churn Rate
Indicates where and why users are leaving
Trial-to-Paid Rate
Measures the effectiveness of your free trial strategy
Paywall Conversion
Reveals how well your pricing and design are working
Now you know why metrics like ARPU, LTV, Churn Rate, Trial-to-Paid Rate, and Paywall Conversion are important. You can benchmark these metrics monthly and track changes after each product or pricing update.
How to Use StoreKit 3 Analytics and App Store Server Notifications?
Let’s understand how we can leverage StoreKit 3 and App Store Server Notifications.
StoreKit 3 Features:
Transaction Streams: Use Transaction.updates to listen for real-time purchase activity.
Entitlements: Check active subscriptions using Transaction.currentEntitlements.
Renewal Status: Detect downgrades, cancellations, and billing issues in-app.
App Store Server Notifications:
Trial start and conversion
Subscription renewal or failure
Refunds, pauses, and billing grace periods
What are the Third-Party Analytics That Help in Gaining Insights?
RevenueCat, Mixpanel, and Adapty are some of the third-party apps that can help you gain substantial insights.
RevenueCat
It is purposely built to seamlessly integrate with StoreKit 3. It tracks revenue, churn, and LTV automatically. It easily cohorts tracking and paywall A/B testing.
Mixpanel
A great tool for building user funnels and behavior flows. It also tracks action before and after the purchase. Ideal for product and growth teams.
Adapty
Adapty is a perfect tool for price testing and regional segmentation. It provides real-time dashboards for measuring subscription performance. It offers a no-code paywall for A/B testing.
Monitoring your app’s performance is not only crucial but mandatory if you want to sustain your growth. With the help of StoreKit 3, Apple server notifications, and analytics platforms like RevenueCat, Mixpanel, and Adapty, you can easily monitor performance and iteration.
What are the Common Mistakes in App Monetization?
StoreKit 3 is a great tool, but it cannot help you if you execute a poorly planned monetization strategy. There are some mistakes that a user does not appreciate and bounces away from your platform. Hence, make sure to pay extra attention to this part of the blog and do not repeat these common mistakes developers make while developing an app.
Overengineering Your Paywall
Do not pack your paywall with multiple animations, features, toggles, comparisons, and testimonials; this slows down conversion. Instead, you should focus on providing a clear message to your audience. Use a clear, strong CTA, highlight the benefits of the app, and not every other feature.
Treating UX as a Second Thought
If your paywall looks like an afterthought, if it interrupts the flow, or if it breaks the UI guidelines, your revenue will suffer. To fix this problem, you can:
Integrate your paywall contextually (after a key action or feature preview)
Maintain design consistency with the rest of your app
Use animations sparingly and intentionally
Always allow an exit or dismiss option
Neglecting Testing Environments
Launching new paywalls and pricing without testing them in a sandbox or StoreKit config mode is a big mistake. You can use StoreKit configuration files in Xcode to test products and flows. Do not forget to run thorough tests with sandbox users before App Store submission. Lastly, use platforms like RevenueCat or Adapty to A/B test offers without code updates.
Pushing Too Early
Do not impose a paywall on users the instant they log into the app. Doing so, you will lose the user’s interest. Wait until the user experiences value, or you can use soft walls to show premium features, but allow partial interaction.
Mistake
Fix
Overcomplicated paywalls
Keep it clear and conversion-focused
Bad UX
Match app design, show at the right time
No testing
Use sandbox, .storekit files, and test platforms
Generic pricing
Segment, localize, and offer options
Paywall too early
Delay until users see value
Conclusion
In 2025, it is not necessary that you have to compensate UX in order to achieve good numbers in revenue. You can do both, provide decent UX, and gain good profits. You just need to align them strategically. If you focus on timing, personalization, transparency, and iteration, you can attain users’ credibility, which will result in a more seamless revenue model.
Whether you’re using StoreKit 3, RevenueCat, or a custom implementation, you must remember that great monetization is invisible when it works and powerful when it’s needed.
The team at BR Softech offersprofessional iOS game development services that blend immersive gameplay and strategic monetization using tools like StoreKit 3 and RevenueCat.
Frequently Asked Questions (FAQs)
Q1. How do I use StoreKit 3 to implement in-app purchases in iOS?
To implement IAPs using StoreKit 3, follow these steps: – Define products in App Store Connect (subscriptions, consumables, non– consumables). – Use Product.products(for:) to fetch products via StoreKit. – Present them in your UI. – Call .purchase() on a Product instance to initiate a purchase. – Use Transaction.currentEntitlements and Transaction.updates to track access and listen for purchase events.
Q2. Is there a StoreKit 3 tutorial with working Swift code?
Yes, please find it below.
import StoreKit @MainActor class StoreManager: ObservableObject { @Published var products: [Product] = []
func purchase(_ product: Product) async { do { let result = try await product.purchase() // Handle transaction result here } catch { print(“Purchase failed: \(error)”) } } }
Q3. How can I optimize in-app purchases on iOS in 2025?
You can use StoreKit 3 and App Store Server Notifications for better purchase visibility. You can also offer localized pricing, introductory trials, and behavioral discounts. Test paywall copy, visuals, and price points using tools like RevenueCat or Adapty. Lastly, track LTV, churn, and conversion rates regularly and iterate monthly.
Q4. What does a high-converting paywall design look like on iOS?
A great paywall includes: – Visual preview of premium features – Clear CTA (“Start 7-Day Free Trial”) – Bullet list of value points – Pricing comparisons (Monthly vs Yearly) – Legal footer (Terms, Restore, Privacy) – Trust elements (ratings, testimonials, secure badge)
Nitin Garg is a seasoned tech entrepreneur and the visionary founder of BR Softech, a globally recognized leader in game development. With over 13 years of industry experience, he has been instrumental in transforming BR Softech into a powerhouse of innovation, offering cutting-edge solutions in Video Games, Blockchain Games, NFT Game Development, and card games like Poker, Rummy, and Teen Patti.
Nitin’s deep expertise in emerging technologies, combined with a sharp business acumen, has helped position BR Softech as a trusted name in the international gaming arena. Under his leadership, BR Softech has built a global clientele of 3,000+ satisfied customers and scaled a dedicated in-house team of 180+ skilled professionals.