The developer payment page is returning a 503 error, preventing me from making the payment. Why is this happening? I need to complete this payment urgently.
StoreKit
RSS for tagSupport in-app purchases and interactions with the App Store using StoreKit.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hello,
My app was rejected on iPad (iPad Air 11-inch M3, iPadOS 26.2.1) with two related issues:
Guideline 2.1 – Performance – App Completeness
“The app exhibited one or more bugs that would negatively impact users.
Bug description: the premium subscription cannot be loaded properly.”
Guideline 3.1.2 – Business – Payments – Subscriptions
“The submission did not include all the required information for apps offering auto-renewable subscriptions.”
I am using StoreKit 2 with SubscriptionStoreView to present the auto-renewable subscription.
During development:
Subscriptions load correctly in the simulator (sandbox).
On real devices, I test without a local StoreKit configuration file to fetch products from App Store Connect.
The subscription UI (title, duration, price) displays correctly when products are returned.
At the time of review, the Paid Apps Agreement was not active.
I suspect this may have caused the subscription products to fail loading on the review device.
Since then:
Paid Apps Agreement is now Active. SubscriptionStoreView should automatically show required metadata.
Because the subscription failed to load on iPad during review, the required information (title, price, duration) was not visible, which likely triggered the 3.1.2 rejection.
Additionally, in TestFlight I sometimes see inconsistent behavior where the app appears but cannot be installed (“App Not Available”).
Also, my app was rejected, but the subscription is still waiting for review.
I would really appreciate guidance on the following:
Am I potentially missing any required configuration that could prevent products from loading in production?
Is there any propagation delay after activating the Paid Apps Agreement that could affect product availability?
If I am overlooking something in configuration or testing, please let me know what I should specifically verify before resubmitting.
Thank you very much for your help.
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
Subscriptions
StoreKit
In-App Purchase
TestFlight
We are implementing promo/offer codes for our iOS app’s subscription in-app purchases and have several technical questions regarding validation, receipt data, and integration. Could you please provide guidance on the following points?
Testing/Validating Custom Codes Without Production Release: How can we validate custom promo/offer codes in a non-production environment? Current documentation indicates promo codes only work in production, requiring app submission and future release date setup for testing.
Receipt Data for Redeemed Codes: The receipt currently includes only offer_code_ref_name, not the exact redeemed code (e.g., “ABC123”) entered by the user. Is there a way to retrieve the specific offer code used via receipts, App Store Server API, or other endpoints?
Server-Side Validation Best Practices: What are the recommended best practices for server-side validation of offer codes, including using App Store Server API for transaction verification?
Passing appAccountToken for Coupons: How can we pass an appAccountToken when users redeem coupon/offer codes (e.g., via presentOfferCodeRedeemSheet or redemption flows)? StoreKit purchase options support it for regular purchases but not redemption sheets.
Callbacks on Coupon Redemption: Is there a client-side callback or notification (e.g., via updatedTransactions or StoreKit observers) when a user successfully redeems a coupon code in the app? Server notifications are received, but app-side feedback appears unreliable.
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
Subscriptions
StoreKit
In-App Purchase
App Store Receipts
I am testing a consumable in-app purchase in the StoreKit sandbox and I am seeing behavior that does not seem correct on repeat purchase attempts.
Product details
Product ID: album.credit.v2
Type: Consumable
Test environment: iOS device + StoreKit sandbox
Purchase flow triggered from my Flutter app using Apple IAP
What happens
First purchase attempt works
My backend receives the confirmation
The album is granted correctly
On the second purchase attempt of the same consumable, I do not get a normal new purchase flow
Instead, StoreKit returns the product as restored
My app then cancels the attempt because a restored transaction arrived during checkout
Expected behavior
Because this product is a consumable, each purchase attempt should behave like a new purchase and allow the user to buy it again.
Actual behavior
On the second attempt, the transaction update comes back as restored instead of a new successful consumable purchase.
Relevant logs
First successful purchase:
[ProPurchasePage] ✅ Pay tapped. starting=false iap=true albumProd=album.credit.v2 proProd=pro.monthly
[IAP] update: id=album.credit.v2 status=PurchaseStatus.restored pendingComplete=false err=null
[IAP] expected=album.credit.v2 starting=true appleFlow=true
[ProPurchasePage] album credit success status=PurchaseStatus.restored receiptLen=5334
[AppleIapService] Sending Apple IAP confirmation for albumId=ariie_west_pretty_girl_summer, buyerUid=PYjgu9TMCieCVDLIdTuawY5k4Ay2
[AppleIapService] appleIapConfirm response status: 200
[AppleIapService] appleIapConfirm applied for albumId=ariie_west_pretty_girl_summer buyerUid=PYjgu9TMCieCVDLIdTuawY5k4Ay2
After that, the purchase is written correctly on my side:
"libraryAlbums": [
{
"AlbumId": "ariie_west_pretty_girl_summer",
"paid": true,
"Quantity": 1
}
]
Second and later attempts:
[ProPurchasePage] ✅ Pay tapped. starting=false iap=true albumProd=album.credit.v2 proProd=pro.monthly
[ProPurchasePage] buyConsumable (album.credit.v2) returned: true
[IAP] update: id=album.credit.v2 status=PurchaseStatus.restored pendingComplete=false err=null
[IAP] expected=album.credit.v2 starting=true appleFlow=true
[IAP] restored arrived during album checkout — cancelling attempt
Question
Is this expected StoreKit sandbox behavior for a consumable, or does this suggest:
a StoreKit sandbox issue,
a problem with how the product is configured in App Store Connect,
or a transaction-handling issue in the app/plugin layer?
Also, is there any Apple-recommended handling for repeated consumable purchases when sandbox keeps surfacing a restored status?
Topic:
App & System Services
SubTopic:
StoreKit
Our game application is developed based on StoreKit 1, and an exception occurs on iOS 26.4: after players complete a payment, the finishTransaction method fails to properly remove the transaction from the SKPaymentQueue; as a result, when players restart the app, the system still triggers the retry process for this transaction (reconciliation of unpaid orders).
Has anyone encountered this issue? If there is a solution, we would appreciate it if you could share it with us.
Topic:
App & System Services
SubTopic:
StoreKit
Hello,
I have a question regarding how prorated refunds are reflected when a user upgrades a subscription.
From my understanding, when a user upgrades to a higher-tier subscription, the remaining value of the current subscription is refunded as a prorated amount, typically represented as REFUND_PRORATED or PRORATED_CREDIT.
However, when reviewing the available transaction history and refund-related data (including the App Store Server API and transaction history endpoints), I cannot find any field or record that clearly indicates:
the actual prorated refund amount, or
the credit applied when upgrading to another subscription
In other words, while the concept of REFUND_PRORATED seems to exist conceptually, I cannot identify where the actual prorated value or credit applied to the upgrade is exposed in the transaction or refund history.
My questions are:
Is there any way to retrieve the actual prorated refund or credit amount when a user upgrades a subscription?
Is this information available through the App Store Server API (e.g., Get Transaction History) or any other API endpoint?
If not, is there any recommended method to determine how much of the previous subscription was credited toward the upgraded subscription?
Any clarification would be greatly appreciated.
Thank you for your help.
Topic:
App & System Services
SubTopic:
StoreKit
In Getting started with In-App Purchase using StoreKit views and the corresponding sample project, Store simultaneously enumerates Transaction.unfinished and Transaction.updates.
Since, "if your app has unfinished transactions, the updates listener receives them once, immediately after the app launches," it appears that Transaction.unfinished would also receive the same unfinished transactions causing handle(updatedTransaction:) to be called for twice for each transaction, causing consumables to be double-counted.
Is this a bug in the sample? Is there more information on concurrent execution of unfinished and updates?
I have an iOS and iPadOS app that also runs on macOS Catalyst. The user is able to view their subscription using the SubscriptionStoreView with two SubscriptionOptionGroups.
The documentation does not mention these are supported on macOS Catalyst and the app crashes when attempting to show the SubscriptionStoreView on macOS Catalyst.
If not supported, how can the user manage their subscription on macOS?
Hello DTS team, the request review from StoreKit is not working in iOS 26.4 beta 3. I have filed a feedback (FB22157147).
Sample code:
import SwiftUI
import StoreKit
struct ContentView: View {
@Environment(\.requestReview) private var requestReview
@State private var count = 0
var body: some View {
VStack {
Button("Increase Count") {
count += 1
}
Text(count, format: .number)
.font(.largeTitle)
}
.onChange(of: count) {
if count == 3 {
Task {
try await Task.sleep(for: .seconds(2))
requestReview()
print("Request Review triggered!")
// On iPadOS 26.4 beta 2 & 3, requestReview() does not trigger any review system sheet when testing in Xcode 26.3
// Works on iOS 26.3.1
}
}
}
}
}
Hello,
I am currently testing In-App Purchases for my app in the Sandbox environment.
Our app has two types of products:
Auto-renewable subscriptions
Non-renewing subscriptions
When testing auto-renewable subscriptions, I can see the subscription in the Sandbox account management screen, and I can perform actions such as:
Viewing the active subscription
Cancelling the subscription
Upgrading or downgrading the subscription
However, when testing non-renewing subscriptions, I cannot find the purchase history anywhere in the Sandbox account management screen.
Because of this, I cannot verify whether the non-renewing subscription purchase was recorded correctly.
My question is:
Where can I check the purchase history for Non-Renewing Subscriptions in the Sandbox environment?
Is there a specific place in:
App Store Connect
Sandbox account settings
Or somewhere else
where these purchases can be reviewed?
Thank you in advance for your help.
Topic:
App & System Services
SubTopic:
StoreKit
Hello Apple Developer Support,
We are seeing a payment issue affecting users on iOS 26.3 and 26.4.
Many users report that after a successful purchase flow, the purchased content is not delivered in-game.
After investigation, we found that storeController?.ConfirmPurchase(pendingOrder); does not always effectively complete the transaction. As a result, the same receipt is sent to the client again on the next purchase attempt or after app restart. This causes repeated pending transactions and prevents users from purchasing the item again.
Some affected users requested refunds from Apple, but those requests were rejected.
Among 19 reported users:
11 users are on iOS 26.4 (recently upgraded)
The remaining users are on iOS 26.3
We also received similar reports on earlier iOS 26 versions.
Development environment:
Unity
Unity In-App Purchasing (IAP) 4.13.0
Could you please help confirm whether there are known StoreKit / transaction completion issues on iOS 26.3+ and suggest the recommended handling for this case?
Thank you.
Topic:
App & System Services
SubTopic:
StoreKit
在iOS 26.4 beta3版本中,当前支付完成,获取的票据是上次支付的票据,在拉起一笔支付成,获取的又是上次支付的票据
Topic:
App & System Services
SubTopic:
StoreKit
<Apple Developer Program许可协议>已更新并需要查阅。若要更新现有App和提交新 App,账户持有人必须登录账户,查看并接受更新后的协议。
app开发者会费 续费以后 app内购获取不到商品了,经排查可能是这个协议需要重新签署,签署以后多久可以重新在沙盒测试中获取到商品信息。
Hi,
I am submitting auto-renewable subscriptions for the first time for a brand new iOS app (never approved before).
Setup:
App ID has In-App Purchase capability enabled
Subscriptions created under a subscription group
All metadata (pricing, localization, availability) completed
Subscriptions currently show In Review
Testing via TestFlight build
Bundle ID matches App Store Connect
Using react-native-iap (StoreKit under the hood)
When calling:
await getSubscriptions({ skus })
I consistently get:
products fetched: 0
ProductsUnavailableError
Also, the app version page does not show the “In-App Purchases and Subscriptions” section.
Question:
For a brand new app, will StoreKit return empty products while the first subscriptions are in review?
Do the first subscriptions need to be approved and/or attached to a new app version before they become available in TestFlight sandbox?
Thanks for any clarification.
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
Subscriptions
StoreKit
In-App Purchase
TestFlight
Background:
My app uses a third-party SDK for payments, and it uses Original StoreKit internally for IAP payments. Now I'm getting ready to migrate to StoreKit2, and during the transition, users may use either method to initiate payments, and there's no way to avoid the coexistence of StoreKit2 and Original StoreKit.
Problem:
When a user has an unfinished transaction, if the app is restarted, both StoreKit2 and Original StoreKit will receive a notification of the transaction:
Original StoreKit's '-paymentQueue:updatedTransactions:' method
StoreKit2's 'Transaction.updated' method
resulting in duplicate calls to the shipping API.
My current treatment is to only add '-paymentQueue:updatedTransactions:' to listen for unfinished transactions. Even if the user is using StoreKit2 to initiate the payment, if the transaction is not Finished, it will be fetched via this method after restarting the app to process this transaction.
Is this approach feasible and are there any best practices for this scenario?
To summarize:
Is it feasible to fetch unfinished StoreKit2 transactions via Original StoreKit methods when StoreKit2 coexists with Original StoreKit? Is there a recommended way
I’d like to confirm the expected behavior of StoreKit 2 in the Sandbox environment regarding unfinished consumable transactions across devices.
Scenario:
Device A and Device B are signed in with the same Sandbox Apple ID
A consumable in-app purchase is completed on Device A
The transaction may be verified or unverified, but transaction.finish() is not called
The app is then launched on Device B and listens for Transaction.updates
Question:
In this scenario, is it expected that Device B will or will not receive a callback for this unfinished consumable transaction?
Or is it by design that unfinished consumable transactions are not guaranteed to be delivered across devices, regardless of verification state?
Topic:
App & System Services
SubTopic:
StoreKit
'Guideline 2.1 - Performance - App Completeness' - "...could not be found in the submitted binary."
I have checked with internal and external testers and my devices and simulators, everyone sees the in app purchases but I just had my submitted rejected for the second time with the comment that these in-app none-consumable purchases cannot be found with the submitted binary.
I even attached a slow step by step screen recording for the review reply after the first rejection showing how to reach the purchasable packs by navigating through only 3 buttons:
"How to access the purchase flow:
Launch the app
Tap the bottom-center Settings button (icon: switch.2)
Tap “Customisation gallery”
Scroll to find any pack listed above
Tap the pack price chip
Tap “Buy pack – [price]” to start the StoreKit purchase flow"
I also attached a clear image along with detailed instruction (same as above) for the Review Information. and the second rejection was received today for the same reason.
I'm being guided to the localization 'Developer Action Needed'. I'm not sure what more can be done? I feel like my review replies aren't even looked at.
Hello Apple team,
We would like to access the user's available purchases from the keyboard extension.
Making purchases directly from the keyboard is a great benefit, but we assume it is intentionally disabled to prevent abuse or fraudulent purchase attempts.
What we care about the most is determining if the user has an item that contains a discount or a free trial to personalize messaging when we suggest the user go to the app and make a purchase.
We hope you'd consider revising your policy around StoreKit usage.
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
Subscriptions
Extensions
StoreKit
In-App Purchase
We began storing our users' appTransactionID as a quick lookup identifier for purchase history as it is back-dated and consistent between installs and can be signed by Apple.
We've read through both the Storekit documentation and the app transfer documentation, but wanted to verify that a users appTransactionID remains consistent after an app has been transferred from one Apple developer account to another (assuming they have the proper shared secret info)? Basically, would the new developer team be seeing the same appTransactionID our current team sees for an existing user post-transfer?
Topic:
App & System Services
SubTopic:
StoreKit
Greetings fellow devs,
After accepting the Alternative Terms Addendum for Apps in the EU and adding the Storekit External Purchases or Offers capability via App Store Connect in our app identifier, the entitlement showing up in xcode is com.apple.developer.storekit.custom-purchase-link.allowed-regions and has the value 'jp'.
How can we change the value for that entitlement to 'gr'?
We tried changing it in xcode, but we get the error <Provisioning profile "iOS Team Provisioning Profile: [app identifier]" doesn't match the entitlements file's value for the com.apple.developer.storekit.custom-purchase-link.allowed-regions entitlement.>.
In Certificates, Identifiers and Profiles in the developer account there is no way to configure that capability. We sent a request to support and they only gave a link to documentation and to the forum here.
We have a completed every business agreement requested and we have chosen Greece as the organisation region and the app's availability region wherever possible. We haven't found anywhere that Japan would be chosen to explain the entitlement given.
So where can this entitlement about allowed regions be configured?
Xcode version is 16.4 and iOS minimum deployments is 18