In-App Purchase

RSS for tag

Offer extra content, digital goods, and features directly within your app using in-app purchases.

Posts under In-App Purchase tag

200 Posts

Post

Replies

Boosts

Views

Activity

Can someone help me with finding out why the reviewer believes that doesn't comply with the requirements?
Hi, I previously posted about this but didn't provide specifics so decide to try this again: https://developer.apple.com/forums/thread/824212 The app is called Kino Controller, it is a client for the Kino app that runs on Smart TVs and allows users to upload videos to their TVs both to store(on the TVs internal storage and the USB storage they may attach to their TVs) and watch those videos(it has decent video player). In short, it turns their TVs into media servers. I personally use it to store videos that I film but I don't want to keep on my phone because of the disk usage. This is the app in question and you can give it a try with its macOS client that I published directly: https://appwared.com/apps/kino Now, I want to get the macOS and the iOS clients into the App Store and because I don't want to collect/sell user data and display advertisement I want to offer in-app Purchases that removes the free usage limit that is 10 videos stored in the TV at a time. I already offer this from the TV app and I want to offer the same option through the macOS and iOS apps, with having this on the client app that controls the TV app it's just better UX and I'm happy to bring business to Apple as well. However after multiple rejections from and fulfillments of the reviewers I have come to a point where I don't know how to proceed because the reviewers are rejecting the app about a features that We have already implemented. There are two things in particular, both under "Guideline 5.1.1(v) - Legal - Data Collection and Storage". We noticed that the app requires users to register with personal information to purchase and track In-App Purchase products that are not account based. Apps cannot require user registration prior to allowing access to app content and features that are not associated specifically to the user. User registration that requires the sharing of personal information must be optional or tied to account-specific functionality. The app supports account creation but does not include an option to initiate account deletion. Apps that support account creation must also offer account deletion to give users more control of the data they've shared while using an app.Follow these requirements when updating an app to support account deletion: Only offering to temporarily deactivate or disable an account is insufficient. If users need to visit a website to finish deleting their account, include a link directly to the website page where they can complete the process. Apps may include confirmation steps to prevent users from accidentally deleting their account. However, only apps in highly-regulated industries may require users to use customer service resources, such as making a phone call or sending an email, to complete account deletion. Now, we introduced the registration feature after the reviewers demanded having this in the 2. or 3. rejection or something like that. Initially we went with the "default" scope of the profile but on the latest build we change that to absolute minimum data collection, so in the server we don't receive any personal data about the user. Just some alphanumeric ids so we can associate the stored purchases with a signed in user. Also, using the sign-in with Apple is %100 optional, no feature or iAP require the user be signed in, it is solely to store unlocked TV devices so we can re-unlock those if the user resets the TV etc. I replied to the message clarifying this and also put it in the reviewer notes but for some reason the reviewer keeps believing that it's otherwise Then the reviewer keeps believing that we do not have account deletion feature. This is also factually false, the delete account button is right next to sign out button and both of those are one the same View where the sign in with Apple button is. Also, the app has exactly two screens: One to list the detected TVs and one to upload/play videos to the connected TV. When the app is launched, the TV list screen is displayed and that's where the sign in with Apple button as well as the delete account buttons are. I simply don't understand how it is possible that the reviewer is missing out this. It is a super simple app. This is the TVs screen with sign in with Apple button with clearly indicating that it is optional and what is it for. This is the same screen after sign in with Apple completed. The delete account button is right there This is what user sees after tapping delete account. Once they tap the "Delete", the account is deleted from our servers and the user is signed out. And this is a sample of the data we store when a user signs in with Apple: It is immediately deleted if the user deletes the account. What are we doing wrong here, how to fix this? Thank you
0
0
35
16h
StoreKit 2: Transaction.all and Transaction.currentEntitlements return empty for valid non-consumable purchases in production
FB: https://feedbackassistant.apple.com/feedback/22556883 We're seeing a small number of production users where both Transaction.currentEntitlements and Transaction.all return zero transactions for a valid, active, non-refunded non-consumable IAP. This makes it impossible to restore the purchase via any StoreKit 2 API. Environment: Xcode 26.4 (Build 17E192) iOS 26.4.1 Direct call to SK2 Transactions.all & Flutter in_app_purchase package v3.2.3 (uses SK2 on iOS 15+) Non-consumable IAP (one-time purchase) What we observe: AppStore.sync() triggers but the purchase stream returns 0 transactions Transaction.all returns empty Transaction.currentEntitlements also returns empty User is confirmed on the correct Apple ID Issue reproduces on both iPhone and Mac for the same Apple ID Issue appears to have started recently for users who previously had no problems Debug log from affected production user: [2026-04-20T08:50:10.744115Z] init: iapAvailable=true [2026-04-20T08:50:10.744566Z] init: isPremium=false [2026-04-20T08:50:10.744567Z] init: triggering silent restorePurchases [2026-04-20T08:50:45.974566Z] restore: started [2026-04-20T08:50:45.986848Z] restore: sk2Transactions count=0 [2026-04-20T08:50:45.993004Z] restore: sk2Direct isVerified=false active=null [2026-04-20T08:50:45.993011Z] restore: sk2Direct inconclusive — falling back to standard restore [2026-04-20T08:51:16.000851Z] restore: timed out after 30s — fallback isPremium=false [2026-04-20T08:51:16.000910Z] restore: completed — succeeded=false foundPurchase=false Unable to reproduce in sandbox — Transaction.all works correctly there. Appears specific to production for a small subset of users. Has anyone else seen this?
11
1
302
1d
IAPs stuck in 'Waiting for Review' for 6 days. In-App Purchases section missing from version page
Hi, My app MediaForge (Bundle ID: uk.mediaforge.app) was approved and is live on the Mac App Store as v1.1.2, however my in-app purchases have been stuck in "Waiting for Review" for 6 days with no movement. Product IDs: uk.mediaforge.app.annual uk.mediaforge.app.lifetime During submission I encountered a known issue where the "In-App Purchases and Subscriptions" section was completely missing from the version page in App Store Connect, making it impossible to formally attach the IAPs to the build before submitting. I have seen other developers report the same bug on these forums. The app is live and customers are unable to make purchases as a result. I have raised a support ticket but have had no response. Has anyone else experienced this recently? Is there anything I can do to progress this, or does it simply need Apple's review team to action the pending IAPs? Any help appreciated. Thanks in advance.
1
0
65
1d
Can't enter sandbox environment for IAP testing on any of my apps - always getting -100 error with no [Environment: Sandbox] indicator
Body: I'm experiencing a persistent issue that has affected multiple apps I've developed, and I'm hoping to get some guidance from the community or Apple engineers. The Problem: When testing In-App Purchases, my app never enters the sandbox environment. The payment prompt does NOT show the "[Environment: Sandbox]" indicator, and I always receive error code -100 (Invalid Product Identifier). This issue has occurred across multiple apps I've built, including a previous app that I ultimately had to release as a paid download (rather than freemium with IAP) because I couldn't resolve this same problem. Now I'm facing the identical issue with my new app, "AI Job Assistant". What I've Checked (all correct): ✅ Paid App Agreement status is "Active" in App Store Connect ✅ Bundle ID matches exactly between Xcode/HBuilderX and App Store Connect ✅ Product IDs in code match those created in App Store Connect (case-sensitive, no spaces) ✅ All IAP products have complete metadata (name, description, pricing, 640x920 screenshot) ✅ Product status is "Ready to Submit" (not "Waiting for Review") ✅ I have both iOS Development certificate and iOS Distribution certificate — I am using the Development certificate for testing ✅ My provisioning profile is explicitly for Development (named "aijobDevprofile", shows "iOS Development" type) ✅ The Development profile contains my test device UDID ✅ I have fully signed out of my real Apple ID in Settings → Media & Purchases ✅ I only log into my Sandbox Tester account through the purchase prompt (not in Settings) ✅ I test on a real device (not simulator) ✅ I have tried creating multiple new Sandbox Tester accounts ✅ I have tried toggling "Cleared for Sale" off and on for all products ✅ I have waited over 24 hours after making configuration changes What I See: When I initiate a purchase, the payment prompt comes up but there is NO "[Environment: Sandbox]" text anywhere After entering my Sandbox Tester credentials, the request fails with error code -100 (Invalid Product Identifier) My Setup: Development framework: uni-app / HBuilderX (custom debug base with Development certificate and Development provisioning profile) Backend: Cloudflare Workers (handles receipt verification) Testing device: iPhone (latest iOS version) The same issue occurred with my previous app, which I never resolved and eventually gave up on IAP entirely Question: Why does my app never enter the sandbox environment despite using the correct Development certificate and Development provisioning profile? Is it possible there is an issue at the Apple developer account level that is preventing sandbox environment activation? How can I force my debug builds to connect to sandbox instead of production? I am willing to provide any additional logs or information needed. Please help. Thank you.
0
0
41
1d
AppTransaction.originalAppVersion returns "1.0" in App Review environment — not the actual build number
Hi, I'm using AppTransaction.originalAppVersion to detect whether a user originally purchased the app under the old paid model, so I can automatically unlock the app for them as a courtesy when migrating to freemium. Background On iOS, originalAppVersion returns CFBundleVersion (the build number). When I transitioned the app from paid (v1.x) to freemium (v2.0), I defined a numeric threshold for CFBundleVersion to distinguish legacy purchasers from new users: Build number below the threshold → v1.x purchase → auto-unlock Build number at or above the threshold → v2.0+ install → requires IAP In Production, originalAppVersion correctly returns the actual build number, and the comparison works as intended. Detection logic (simplified) // Determine environment via receipt URL func detectStoreEnvironment() -> String { if let url = Bundle.main.appStoreReceiptURL, url.lastPathComponent == "sandboxReceipt" { return "Sandbox" } return "Production" } // Legacy check using numeric comparison static func isLegacyPaidUser(version: String, threshold: String) -> Bool { guard !version.isEmpty else { return false } return version.compare(threshold, options: .numeric) == .orderedAscending } // In checkLegacyPurchase(): let version = appTransaction.originalAppVersion let isLegacy = isLegacyPaidUser(version: version, threshold: legacyBuildNumberThreshold) let env = detectStoreEnvironment() let shouldAutoUnlock = isLegacy && env != "Sandbox" The problem I know that in the Sandbox environment, originalAppVersion always returns "1.0" — this is mentioned in the AppTransaction documentation. My code already suppresses the auto-unlock for Sandbox (env != "Sandbox"). However, it appears that the App Review environment also returns "1.0" for originalAppVersion. Because the receipt URL path component is "receipt" (not "sandboxReceipt"), my environment detection classifies it as "Production" — so the Sandbox suppression doesn't apply. The reviewer is incorrectly identified as a legacy paid user and the app is unlocked without a purchase. This caused our v2.0 submission to be rejected under Guideline 2.1a. Questions Is it documented that the App Review environment returns "1.0" for AppTransaction.originalAppVersion, similar to Sandbox? Is there a reliable way to detect the App Review environment specifically — separate from both Sandbox and Production? For example, does the receipt URL differ, or is there another API? Is using originalAppVersion for legacy paid-user detection a supported pattern? If so, what is the recommended approach to handle the App Review case? Any guidance would be greatly appreciated. Thank you.
0
0
31
1d
Storefront.current?.countryCode returns inconsistent values in TestFlight builds
Hi, We're experiencing inconsistent and unexpected values returned by Storefront.current?.countryCode when running our app via TestFlight. In our case: The device region and locale are set to Poland The App Store account (Media & Purchases) is also set to Poland However, when running a TestFlight build, Storefront.current?.countryCode sometimes returns a completely different value (e.g. "NO" for Norway), which does not match the current App Store account configuration. Here's the code we're using: if #available(iOS 15.0, *) { let code = await Storefront.current?.countryCode print("Storefront countryCode:", code ?? "nil") } What's particularly confusing: Across different devices logged into the same App Store account, we sometimes receive different countryCode values The returned value does not seem to reflect the current App Store region or device settings We understand that Storefront reflects the App Store storefront and not the device locale, but in this case the value appears stale or incorrect even with a properly configured App Store account. Questions: Is Storefront.current?.countryCode expected to behave differently in TestFlight vs. production builds? Are there known caching or propagation delays for storefront updates across devices? Can TestFlight builds return outdated or inconsistent storefront values? What is the recommended way to reliably determine the user's App Store region in this scenario? We rely on storefront to determine regional availability of features, so understanding this behavior is important for us. Thanks in advance for any clarification!
1
0
69
2d
Korea subscription consent: Timing mismatch between push notifications and Settings consent option
Hi all, I've been observing what appears to be a timing mismatch in how Apple handles Korea trial-to-paid consent, and I wanted to see if other developers are seeing the same thing. Per Korean regulations effective Feb 14, 2025, Apple must obtain explicit user consent before converting a free trial to a paid subscription. Apple handles this via email, push notifications, and an in-app consent option accessible from Settings > Subscriptions. For a 7-day trial in the Republic of Korea storefront, I'm observing: Consent push notifications (Agree to continue your subscription without interruption) start arriving ~1 day after trial redemption, at roughly hourly frequency. However, when the user taps the push and navigates to Settings > Subscriptions, there is no consent option available. The only visible action is "Cancel Free Trial". The consent option only becomes available around day 4 of the trial (i.e., 3 days before renewal, matching Apple's documented messaging cadence [1]). For the first ~3 days, users receive hourly push notifications they cannot act on. The only way to stop them is to cancel the subscription entirely. This is happening across multiple apps in the Korean App Store, so it appears to be a platform-level behavior rather than an app-specific issue. Is anyone else observing this behavior? Any insight from Apple engineers or other developers would be greatly appreciated. [1] https://developer.apple.com/help/app-store-connect/reference/in-app-purchases-and-subscriptions/consent-for-subscription-offer-conversions
0
0
41
3d
In-App Purchases detaching from app version after submission (auto-renewable subscriptions)
Hi, I’m having an issue where my auto-renewable subscriptions keep detaching from my app version after I submit the build in App Store Connect. Details: App ID: com.growthsync.app Platform: iOS (Capacitor build) Using auto-renewable subscriptions What’s happening: I attach all subscriptions to the app version under “In-App Purchases” Everything looks correct before submission After submitting, the subscriptions become detached or require localisation to be re-entered again This happens every time I resubmit Additional issue: Subscriptions are not working in TestFlight either It feels like they are not properly linked to the binary What I’ve already checked: Product IDs match exactly in code and App Store Connect Subscriptions are in the correct group All localisation fields are filled within character limits Products show as “Ready to Submit” before attaching I reattach them before every submission Questions: Why would subscriptions repeatedly detach after submission? Is this a known App Store Connect issue? Is there a specific order required when creating, localising, and attaching subscriptions? Could this be related to the binary not recognising the products? This is currently blocking release so any help would be appreciated. Thanks.
0
0
38
4d
Why Non-Consumable product has originalTransactionId?
I try to call Get Transaction Info from App Store Server API, and the transactionId is for a Non-consumable type product, but it is odd that there are so many different transactionId and they have a same originalTransactionId { "bundleId": "${bundleId}", "environment": "Production", "inAppOwnershipType": "PURCHASED", "originalPurchaseDate": 1691220528000, "originalTransactionId": "${originalTransactionId}", "productId": "${productId}", "purchaseDate": 1691220528000, "quantity": 1, "signedDate": 1692590989925, "storefront": "USA", "storefrontId": "143441", "transactionId": "${originalTransactionId}", "transactionReason": "PURCHASE", "type": "Non-Consumable" } the defination of Non-Consumable is can only purchase once for same apple account. But why there would have originalTransactionId?
4
0
1.2k
4d
Subscription Unavailable - Strange Behavior with StoreKit
I added my first subscription to my app using StoreKit's SubscriptionStoreView. Everything worked as expected in the debug environment and also in TestFlight. So I submitted my app and subscriptions to App Store Connect, got everything Approved and released. After updating my app through App Store and checking the Subscription View, it just says "Subscription Unavailable. The subscription is unavailable in the current storefront." I waited around 3 days and still getting the same message. Now the very strange behavior starts. I went to App Store Connect, I made and edit to the subscription description, saved, removed the edit, saved, and submitted to review. 15 minutes later the subscriptions appear in my app and everything works as expected. After getting the edit approved, the Subscription View in my app again only showed the message "Subscription Unavailable. The subscription is unavailable in the current storefront." No user is able to see the subscriptions anymore, even though it worked as expected before the edit was approved. So I did the same as before. Again, make an edit to the subscription description, save, remove the edit, save, submit to review. 15 minutes later the subscriptions are again available in my app and it works as expected. This is definitely not the expected behavior and submitting the subscription edits every day is wasting the App Review Team's time as well as mine. I contacted Apple Developer Support but I didn't get any reply back (at least yet). I am not the only one experiencing this. I found a friend online who has the exact same issue, and is able to temporarily solve it by making an edit to the subscription description as well. So far it has been a huge headache, and we are losing customers this way. Please if anyone has experience with this problem, or has any suggestions, they will be greatly appreciated. Thank you so much, Tomas
33
19
7.3k
4d
AppStore.sync() not restoring purchases
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.
3
0
1.8k
4d
Tauri 2 macOS app cannot be opened: "contains malware" with Apple Development Certificate, or notarization blocked with Apple Distribution Certificate for IAP testing
Hi everyone, I'm developing a macOS app using Tauri 2. I need to test In-App Purchases (IAP), which requires running the actual built .app (it doesn't work properly in the development environment).I tried two approaches: Apple Development Certificate (free account): After cargo tauri build, the app "Mind Elixir.app" shows this error when I try to open it: “Mind Elixir.app” was not opened because it contains malware. This action did not harm your Mac. Apple Distribution Certificate: The app builds successfully, but because it is not notarized, Gatekeeper completely blocks it and I cannot open it at all. I just want to test IAP locally on my own Mac during development. Is there any other way to get a properly signed and runnable .app for testing IAP? Any help or workaround would be greatly appreciated. Thanks!
1
0
428
4d
The In-App Purchase Not Displayed in Released Version
I can confirm that: The In-App Purchase has been displayed in TestFlight. In the "App Store Connect/App/In-App Purchases", all the products has been "Approved". Inside of the In-App Purchase Product setting, the availability and Price are also correct. In one Build (same version), all the products has been selected. Off Course, that is why the products has been approved. In the "Business", all items' statuses are "Active", including Agreements, Bank Accounts, Tax Forms, Compliance. It's displayed well in the TestFlight and Debugging with Real-Device Simulation. How can I fix this issue? Code or Configuration?
2
1
150
6d
WatchOS IAP -- why is this such a mess?
Need to vent a bit before relaxing for Christmas... WatchOS IAP using Storekit 2 is such a mess...is nobody actually using this or does Apple just not care for the user experience here? Lots of users experience after the purchase confirmation double tap on the side button an instant return to the purchase screen with nothing actually happening. No error message whatsoever. There is just one remedy: users need to unpair and re-pair their watch, including restoring a backup and setting up their wallet again. Nobody really wants to do this, or doesn't believe me and think this is just typical support BS, because their watch is paired and most things just work as they expect. And it turns away a customer, often leaving a bad review. And I can't do anything about it. Other errors in the purchase process are reported, but like "process interrupted" in case the payment is not setup correctly (credit car no longer valid or sth.). How should the user know? There must be better ways of letting him know what exactly the problem is. You need to implement a "Restore Purchase" function, otherwise you're not passing the review. But it really asks every time for the AppStore password, and users with crazy passwords -- that they rightfully should have! -- have almost no chance of typing them successfully on the tiny AW keyboard. Why is it not also just a side button double tap like for purchase? At the very least you would need access to the keychain PWs or allow pasting of sth. copied on the paired iPhone. Promo Codes for IAP on AW-only apps just don't work. AW has no redemption at all, and on the iPhone the AppStore will try to talk to a companion app (which AW-only doesn't have) and the end up in a dead-end installation effort. This all feels like never really tested in the field, and people are of course blaming the 3rd party dev. for all these issues. And opening a ticket is just leading nowhere -- at best it's closed after months with the hint "duplicate" but w/o any chance for me to see that one that they then actually work on and track progress. It's all so frustratingly broken...
2
0
243
1w
StoreKit Subscription not discoverable in App Review (PLEASE HELP!))
I'm in the final phase before app approval and I'm struggling to implement store kit for in app purchases. I'm using base 44 and really need help finishing this set up. I have an iOS app (SwiftUI + WKWebView) with auto-renewable subscriptions using StoreKit and SubscriptionStoreView. The app was rejected under Guideline 3.1 because payments were defaulting to Stripe instead of storekit. What’s already done: Subscriptions created in App Store Connect (monthly + annual) SubscriptionStoreView implemented and visible in app WKWebView bridge triggers native StoreKit paywall Sandbox test account created Stripe fully disabled on iOS What I need: Verify StoreKit implementation is App Review compliant Confirm subscriptions are correctly attached to the app version Ensure paywall is discoverable by App Review Help me pass App Review (reply guidance + final checks) This is a short engagement (1–3 hours). Looking for someone with real StoreKit + App Review experience + Base44 knowledge.
1
0
113
1w
In-App Purchase works in TestFlight but fails during App Review (Apple can't complete purchase)
Hello, I have an issue with In-App Purchases during App Review. In TestFlight and Sandbox, everything works correctly: Products are loaded Subscriptions are visible Purchase completes successfully However, Apple reports that the purchase fails during review. My subscriptions are: Created and active in App Store Connect Attached to the app version Paid Apps Agreement accepted I also added all required information (price, duration, EULA, privacy policy). Why would purchases work in TestFlight but fail during App Review? Thank you for your help.
1
0
48
1w
StoreKit / IAP: Product WAITING_FOR_REVIEW — works locally with production RevenueCat key + Apple Sandbox, fails during App Review
Hello, I need guidance on App Store Connect product state vs StoreKit behavior during App Review. Stack: iOS app (Expo / React Native), subscriptions via RevenueCat + StoreKit. Bundle ID matches App Store Connect. RevenueCat API keys — what I’ve verified locally: With the production RevenueCat API key (iOS appl_..., same as the submitted build), everything works on local device but not when I download it from TestFlight. I have also tested with RevenueCat’s sandbox / test API key (the separate key intended for sandbox/testing). That setup works as well — I can load offerings and complete test purchases the same way What RevenueCat (SDK / dashboard health) reports: Product monthly is configured in RevenueCat. Warnings that products aren’t approved in App Store Connect yet and that the default offering has configuration issues. Apple’s product state: WAITING_FOR_REVIEW. The SDK still states that test purchases are possible. What App Review reports: After onboarding a new business account, “Activate subscription” leads to an error (plans don’t load / purchase path fails). Review suggested an app code issue. Why this is confusing: Locally, both RevenueCat key modes I tried (production and sandbox/test) work with Apple Sandbox on the device. The submitted build uses the production RevenueCat key. Review still sees a failure. Questions: For IAP in WAITING_FOR_REVIEW, should App Review always use an Apple Sandbox account to test subscriptions until the product is fully approved? Is it documented that StoreKit may not return products during review without Sandbox while the product remains WAITING_FOR_REVIEW? Has anyone else seen “works locally (prod + sandbox RevenueCat keys + Apple Sandbox) but Review fails” with the same WAITING_FOR_REVIEW state? Thanks for any official documentation or similar threads.
1
0
64
1w
External Purchase Link Entitlement RU - 500 Internal Server Error
Hello, We are a Russian developer attempting to enable the StoreKit External Purchase Link Entitlement for our app. According to Apple’s documentation, this entitlement is required to provide external purchase links in Russia. However, the official request page consistently returns a 500 Internal Server Error: https://developer.apple.com/contact/request/storekit-external-entitlement-ru Steps we tried: Different browsers (Safari, Chrome, Edge) Different networks and VPNs Multiple developer accounts The error persists in all cases. We have already opened a support case (Case #102864703080), but Developer Support advised us to post here for technical guidance. Questions: Is there an alternative way to submit the entitlement request while the page is unavailable? Can Apple confirm whether this is a known issue and if a fix is in progress? Are manual submissions via the general Contact Us form accepted for this entitlement? Screenshots of the error are attached. Thank you in advance for any guidance.
0
0
28
1w
In-App Purchase works in Sandbox & TestFlight, but App Review reports “No action on Subscribe button”
Hello everyone, I’m facing a persistent App Store rejection under Guideline 2.1(b) – App Completeness, related to In-App Purchases, and I’m unable to reproduce the issue on my end. Issue reported by Apple Review Apple Review team reports: “No action occurred when we attempted to buy the subscription.” Device: iPad Air 11-inch (M3) OS: iPadOS 26.4.1 What I have verified from my side I have thoroughly tested the subscription flow under multiple scenarios: Sandbox Testing Using sandbox test accounts Product loads correctly Purchase flow completes successfully Apple payment sheet appears properly TestFlight Testing Installed app via TestFlight Logged in with real Apple ID (Beta tester) Successfully completed subscription purchase Device Testing Tested on multiple iPhones Tested on iPad as well Purchase flow works correctly on all devices App Store Connect Configuration Paid Apps Agreement → Active Banking & Tax → Completed (no pending warnings) In-App Purchase status → “In Review” Product is correctly configured and attached to app What Apple is experiencing Based on their feedback and screenshots: Subscription screen loads correctly Product price is visible When tapping “Subscribe Now” → no action occurs No error message, no purchase sheet Is there a recommended workaround or reviewer instruction to avoid this deadlock? Any insights or real-world experience would be greatly appreciated. Thanks in advance.
0
0
60
1w
StoreKit / react-native-iap – Payment deducted but no transaction returned (India UPI users)
Hello, We are facing an issue with In-App Purchases (subscriptions) in two iOS apps built with React Native + react-native-iap. Issue Some users receive the error: E_CONNECTION_CLOSED during the purchase flow. However: The payment is successfully deducted via the App Store. The subscription appears in the user's Apple ID subscription list. But on our side: The app does not receive the StoreKit transaction callback No receipt or transaction ID is delivered Our backend cannot validate the purchase. Restore Purchases When affected users try Restore Purchases, StoreKit returns: No purchases found even though the subscription is visible in their Apple ID. Most affected users are from India, and many payments are made via UPI through App Store billing. Has anyone experienced a case where: *the user is charged *the subscription exists in Apple ID *but StoreKit never returns the transaction or receipt? Any suggestions on how to recover these transactions would be greatly appreciated. Thanks!
1
0
155
1w
Can someone help me with finding out why the reviewer believes that doesn't comply with the requirements?
Hi, I previously posted about this but didn't provide specifics so decide to try this again: https://developer.apple.com/forums/thread/824212 The app is called Kino Controller, it is a client for the Kino app that runs on Smart TVs and allows users to upload videos to their TVs both to store(on the TVs internal storage and the USB storage they may attach to their TVs) and watch those videos(it has decent video player). In short, it turns their TVs into media servers. I personally use it to store videos that I film but I don't want to keep on my phone because of the disk usage. This is the app in question and you can give it a try with its macOS client that I published directly: https://appwared.com/apps/kino Now, I want to get the macOS and the iOS clients into the App Store and because I don't want to collect/sell user data and display advertisement I want to offer in-app Purchases that removes the free usage limit that is 10 videos stored in the TV at a time. I already offer this from the TV app and I want to offer the same option through the macOS and iOS apps, with having this on the client app that controls the TV app it's just better UX and I'm happy to bring business to Apple as well. However after multiple rejections from and fulfillments of the reviewers I have come to a point where I don't know how to proceed because the reviewers are rejecting the app about a features that We have already implemented. There are two things in particular, both under "Guideline 5.1.1(v) - Legal - Data Collection and Storage". We noticed that the app requires users to register with personal information to purchase and track In-App Purchase products that are not account based. Apps cannot require user registration prior to allowing access to app content and features that are not associated specifically to the user. User registration that requires the sharing of personal information must be optional or tied to account-specific functionality. The app supports account creation but does not include an option to initiate account deletion. Apps that support account creation must also offer account deletion to give users more control of the data they've shared while using an app.Follow these requirements when updating an app to support account deletion: Only offering to temporarily deactivate or disable an account is insufficient. If users need to visit a website to finish deleting their account, include a link directly to the website page where they can complete the process. Apps may include confirmation steps to prevent users from accidentally deleting their account. However, only apps in highly-regulated industries may require users to use customer service resources, such as making a phone call or sending an email, to complete account deletion. Now, we introduced the registration feature after the reviewers demanded having this in the 2. or 3. rejection or something like that. Initially we went with the "default" scope of the profile but on the latest build we change that to absolute minimum data collection, so in the server we don't receive any personal data about the user. Just some alphanumeric ids so we can associate the stored purchases with a signed in user. Also, using the sign-in with Apple is %100 optional, no feature or iAP require the user be signed in, it is solely to store unlocked TV devices so we can re-unlock those if the user resets the TV etc. I replied to the message clarifying this and also put it in the reviewer notes but for some reason the reviewer keeps believing that it's otherwise Then the reviewer keeps believing that we do not have account deletion feature. This is also factually false, the delete account button is right next to sign out button and both of those are one the same View where the sign in with Apple button is. Also, the app has exactly two screens: One to list the detected TVs and one to upload/play videos to the connected TV. When the app is launched, the TV list screen is displayed and that's where the sign in with Apple button as well as the delete account buttons are. I simply don't understand how it is possible that the reviewer is missing out this. It is a super simple app. This is the TVs screen with sign in with Apple button with clearly indicating that it is optional and what is it for. This is the same screen after sign in with Apple completed. The delete account button is right there This is what user sees after tapping delete account. Once they tap the "Delete", the account is deleted from our servers and the user is signed out. And this is a sample of the data we store when a user signs in with Apple: It is immediately deleted if the user deletes the account. What are we doing wrong here, how to fix this? Thank you
Replies
0
Boosts
0
Views
35
Activity
16h
StoreKit 2: Transaction.all and Transaction.currentEntitlements return empty for valid non-consumable purchases in production
FB: https://feedbackassistant.apple.com/feedback/22556883 We're seeing a small number of production users where both Transaction.currentEntitlements and Transaction.all return zero transactions for a valid, active, non-refunded non-consumable IAP. This makes it impossible to restore the purchase via any StoreKit 2 API. Environment: Xcode 26.4 (Build 17E192) iOS 26.4.1 Direct call to SK2 Transactions.all & Flutter in_app_purchase package v3.2.3 (uses SK2 on iOS 15+) Non-consumable IAP (one-time purchase) What we observe: AppStore.sync() triggers but the purchase stream returns 0 transactions Transaction.all returns empty Transaction.currentEntitlements also returns empty User is confirmed on the correct Apple ID Issue reproduces on both iPhone and Mac for the same Apple ID Issue appears to have started recently for users who previously had no problems Debug log from affected production user: [2026-04-20T08:50:10.744115Z] init: iapAvailable=true [2026-04-20T08:50:10.744566Z] init: isPremium=false [2026-04-20T08:50:10.744567Z] init: triggering silent restorePurchases [2026-04-20T08:50:45.974566Z] restore: started [2026-04-20T08:50:45.986848Z] restore: sk2Transactions count=0 [2026-04-20T08:50:45.993004Z] restore: sk2Direct isVerified=false active=null [2026-04-20T08:50:45.993011Z] restore: sk2Direct inconclusive — falling back to standard restore [2026-04-20T08:51:16.000851Z] restore: timed out after 30s — fallback isPremium=false [2026-04-20T08:51:16.000910Z] restore: completed — succeeded=false foundPurchase=false Unable to reproduce in sandbox — Transaction.all works correctly there. Appears specific to production for a small subset of users. Has anyone else seen this?
Replies
11
Boosts
1
Views
302
Activity
1d
IAPs stuck in 'Waiting for Review' for 6 days. In-App Purchases section missing from version page
Hi, My app MediaForge (Bundle ID: uk.mediaforge.app) was approved and is live on the Mac App Store as v1.1.2, however my in-app purchases have been stuck in "Waiting for Review" for 6 days with no movement. Product IDs: uk.mediaforge.app.annual uk.mediaforge.app.lifetime During submission I encountered a known issue where the "In-App Purchases and Subscriptions" section was completely missing from the version page in App Store Connect, making it impossible to formally attach the IAPs to the build before submitting. I have seen other developers report the same bug on these forums. The app is live and customers are unable to make purchases as a result. I have raised a support ticket but have had no response. Has anyone else experienced this recently? Is there anything I can do to progress this, or does it simply need Apple's review team to action the pending IAPs? Any help appreciated. Thanks in advance.
Replies
1
Boosts
0
Views
65
Activity
1d
Can't enter sandbox environment for IAP testing on any of my apps - always getting -100 error with no [Environment: Sandbox] indicator
Body: I'm experiencing a persistent issue that has affected multiple apps I've developed, and I'm hoping to get some guidance from the community or Apple engineers. The Problem: When testing In-App Purchases, my app never enters the sandbox environment. The payment prompt does NOT show the "[Environment: Sandbox]" indicator, and I always receive error code -100 (Invalid Product Identifier). This issue has occurred across multiple apps I've built, including a previous app that I ultimately had to release as a paid download (rather than freemium with IAP) because I couldn't resolve this same problem. Now I'm facing the identical issue with my new app, "AI Job Assistant". What I've Checked (all correct): ✅ Paid App Agreement status is "Active" in App Store Connect ✅ Bundle ID matches exactly between Xcode/HBuilderX and App Store Connect ✅ Product IDs in code match those created in App Store Connect (case-sensitive, no spaces) ✅ All IAP products have complete metadata (name, description, pricing, 640x920 screenshot) ✅ Product status is "Ready to Submit" (not "Waiting for Review") ✅ I have both iOS Development certificate and iOS Distribution certificate — I am using the Development certificate for testing ✅ My provisioning profile is explicitly for Development (named "aijobDevprofile", shows "iOS Development" type) ✅ The Development profile contains my test device UDID ✅ I have fully signed out of my real Apple ID in Settings → Media & Purchases ✅ I only log into my Sandbox Tester account through the purchase prompt (not in Settings) ✅ I test on a real device (not simulator) ✅ I have tried creating multiple new Sandbox Tester accounts ✅ I have tried toggling "Cleared for Sale" off and on for all products ✅ I have waited over 24 hours after making configuration changes What I See: When I initiate a purchase, the payment prompt comes up but there is NO "[Environment: Sandbox]" text anywhere After entering my Sandbox Tester credentials, the request fails with error code -100 (Invalid Product Identifier) My Setup: Development framework: uni-app / HBuilderX (custom debug base with Development certificate and Development provisioning profile) Backend: Cloudflare Workers (handles receipt verification) Testing device: iPhone (latest iOS version) The same issue occurred with my previous app, which I never resolved and eventually gave up on IAP entirely Question: Why does my app never enter the sandbox environment despite using the correct Development certificate and Development provisioning profile? Is it possible there is an issue at the Apple developer account level that is preventing sandbox environment activation? How can I force my debug builds to connect to sandbox instead of production? I am willing to provide any additional logs or information needed. Please help. Thank you.
Replies
0
Boosts
0
Views
41
Activity
1d
AppTransaction.originalAppVersion returns "1.0" in App Review environment — not the actual build number
Hi, I'm using AppTransaction.originalAppVersion to detect whether a user originally purchased the app under the old paid model, so I can automatically unlock the app for them as a courtesy when migrating to freemium. Background On iOS, originalAppVersion returns CFBundleVersion (the build number). When I transitioned the app from paid (v1.x) to freemium (v2.0), I defined a numeric threshold for CFBundleVersion to distinguish legacy purchasers from new users: Build number below the threshold → v1.x purchase → auto-unlock Build number at or above the threshold → v2.0+ install → requires IAP In Production, originalAppVersion correctly returns the actual build number, and the comparison works as intended. Detection logic (simplified) // Determine environment via receipt URL func detectStoreEnvironment() -> String { if let url = Bundle.main.appStoreReceiptURL, url.lastPathComponent == "sandboxReceipt" { return "Sandbox" } return "Production" } // Legacy check using numeric comparison static func isLegacyPaidUser(version: String, threshold: String) -> Bool { guard !version.isEmpty else { return false } return version.compare(threshold, options: .numeric) == .orderedAscending } // In checkLegacyPurchase(): let version = appTransaction.originalAppVersion let isLegacy = isLegacyPaidUser(version: version, threshold: legacyBuildNumberThreshold) let env = detectStoreEnvironment() let shouldAutoUnlock = isLegacy && env != "Sandbox" The problem I know that in the Sandbox environment, originalAppVersion always returns "1.0" — this is mentioned in the AppTransaction documentation. My code already suppresses the auto-unlock for Sandbox (env != "Sandbox"). However, it appears that the App Review environment also returns "1.0" for originalAppVersion. Because the receipt URL path component is "receipt" (not "sandboxReceipt"), my environment detection classifies it as "Production" — so the Sandbox suppression doesn't apply. The reviewer is incorrectly identified as a legacy paid user and the app is unlocked without a purchase. This caused our v2.0 submission to be rejected under Guideline 2.1a. Questions Is it documented that the App Review environment returns "1.0" for AppTransaction.originalAppVersion, similar to Sandbox? Is there a reliable way to detect the App Review environment specifically — separate from both Sandbox and Production? For example, does the receipt URL differ, or is there another API? Is using originalAppVersion for legacy paid-user detection a supported pattern? If so, what is the recommended approach to handle the App Review case? Any guidance would be greatly appreciated. Thank you.
Replies
0
Boosts
0
Views
31
Activity
1d
Storefront.current?.countryCode returns inconsistent values in TestFlight builds
Hi, We're experiencing inconsistent and unexpected values returned by Storefront.current?.countryCode when running our app via TestFlight. In our case: The device region and locale are set to Poland The App Store account (Media & Purchases) is also set to Poland However, when running a TestFlight build, Storefront.current?.countryCode sometimes returns a completely different value (e.g. "NO" for Norway), which does not match the current App Store account configuration. Here's the code we're using: if #available(iOS 15.0, *) { let code = await Storefront.current?.countryCode print("Storefront countryCode:", code ?? "nil") } What's particularly confusing: Across different devices logged into the same App Store account, we sometimes receive different countryCode values The returned value does not seem to reflect the current App Store region or device settings We understand that Storefront reflects the App Store storefront and not the device locale, but in this case the value appears stale or incorrect even with a properly configured App Store account. Questions: Is Storefront.current?.countryCode expected to behave differently in TestFlight vs. production builds? Are there known caching or propagation delays for storefront updates across devices? Can TestFlight builds return outdated or inconsistent storefront values? What is the recommended way to reliably determine the user's App Store region in this scenario? We rely on storefront to determine regional availability of features, so understanding this behavior is important for us. Thanks in advance for any clarification!
Replies
1
Boosts
0
Views
69
Activity
2d
Korea subscription consent: Timing mismatch between push notifications and Settings consent option
Hi all, I've been observing what appears to be a timing mismatch in how Apple handles Korea trial-to-paid consent, and I wanted to see if other developers are seeing the same thing. Per Korean regulations effective Feb 14, 2025, Apple must obtain explicit user consent before converting a free trial to a paid subscription. Apple handles this via email, push notifications, and an in-app consent option accessible from Settings > Subscriptions. For a 7-day trial in the Republic of Korea storefront, I'm observing: Consent push notifications (Agree to continue your subscription without interruption) start arriving ~1 day after trial redemption, at roughly hourly frequency. However, when the user taps the push and navigates to Settings > Subscriptions, there is no consent option available. The only visible action is "Cancel Free Trial". The consent option only becomes available around day 4 of the trial (i.e., 3 days before renewal, matching Apple's documented messaging cadence [1]). For the first ~3 days, users receive hourly push notifications they cannot act on. The only way to stop them is to cancel the subscription entirely. This is happening across multiple apps in the Korean App Store, so it appears to be a platform-level behavior rather than an app-specific issue. Is anyone else observing this behavior? Any insight from Apple engineers or other developers would be greatly appreciated. [1] https://developer.apple.com/help/app-store-connect/reference/in-app-purchases-and-subscriptions/consent-for-subscription-offer-conversions
Replies
0
Boosts
0
Views
41
Activity
3d
In-App Purchases detaching from app version after submission (auto-renewable subscriptions)
Hi, I’m having an issue where my auto-renewable subscriptions keep detaching from my app version after I submit the build in App Store Connect. Details: App ID: com.growthsync.app Platform: iOS (Capacitor build) Using auto-renewable subscriptions What’s happening: I attach all subscriptions to the app version under “In-App Purchases” Everything looks correct before submission After submitting, the subscriptions become detached or require localisation to be re-entered again This happens every time I resubmit Additional issue: Subscriptions are not working in TestFlight either It feels like they are not properly linked to the binary What I’ve already checked: Product IDs match exactly in code and App Store Connect Subscriptions are in the correct group All localisation fields are filled within character limits Products show as “Ready to Submit” before attaching I reattach them before every submission Questions: Why would subscriptions repeatedly detach after submission? Is this a known App Store Connect issue? Is there a specific order required when creating, localising, and attaching subscriptions? Could this be related to the binary not recognising the products? This is currently blocking release so any help would be appreciated. Thanks.
Replies
0
Boosts
0
Views
38
Activity
4d
Why Non-Consumable product has originalTransactionId?
I try to call Get Transaction Info from App Store Server API, and the transactionId is for a Non-consumable type product, but it is odd that there are so many different transactionId and they have a same originalTransactionId { "bundleId": "${bundleId}", "environment": "Production", "inAppOwnershipType": "PURCHASED", "originalPurchaseDate": 1691220528000, "originalTransactionId": "${originalTransactionId}", "productId": "${productId}", "purchaseDate": 1691220528000, "quantity": 1, "signedDate": 1692590989925, "storefront": "USA", "storefrontId": "143441", "transactionId": "${originalTransactionId}", "transactionReason": "PURCHASE", "type": "Non-Consumable" } the defination of Non-Consumable is can only purchase once for same apple account. But why there would have originalTransactionId?
Replies
4
Boosts
0
Views
1.2k
Activity
4d
Subscription Unavailable - Strange Behavior with StoreKit
I added my first subscription to my app using StoreKit's SubscriptionStoreView. Everything worked as expected in the debug environment and also in TestFlight. So I submitted my app and subscriptions to App Store Connect, got everything Approved and released. After updating my app through App Store and checking the Subscription View, it just says "Subscription Unavailable. The subscription is unavailable in the current storefront." I waited around 3 days and still getting the same message. Now the very strange behavior starts. I went to App Store Connect, I made and edit to the subscription description, saved, removed the edit, saved, and submitted to review. 15 minutes later the subscriptions appear in my app and everything works as expected. After getting the edit approved, the Subscription View in my app again only showed the message "Subscription Unavailable. The subscription is unavailable in the current storefront." No user is able to see the subscriptions anymore, even though it worked as expected before the edit was approved. So I did the same as before. Again, make an edit to the subscription description, save, remove the edit, save, submit to review. 15 minutes later the subscriptions are again available in my app and it works as expected. This is definitely not the expected behavior and submitting the subscription edits every day is wasting the App Review Team's time as well as mine. I contacted Apple Developer Support but I didn't get any reply back (at least yet). I am not the only one experiencing this. I found a friend online who has the exact same issue, and is able to temporarily solve it by making an edit to the subscription description as well. So far it has been a huge headache, and we are losing customers this way. Please if anyone has experience with this problem, or has any suggestions, they will be greatly appreciated. Thank you so much, Tomas
Replies
33
Boosts
19
Views
7.3k
Activity
4d
AppStore.sync() not restoring purchases
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.
Replies
3
Boosts
0
Views
1.8k
Activity
4d
Tauri 2 macOS app cannot be opened: "contains malware" with Apple Development Certificate, or notarization blocked with Apple Distribution Certificate for IAP testing
Hi everyone, I'm developing a macOS app using Tauri 2. I need to test In-App Purchases (IAP), which requires running the actual built .app (it doesn't work properly in the development environment).I tried two approaches: Apple Development Certificate (free account): After cargo tauri build, the app "Mind Elixir.app" shows this error when I try to open it: “Mind Elixir.app” was not opened because it contains malware. This action did not harm your Mac. Apple Distribution Certificate: The app builds successfully, but because it is not notarized, Gatekeeper completely blocks it and I cannot open it at all. I just want to test IAP locally on my own Mac during development. Is there any other way to get a properly signed and runnable .app for testing IAP? Any help or workaround would be greatly appreciated. Thanks!
Replies
1
Boosts
0
Views
428
Activity
4d
The In-App Purchase Not Displayed in Released Version
I can confirm that: The In-App Purchase has been displayed in TestFlight. In the "App Store Connect/App/In-App Purchases", all the products has been "Approved". Inside of the In-App Purchase Product setting, the availability and Price are also correct. In one Build (same version), all the products has been selected. Off Course, that is why the products has been approved. In the "Business", all items' statuses are "Active", including Agreements, Bank Accounts, Tax Forms, Compliance. It's displayed well in the TestFlight and Debugging with Real-Device Simulation. How can I fix this issue? Code or Configuration?
Replies
2
Boosts
1
Views
150
Activity
6d
WatchOS IAP -- why is this such a mess?
Need to vent a bit before relaxing for Christmas... WatchOS IAP using Storekit 2 is such a mess...is nobody actually using this or does Apple just not care for the user experience here? Lots of users experience after the purchase confirmation double tap on the side button an instant return to the purchase screen with nothing actually happening. No error message whatsoever. There is just one remedy: users need to unpair and re-pair their watch, including restoring a backup and setting up their wallet again. Nobody really wants to do this, or doesn't believe me and think this is just typical support BS, because their watch is paired and most things just work as they expect. And it turns away a customer, often leaving a bad review. And I can't do anything about it. Other errors in the purchase process are reported, but like "process interrupted" in case the payment is not setup correctly (credit car no longer valid or sth.). How should the user know? There must be better ways of letting him know what exactly the problem is. You need to implement a "Restore Purchase" function, otherwise you're not passing the review. But it really asks every time for the AppStore password, and users with crazy passwords -- that they rightfully should have! -- have almost no chance of typing them successfully on the tiny AW keyboard. Why is it not also just a side button double tap like for purchase? At the very least you would need access to the keychain PWs or allow pasting of sth. copied on the paired iPhone. Promo Codes for IAP on AW-only apps just don't work. AW has no redemption at all, and on the iPhone the AppStore will try to talk to a companion app (which AW-only doesn't have) and the end up in a dead-end installation effort. This all feels like never really tested in the field, and people are of course blaming the 3rd party dev. for all these issues. And opening a ticket is just leading nowhere -- at best it's closed after months with the hint "duplicate" but w/o any chance for me to see that one that they then actually work on and track progress. It's all so frustratingly broken...
Replies
2
Boosts
0
Views
243
Activity
1w
StoreKit Subscription not discoverable in App Review (PLEASE HELP!))
I'm in the final phase before app approval and I'm struggling to implement store kit for in app purchases. I'm using base 44 and really need help finishing this set up. I have an iOS app (SwiftUI + WKWebView) with auto-renewable subscriptions using StoreKit and SubscriptionStoreView. The app was rejected under Guideline 3.1 because payments were defaulting to Stripe instead of storekit. What’s already done: Subscriptions created in App Store Connect (monthly + annual) SubscriptionStoreView implemented and visible in app WKWebView bridge triggers native StoreKit paywall Sandbox test account created Stripe fully disabled on iOS What I need: Verify StoreKit implementation is App Review compliant Confirm subscriptions are correctly attached to the app version Ensure paywall is discoverable by App Review Help me pass App Review (reply guidance + final checks) This is a short engagement (1–3 hours). Looking for someone with real StoreKit + App Review experience + Base44 knowledge.
Replies
1
Boosts
0
Views
113
Activity
1w
In-App Purchase works in TestFlight but fails during App Review (Apple can't complete purchase)
Hello, I have an issue with In-App Purchases during App Review. In TestFlight and Sandbox, everything works correctly: Products are loaded Subscriptions are visible Purchase completes successfully However, Apple reports that the purchase fails during review. My subscriptions are: Created and active in App Store Connect Attached to the app version Paid Apps Agreement accepted I also added all required information (price, duration, EULA, privacy policy). Why would purchases work in TestFlight but fail during App Review? Thank you for your help.
Replies
1
Boosts
0
Views
48
Activity
1w
StoreKit / IAP: Product WAITING_FOR_REVIEW — works locally with production RevenueCat key + Apple Sandbox, fails during App Review
Hello, I need guidance on App Store Connect product state vs StoreKit behavior during App Review. Stack: iOS app (Expo / React Native), subscriptions via RevenueCat + StoreKit. Bundle ID matches App Store Connect. RevenueCat API keys — what I’ve verified locally: With the production RevenueCat API key (iOS appl_..., same as the submitted build), everything works on local device but not when I download it from TestFlight. I have also tested with RevenueCat’s sandbox / test API key (the separate key intended for sandbox/testing). That setup works as well — I can load offerings and complete test purchases the same way What RevenueCat (SDK / dashboard health) reports: Product monthly is configured in RevenueCat. Warnings that products aren’t approved in App Store Connect yet and that the default offering has configuration issues. Apple’s product state: WAITING_FOR_REVIEW. The SDK still states that test purchases are possible. What App Review reports: After onboarding a new business account, “Activate subscription” leads to an error (plans don’t load / purchase path fails). Review suggested an app code issue. Why this is confusing: Locally, both RevenueCat key modes I tried (production and sandbox/test) work with Apple Sandbox on the device. The submitted build uses the production RevenueCat key. Review still sees a failure. Questions: For IAP in WAITING_FOR_REVIEW, should App Review always use an Apple Sandbox account to test subscriptions until the product is fully approved? Is it documented that StoreKit may not return products during review without Sandbox while the product remains WAITING_FOR_REVIEW? Has anyone else seen “works locally (prod + sandbox RevenueCat keys + Apple Sandbox) but Review fails” with the same WAITING_FOR_REVIEW state? Thanks for any official documentation or similar threads.
Replies
1
Boosts
0
Views
64
Activity
1w
External Purchase Link Entitlement RU - 500 Internal Server Error
Hello, We are a Russian developer attempting to enable the StoreKit External Purchase Link Entitlement for our app. According to Apple’s documentation, this entitlement is required to provide external purchase links in Russia. However, the official request page consistently returns a 500 Internal Server Error: https://developer.apple.com/contact/request/storekit-external-entitlement-ru Steps we tried: Different browsers (Safari, Chrome, Edge) Different networks and VPNs Multiple developer accounts The error persists in all cases. We have already opened a support case (Case #102864703080), but Developer Support advised us to post here for technical guidance. Questions: Is there an alternative way to submit the entitlement request while the page is unavailable? Can Apple confirm whether this is a known issue and if a fix is in progress? Are manual submissions via the general Contact Us form accepted for this entitlement? Screenshots of the error are attached. Thank you in advance for any guidance.
Replies
0
Boosts
0
Views
28
Activity
1w
In-App Purchase works in Sandbox & TestFlight, but App Review reports “No action on Subscribe button”
Hello everyone, I’m facing a persistent App Store rejection under Guideline 2.1(b) – App Completeness, related to In-App Purchases, and I’m unable to reproduce the issue on my end. Issue reported by Apple Review Apple Review team reports: “No action occurred when we attempted to buy the subscription.” Device: iPad Air 11-inch (M3) OS: iPadOS 26.4.1 What I have verified from my side I have thoroughly tested the subscription flow under multiple scenarios: Sandbox Testing Using sandbox test accounts Product loads correctly Purchase flow completes successfully Apple payment sheet appears properly TestFlight Testing Installed app via TestFlight Logged in with real Apple ID (Beta tester) Successfully completed subscription purchase Device Testing Tested on multiple iPhones Tested on iPad as well Purchase flow works correctly on all devices App Store Connect Configuration Paid Apps Agreement → Active Banking & Tax → Completed (no pending warnings) In-App Purchase status → “In Review” Product is correctly configured and attached to app What Apple is experiencing Based on their feedback and screenshots: Subscription screen loads correctly Product price is visible When tapping “Subscribe Now” → no action occurs No error message, no purchase sheet Is there a recommended workaround or reviewer instruction to avoid this deadlock? Any insights or real-world experience would be greatly appreciated. Thanks in advance.
Replies
0
Boosts
0
Views
60
Activity
1w
StoreKit / react-native-iap – Payment deducted but no transaction returned (India UPI users)
Hello, We are facing an issue with In-App Purchases (subscriptions) in two iOS apps built with React Native + react-native-iap. Issue Some users receive the error: E_CONNECTION_CLOSED during the purchase flow. However: The payment is successfully deducted via the App Store. The subscription appears in the user's Apple ID subscription list. But on our side: The app does not receive the StoreKit transaction callback No receipt or transaction ID is delivered Our backend cannot validate the purchase. Restore Purchases When affected users try Restore Purchases, StoreKit returns: No purchases found even though the subscription is visible in their Apple ID. Most affected users are from India, and many payments are made via UPI through App Store billing. Has anyone experienced a case where: *the user is charged *the subscription exists in Apple ID *but StoreKit never returns the transaction or receipt? Any suggestions on how to recover these transactions would be greatly appreciated. Thanks!
Replies
1
Boosts
0
Views
155
Activity
1w