Hello,
Since updating to iOS 26 Beta 3, I’ve been experiencing an issue where transactions purchased through the normal in-app purchase flow continue to be reported as updated and unfinished—even after calling the finish() function. Please resolve this promptly.
In-App Purchase
RSS for tagOffer extra content, digital goods, and features directly within your app using in-app purchases.
Posts under In-App Purchase tag
200 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
We are seeking clarification on the behavior of App Store Server Notifications V2.
Summary
In our production environment, we received a notification with notificationType: DID_FAIL_TO_RENEW and subtype: GRACE_PERIOD. However, the gracePeriodExpiresDate field in the payload was null.
We understand this notification indicates that a user's subscription has entered a grace period. The null value for its expiration date is unexpected, and we are looking for an official explanation of this behavior and the correct way to handle it.
The Scenario
Here are the details of the notification we received:
Notification Type: DID_FAIL_TO_RENEW
Notification Subtype: GRACE_PERIOD
Environment: Production
Upon decoding the signedRenewalInfo JWS from the responseBodyV2, we found that the gracePeriodExpiresDate field inside the JWSRenewalInfoDecodedPayload was null.
The notificationUUID for this event was in the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
Our Implementation and its Impact
Our backend is designed to ensure service continuity during a grace period, as recommended in the documentation.
Current Logic:
Receive the DID_FAIL_TO_RENEW / GRACE_PERIOD notification.
Extract the gracePeriodExpiresDate.
Extend the user's subscription expiration date in our database to match this date.
Because the gracePeriodExpiresDate was null in this case, our logic failed, creating a risk of service interruption for the user.
Context and Investigation
We have performed the following checks:
App Store Connect Settings: We have confirmed that Billing Grace Period is enabled for the relevant subscription group.
Sandbox Environment: We have been unable to reproduce this scenario in the Sandbox.
User Context: We believe the user in this case was experiencing a failed payment when attempting to renew for the first time after a free trial period.
Questions
To ensure we handle this scenario correctly, we would appreciate clarification on the following points:
Conditions for Null: Under what specific conditions does a DID_FAIL_TO_RENEW notification with a GRACE_PERIOD subtype contain a null gracePeriodExpiresDate?
Expected Behavior: Is this null value an expected behavior for certain scenarios, such as the first failed renewal after a free trial?
Best Practice: If this is an expected behavior, what is the correct way to handle it? How should our backend interpret a null gracePeriodExpiresDate to ensure service continuity for the user?
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
Subscriptions
In-App Purchase
App Store Server Notifications
Hi everyone,
I’ve been struggling for days with a recurring issue in my iOS app build. The build fails with the following error:
Provisioning profile "iOS Team Provisioning Profile: com.myapp.bundleid" doesn't include the com.apple.InAppPurchase entitlement.
Here’s what I’ve already tried:
Created a new Bundle ID with correct capabilities (In-App Purchase, Push Notifications, Sign in with Apple).
Created a new provisioning profile manually from Apple Developer Console.
Used EAS CLI (Expo) and Xcode to regenerate all certificates and provisioning profiles.
Ensured that the In-App Purchase capability is enabled in the App ID (it's greyed out but enabled).
Made sure all subscriptions and products in App Store Connect are “Ready to Submit”.
Followed all steps from RevenueCat and Apple documentation.
Cleaned entitlements in .entitlements file and tried both and variations.
Tried building both locally and with EAS – same error every time.
Sent multiple tickets to Apple Developer Support, but no helpful reply yet.
Extra Notes:
I'm using react-native-purchases and RevenueCat, already integrated and working before this started.
The error began randomly; before that, I was able to build successfully with in-app purchases.
Even creating a completely fresh app from scratch results in the same entitlement missing error.
Has anyone faced this exact problem where the provisioning profile fails to include com.apple.InAppPurchase, even though everything is correctly set up?
Any help or insights would be greatly appreciated.
Thanks in advance!
Hey everyone,
I'm dealing with a really frustrating issue with auto-renewable subscriptions in my app and hoping someone can help or at least tell me what's going on.
Here's what happened:
When I first submitted my app I had already set up the monthly and yearly subscriptions in App Store Connect
After a few rejections the app finally got approved, but when it went live I noticed the subscriptions were completely gone. Users could only see the lifetime purchase.
I never removed anything or changed any major configurations, so I have no idea why they just disappeared
I tried removing the app from sale and then also temporarily removed the subscriptions. After re-enabling them they now show as "Approved" when I look at them individually
But in the Subscription Group it still says "Updates Pending Review" and I can't do anything - can't edit anything, can't resubmit
I thought about submitting a new build hoping I could reselect the subscriptions, but they still don't show up as selectable in the in-app purchase section
At this point I'm completely stuck. I've put a warning message in the app to let users know, but this is seriously hurting my business since subscriptions are basically my main revenue.
Has anyone else run into this? Is there any official way to fix or reset a subscription group that's stuck like this?
Thanks for any help!
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Tags:
Subscriptions
App Store Connect
In-App Purchase
I'm trying to create a price change for one of my in app purchases, but every time I try to save it the website keeps saying an error has occurred. If I check my browser's console I see the below error output:
{
"errors": [{
"status": "500",
"code": "UNEXPECTED_ERROR",
"title": "An unexpected error occurred.",
"detail": "An unexpected error occurred on the server side. If this issue continues, contact us at https://developer.apple.com/contact/."
}]
}
Please fix this ASAP.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Tags:
App Store Connect
In-App Purchase
A purchase can result in success with verificationResult .unverified. Is there a list of reasons for which the transaction might be unverified and how should i handle it in my app? From my understanding, a successful unverified transaction means the user has already paid for the purchase. So, do i just ignore the unverified transaction or do i provide content to the user anyways?
Some paid users are unable to use the paid features unlocked by purchasing our subscription plan. It seems that this is due to StoreKit 2's Transaction.currentEntitlements not working the way we would expect it to work.
Are you also encountering this issue? Do you have any idea to improve this situation?
At launch, our app checks if the user is subscribed to the plan, using Transaction.currentEntitlements. As a result, the currentEntitlements array was empty.
Our app then fetches the products from StoreKit 2 using Product.products(for:). As a result, the Product.SubscriptionInfo.RenewalState value of the corresponding Product (product.subscription.status.first.state) is subscribed, which confirms that the user has indeed purchased our plan, but seems to contradict the absence of the corresponding transaction in Transaction.currentEntitlements.
Proactive in-app purchase restore and a restore purchase button calling the AppStore.sync() method are implemented, but using the button did not solve the issue.
On an app that was using the old API for In-App Purchases (StoreKit 1). The app is already published on the App Store. The purchase is non-consumable.
While trying to migrate to StoreKit 2, I'm unable to restore purchases.
Specifically displaying and purchasing products works as expected, but when deleting and reinstalling the app, and then trying to restore purchases I can't do it.
I'm trying to restore them using the new APIs but it doesn't seem to be working.
What I have tried so far:
I'm listening for transaction updates during the whole lifetime of the app, with:
Task.detached {
for await result in Transaction.updates {
if case let .verified(safe) = result {
}
}
}
I have a button that calls this method, but other than prompting to log in again with the Apple ID it doesn't seem to have any effect at all:
try? await AppStore.sync()
This doesn't return any item
for await result in Transaction.currentEntitlements {
if case let .verified(transaction) = result {
}
}
This doesn't return any item
for await result in Transaction.all {
if case let .verified(transaction) = result {
}
}
As mentioned before I'm trying this after purchasing the item and deleting the app. So I'm sure it should be able to restore the purchase.
Am trying this both with a Configuration.storekit file on the simulator, and without it on a real device, in the Sandbox Environment.
Has anyone being able to restore purchases using StoreKit 2?
PD: I already filed a feedback report on Feedback Assistant, but so far the only thing that they have replied is:
Because StoreKit Testing in Xcode is a local environment, and the data is tied to the app, when you delete the app you're also deleting all the transaction data for that app in the Xcode environment. The code snippets provided are correct usage of the API.
So yes, using a Configuration.storekit file won't work on restoring purchases, but if I can't restore them on the Sandbox Environment I'm afraid that this won't work once released, leaving my users totally unable to restore what they have already purchased.
Hi,
I'd like to have a button in my app that links to a website where users can donate to the project. I've tried "Donate to the Project" and "Support the Developer," but both of them were rejected because of:
Guideline 3.1.1 - Business - Payments - In-App Purchase:
"We notice that your app allows users to contribute donations to the development of your app with a mechanism other than in-app purchase. Although these donations may be optional, they must use in-app purchase since they are associated with receiving digital content or services."
Is there a specific label I could use that complies with
"3.2.1 (vii) Apps may enable individual users to give a monetary gift to another individual without using in-app purchase, provided that (a) the gift is a completely optional choice by the giver, and (b) 100% of the funds go to the receiver of the gift. However, a gift that is connected to or associated at any point in time with receiving digital content or services must use in-app purchase." But is still understandable as a donations website? I thought that was implied with the two labels I submitted, but I guess not.
Thanks,
Henry
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
Tags:
App Review
In-App Purchase
Marketing
I’m testing an auto-renewable subscription on TestFlight. Now the user can't re-purchase the same product – Apple just restores the old (expired) one, and no payment sheet appears.
How can I let the same TestFlight user re-subscribe to an expired product?
Do I have to create a new productId for every test cycle?
I Implement a 'SubscriptionStoreView' using 'groupID' into a project (iOS is targeting 17.2 and macOS is targeting 14.1).Build/run the application locally (both production and development environments will work fine), however once the application is live on the AppStore in AppStoreConnect, SubscriptionStoreView no longer shows products and only shows 'Subscription Unavailable' and 'The subscription is unavailable in the current storefront.' - this message is shown live in production for both iOS and macOS targets. There is no log messages shown in the Console that indicate anything going wrong with StoreKit 2, but I haven't made any changes to my code and noticed this first start appearing about 5 days ago.
I expect the subscription store to be visible to all users and for my products to display. My application is live on both the iOS and macOS AppStores, it passed App Review and I have users who have previously been able to subscribe and use my application, I have not pushed any new changes, so something has changed in StoreKit2 which is causing unexpected behaviour and for this error message to display. As 'SubscriptionStoreView' is a view provided by Apple, I'm really not sure on the pathway forward other than going back to StoreKit1 which I really don't want to do.
Is there any further error information that can be provided on what might be causing this and how I can fix it? (I have created a feedback ticket FB13658521)
Hi everyone,
I'm encountering a persistent issue with App Store Connect and hoping someone has seen this before or can advise.
I have an approved in-app purchase (product ID: inspo_credits_10), and everything is correctly configured:
The IAP is Approved and Ready for Sale
The capability is enabled in both the Apple Developer portal and Xcode
My app uses StoreKit correctly (Product.products(for:))
I’ve uploaded multiple builds (latest: version 1.3.8, build 3)
The problem:
When preparing the version (1.3.8) in App Store Connect, the “In-App Purchases” section does not appear at all — so I can’t attach the IAP to the version or submit it for review.
I've tried:
Re-uploading builds
Creating new versions (1.3.9, 1.4.0…)
Re-enabling the IAP capability
Confirming that StoreKit is properly integrated
Waiting multiple days for propagation
Even creating new IAPs
Still, the IAP section doesn’t appear when editing the version.
Apple support responded, but directed me to Developer Technical Support without offering a fix or escalation path.
Has anyone experienced this before — an approved IAP that doesn't show up in App Store Connect’s version editor?
Is there a way to force a refresh or escalate this internally?
Would appreciate any advice or direction!
Topic:
App Store Distribution & Marketing
SubTopic:
General
Tags:
StoreKit
App Store Connect
In-App Purchase
Hi,
We're currently experiencing an issue with consumable In-App Purchases on our production iOS app. Until the end of May, everything was working as expected, but starting in early June, our app no longer receives any products when calling queryProductDetails() using Flutter’s in_app_purchase plugin (which utilizes StoreKit).
Here’s what we’ve confirmed so far:
The product IDs are correctly configured in App Store Connect, and all items are marked as “Approved.”
No recent changes have been made to the bundle ID or the product IDs.
The “Base Territory” setting was updated for each IAP item in early May. After that change, product retrieval and purchases were working normally through the end of May.
This issue is happening on real devices in production, and multiple users are affected.
The same functionality continues to work correctly on Android.
All requested product IDs are being returned in the notFoundIDs list of the queryProductDetails() response.
We're quite puzzled by this issue as no clear cause has been identified so far.
Any thoughts on this issue would be much appreciated.
Thank you!
I am just developing an app,I just config the In App Purchase module in App Store Connect.And I have deployed the related code in flutter, and the Xcode have done the configuration about this. The fetching products is successful, and buyNonconsumable/buyConsumble api could be called successfully ,but whatever install methods I have tried, could not receive the receipt after call the buyNonconsumable/buyConsumbl api.So could you help to solve this problem,I just have stucked for a few weeks , please help. Btw ,my friends have told me that if I want to integrated the In App Purchase function,I need to upload a version to apple store and make it pass the review process.Please help me to confirm these question ,very thankful.
Topic:
App Store Distribution & Marketing
SubTopic:
General
Tags:
In-App Purchase
App Store Receipts
Hi everyone,
We're working on a fitness and wellness app that offers subscription-based content like workout videos, nutrition plans, and personal coaching.
We've read the updated documentation on the External Link Account Entitlement (ELAE), which allows certain apps to include a link to an external website for account management and payments.
However, based on what Apple describes as eligible “reader apps” (video streaming, books, audio, etc.), it's unclear whether fitness apps can apply for and use this entitlement.
Our questions:
Can a fitness app use the External Link Account Entitlement to link out to a web-based subscription page?
If not currently supported, is there any plan to expand this to other categories like health & fitness?
We are fully compliant with App Store IAP rules today, but we're exploring all legitimate options as we aim to provide a smooth and transparent experience across platforms (iOS, Android, and web).
Any insights from the community or Apple team would be appreciated!
Thanks,
Onur Hazar
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
Tags:
Subscriptions
In-App Purchase
Apple Pay
Question on token testing in development:
Hello,
I'm developing a React Native application using StoreKit External Purchase. I'm having difficulties testing the transaction token retrieval in the development environment.
Specific questions:
Is it possible to test the transaction token retrieval in development/sandbox environment?
Is there a special testing mode for developers that would allow simulating token reception without going through the App Store?
Are there specific debugging tools to verify proper token reception?
Question on native implementation:
Regarding the native implementation of StoreKit External Purchase:
Is there detailed documentation on creating native modules for React Native that implement StoreKit External Purchase?
Can you confirm if the following approach is correct for native implementation:
Using NSClassFromString(@"ExternalPurchase")
Calling presentNoticeSheetWithURL:completion:
Retrieving the token in the completion block
Are there any code examples for complete native implementation?
Question on implementation validation:
For validating StoreKit External Purchase implementation:
How can we verify that our implementation is correct before App Store submission?
Are there validation tools or automated tests to check compliance?
What are common errors to avoid during implementation?
Question on best practices:
Regarding implementation best practices:
What's the best way to handle potential errors during token retrieval?
How to handle cases where the user cancels the transaction?
What are the recommended security checks for server-side token validation?
Question on documentation:
I'm looking for additional resources on StoreKit External Purchase:
Is there specific documentation for integration with frameworks like React Native?
Are there complete code examples for native implementation?
Where can I find information about testing and debugging best practices?
Additional technical question:
Technical implementation details:
What's the correct way to handle the ExternalPurchase class initialization in React Native native modules?
Are there specific requirements for the URL passed to presentNoticeSheetWithURL?
How should we handle the token in the completion block to ensure it's properly passed back to React Native?
Question on testing workflow:
Testing workflow questions:
What's the recommended testing workflow for External Purchase implementation?
How can we verify the token format and validity before production deployment?
Are there any tools or methods to simulate the complete purchase flow in development?
Hello developers,
We're facing a critical issue with our app and need your insights:
Since today, 3 specific IAP products return empty data when calling Product.products(for: [productId]).
This affects all users, preventing any successful purchases of these items.
Other IAP products seem unaffected.
let products = try await Product.products(for: [productId])
Key details:
Production environment
Issue started: 2025.6.17
No recent app updates
All products show as "Approved" in App Store Connect
Questions:
Has anyone experienced similar issues recently?
Could this be a StoreKit or App Store system problem?
Any suggestions for diagnosing or resolving this, besides contacting Apple Support?
Recommendations for temporary workarounds?
This is severely impacting our business. Any help is greatly appreciated!
Thank you!
Issue Description
The submission did not include all the required information for apps offering auto-renewable subscriptions.
The app's metadata is missing the following required information:
A functional link to the Terms of Use (EULA). If you are using the standard Apple Terms of Use (EULA), include a link to the Terms of Use in the App Description. If you are using a custom EULA, add it in App Store Connect.
Next Steps
Update the metadata to include the information specified above.
Resources
Apps offering auto-renewable subscriptions must include all of the following required information in the binary:
Title of auto-renewing subscription (this may be the same as the in-app purchase product name)
Length of subscription
Price of subscription, and price per unit if appropriate
Functional links to the privacy policy and Terms of Use (EULA)
The app metadata must also include functional links to the privacy policy in the Privacy Policy field in App Store Connect and the Terms of Use (EULA) in the App Description or EULA field in App Store Connect.
Please let me know where I have to add this link (EULA). And by EULA, they mean a simple terms of use link, or is it something else?
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
Tags:
Subscriptions
StoreKit Test
StoreKit
In-App Purchase
I have consumable IAPs in my app. Currently there is no way for me to test refunds for them as Xcode testing doesn't allow refunds option for my Purchases. According to this official documentation on Transaction.all , i should be getting my refunded consumables in Transaction's all property.
But there is no way for me to know what kind of data is in the refunded transaction object. Will there be a 'revocation date' like in the case of non-consumables?
Hi,
I'm integrating in-app subscriptions using StoreKit 2 in my iOS app, and I've run into an issue where I'm unable to fetch any subscription products via:
let products = try await Product.products(for: productIDs)
This consistently returns an empty result (products.count == 0) when running on a real device using a sandbox account.
Here's some relevant context of my current setup:
This is the first version of the app adding in-app purchase subscriptions.
In-App Purchase products are configured in App Store Connect, and marked as "Ready to Submit". The products are attached to the app version, and fully saved.
A sandbox account is logged in on the test device.
StoreKit Configuration local debug works fine — I can simulate purchases locally from Xcode.
However, in the real sandbox environment, any attempt to fetch products returns no results.
In App Store Connect > Agreements, Tax, and Banking, I currently see:
Paid Application Agreement: Status = "Waiting for User Info"
Banking Info: “In Progress”
Tax Info: Not yet submitted
❓❓❓ My key question is:
Does the "Paid Applications Agreement" need to be fully active (including bank + tax info complete) before in-app purchase products can be fetched in the sandbox environment?
If so, it seems that this may be blocking my ability to:
Test real subscription flows with sandbox accounts
Pass App Store Review (since products cannot be loaded)
Any clarification would be greatly appreciated!
Thanks in advance.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Tags:
StoreKit Test
App Store Connect
In-App Purchase