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

Locate the In-App Purchases and Subscriptions Section in App Store Connect
App Store Connect displays the In-App Purchases and Subscriptions section on your app's version page when your app has an In-App Purchase or subscription with a Ready to Submit status. To locate the In-App Purchases and Subscriptions section: In Apps, select the app you want to view. In the sidebar, select the app version. On the version page, scroll down to the In-App Purchases and Subscriptions section. For more information, see Submit an In-App Purchase.
0
0
2.4k
Jun ’26
In-App Purchase Resources
General: Forums topic: StoreKit Forums tag: In-App Purchase App Store Pathway Simple and safe In-App Purchases Auto-renewable subscriptions In-App Purchase documentation Getting started with In-App Purchase using StoreKit views documentation Supporting business model changes by using the app transaction documentation Testing at all stages of development with Xcode and the sandbox documentation App Store Server Notifications documentation App Store Server API documentation Simplifying your implementation by using the App Store Server Library documentation TN3185: Troubleshooting In-App Purchases availability in Xcode technote TN3186: Troubleshooting In-App Purchases availability in the sandbox technote TN3188: Troubleshooting In-App Purchases availability in the App Store technote Understanding StoreKit workflows sample code Implementing a store in your app using the StoreKit API sample code What’s new in StoreKit and In-App Purchase video
0
0
1.4k
Jun ’26
How to cancel Auto-renewable subscription bought in TestFlight?
I've read several topics on cancelling subscriptions in sandbox environment, but it seems to me that it could not be applied to TestFlight. I can cancel sandbox subscriptions through Settings > App Store > Sandbox account But since TestFlight does not use sandbox account I cannot cancel a sub from there. Also, TF purchase does not appear in the list of regular subscriptions (Settings > Profile > Media & Purchases). So my question is: is there any way to manually cancel auto-renewable subscription bought in TestFlight build of the app?
11
7
9.3k
1d
Rejected for non-existent elements in in-app purchases and subscriptions
I have an ongoing rejection for having non-existent promotional images within in-app purchases and subscriptions in my submissions. The minute the app goes into review it is rejected over and over as if the reviewer doesn't care to review the changes within the in-app records and subscriptions along with the translations. The display names and descriptions are unique for each tier. This has been going for over a week and there are no more changes that I can make other than going from freemium to fully paid model and forget the freemium model. Can someone from the App Review team look into this? Thanks.
0
0
48
1d
In-App Purchase product not returned by StoreKit despite complete, correct configuration
App name: Hold My Bouquet Bundle ID: com.holdmybouquet.app App Store Connect App ID: 6807080553 In-App Purchase Product ID: com.holdmybouquet.app.page_unlock (Non-Consumable, £3.99) Our app was rejected on Guideline 2.1 because the reviewer could not complete this in-app purchase. Since the rejection, we have verified and corrected every configuration item we can control, but the purchase still fails identically in sandbox testing on a physical device. Confirmed correct: Paid Applications Agreement: Active com.holdmybouquet.app.page_unlock: status "Ready to Submit," Cleared for Sale, pricing and availability set Bundle ID matches exactly across Xcode, App Store Connect, and our purchase provider (RevenueCat) Product ID matches exactly, no typos or case mismatches Sandbox tester account verified and signed in on-device (Settings → Developer → Sandbox Account) No local StoreKit Configuration file overriding real data (confirmed "None" in the Xcode scheme) To rule out our purchase provider entirely, we bypassed it and called Apple's native StoreKit 2 API directly from the app: let products = try await Product.products(for: ["com.holdmybouquet.app.page_unlock"]) This also returns zero products, with no error — confirming the issue is not a third-party SDK integration problem. Has anyone seen this before, or can anyone from Apple advise what else to check? We are otherwise ready to resubmit for review.
1
0
72
2d
Sandbox allows free trial again on resubscribe to the same subscription
Title: Sandbox allows free trial again on resubscribe to the same subscription Hi everyone, I'm testing an auto-renewable subscription using App Store Connect with a Sandbox tester (not a local StoreKit configuration file). My subscription has an introductory free trial configured. Scenario: Purchase the subscription for the first time using a Sandbox Apple ID. The user receives the introductory free trial as expected. Let the subscription expire. Purchase the same subscription product again using the same Sandbox Apple ID. I receive an App Store Server Notification with Notification Type = RESUBSCRIBE, and the transaction appears to have a price of 0, making it look like the user received another free trial. From Apple's documentation, my understanding is that an introductory offer can only be redeemed once per subscription group per Apple ID. Based on that, I expected the second purchase to be charged immediately rather than receive another free trial. My questions are: Is this expected behavior in the Sandbox environment? Does Sandbox sometimes allow introductory offers to be redeemed multiple times for testing? Or am I misinterpreting the RESUBSCRIBE notification and the $0 transaction? I did not intentionally reset the Sandbox tester's introductory offer eligibility, and I'm purchasing the same product in the same subscription group with the same Sandbox Apple ID. Has anyone observed this behavior or can clarify whether this is expected in Sandbox versus production? Thanks!
1
0
340
2d
TestFlight 沙盒中 StoreKit 2 的 `Product.products(for:)` 对两个非消耗型内购持续返回空数组
大家好,我正在排查一个 TestFlight 沙盒环境中的 StoreKit 2 商品加载问题,希望获得建议。 一、现象 iOS App 通过 TestFlight 安装(Build 4)后,使用 Product.products(for:) 请求两个非消耗型内购项目。调用不会抛出错误,但始终返回空数组,因此购买页没有任何可购买商品。 products = try await Product.products(for: [ "com.shidan.qieting.plus.trial.7day", "com.shidan.qieting.plus.lifetime" ]).sorted { $0.id < $1.id } 两个 Product ID 分别为: Product ID 类型 价格 App Store Connect 状态 com.shidan.qieting.plus.trial.7day 非消耗型 Tier 0 / US$0.00 可供审核 com.shidan.qieting.plus.lifetime 非消耗型 US$5.99 可供审核 二、日志 在 TestFlight App 冷启动后,诊断日志记录: 2026-09-03T08:12:08Z [settings] plus products loaded: trialAvailable=false, lifetimeAvailable=false 打开购买页时再次调用,结果仍然为空。没有捕获到 StoreKit 异常,也没有购买流程报错。 三、系统级沙盒验证结果 为排除 App UI 和 StoreKit 商品加载代码的影响,我们还使用同一开发团队创建的 Sandbox Apple Account,在 iOS 的“设置 > 开发者 > Sandbox Apple Account > 管理 > Test Transactions”中直接测试: Bundle ID:com.shidan.qieting Product ID:com.shidan.qieting.plus.lifetime 系统提示:“提供的产品 ID 或套装 ID 无效”。该工具不经过 App 内的购买页或 Product.products(for:) 结果,仍无法识别这组 Bundle ID 与 Product ID。 四、已完成核验 代码中的 Product ID 与 App Store Connect 中的 Product ID 完全一致。 Release Bundle ID 与 App Store Connect App Record 一致,均为 com.shidan.qieting。 App ID 为显式 ID,不是 wildcard App ID。 Certificates, Identifiers & Profiles 中已启用 In-App Purchase capability;Xcode Target 也已启用,Xcode Cloud 使用自动签名。 TestFlight 使用 Archive 构建;共享 Scheme 的 ArchiveAction 没有 StoreKit Configuration 文件。本地 .storekit 文件只用于 Xcode Run/Test,本身不影响 Archive/TestFlight。 两个项目均已设置价格、175 个 App Store 地区可售,以及简体中文、繁体中文、英语本地化。 最后一次修改 IAP 元数据已经超过 48 小时。 Paid Apps Agreement、税务信息和银行信息均为有效/正在使用中。 尚未提交 App 或 IAP 审核;理解为 TestFlight 沙盒测试不应以提交审核为前提。 欧盟《数字服务法》(DSA)交易商合规信息仍在审核中;但该要求针对欧盟 App Store 产品页的交易商信息。Apple 官方说明中,单独通过 TestFlight 分发不属于在欧盟 App Store 以交易商身份分发,因此这不应影响 TestFlight 沙盒或 Test Transactions。 五、想请教 在上述条件已确认、Product.products(for:) 不报错却返回 [] 的情况下,是否还有容易遗漏的 App Store Connect、沙盒、签名或 TestFlight 配置? 是否有人遇到过“所有 Product ID 均正确、商品完整且全球可售,但 TestFlight 沙盒始终返回空数组”的情况?如果这是 Apple 沙盒端的已知延迟或异常,有什么进一步的排查或反馈渠道? 我可以按需要补充已打码的 App Store Connect 配置截图和完整诊断日志。谢谢。
3
0
335
3d
New iOS App stuck at Ready for Review
I am new and submitted an app which got reviewed twice over the last 2 weeks. I tried adding IAP in the 2nd submission but it didn't get attached. I created 3rd submission and the status says Ready for Review. The IAP says (Unable to Submit for Review To submit your items for review, add an app version for the selected platform.). There is no option to cancel the submission and restart. Previous review cycles showed "Waiting for Review" and "In Review" before I got response on reasons for rejecting the app submission. But now it appears to be stuck. I requested email support. Is there any solution that I am missing? Thanks for your help! Raja
0
0
50
3d
In-App Purchase key returns 401 (4010000) on Advanced Commerce API but 200/404 on App Store Server API
Environment: Sandbox Bundle ID: com.fosssocial.app Key ID: L7DZYHGM62 Issuer ID: cf1f7bc7-452f-4bb8-a925-31ca29175fac Summary Our In-App Purchase key is accepted by the App Store Server API but rejected by the Advanced Commerce API, using the exact same bearer token. This appears to be an authorization grant that was never applied to the key, rather than a signing or request-format problem on our side. Reproduction — one token, two API families GET /inApps/v1/subscriptions/1 -> 404, errorCode 4040010 (token ACCEPTED, resource simply not found) POST /advancedCommerce/v1/subscription/changeMetadata/1 -> 401, errorCode 4010000 (token REJECTED) Same JWT, same key, issued seconds apart. A 401 on one family and a 404 on the other isolates this to key authorization. On-device symptom A signed SubscriptionCreateRequest passed to StoreKit as advancedCommerceData fails with StoreKitError.unknown / "Unable to Complete Request". No payment sheet appears and no InvalidRequestError is returned, so there is no field-level error to act on. What we have already verified JWS header: alg ES256, kid, typ JWT Claims: iss, iat, aud "advanced-commerce-api", bid, nonce, request No exp claim (per Apple's documentation) The request claim uses standard padded base64, not base64url Key ID and .p8 file confirmed to be a matching pair Key regenerated after receiving the Advanced Commerce access-granted email; the 401 is unchanged AdvancedCommerceProduct(id:) resolves successfully on device, which confirms the PRODUCT has Advanced Commerce access Question Does the In-App Purchase key require a separate authorization for the Advanced Commerce API beyond the product-level access we were granted? If so, how is that applied to an existing key?
0
0
47
3d
restorePurchases() returns zero transactions for Apple ID with confirmed active subscription
Hi all — hoping someone has run into this. restorePurchases() (via Flutter's in_app_purchase/in_app_purchase_storekit plugin, which wraps StoreKit) consistently returns zero transactions for an Apple ID that has a confirmed, currently active auto-renewable subscription to my app. Evidence the subscription is genuinely active: Settings → [Apple ID] → Subscriptions shows the subscription as active for this Apple ID. Independently confirmed via the App Store Server API (GET /inApps/v1/subscriptions/{originalTransactionId}) that Apple's servers currently recognize this subscription. Details: originalTransactionId: 2000000099299646, original purchase mid-2022 The App Store Server API's "latest transaction" for this ID resolves to environment: Sandbox, even though this Apple ID has also made real Production purchases over time — wondering if mixed Sandbox/Production history on one Apple ID could be affecting restorePurchases()'s results Tested on a real device, iOS [version], with and without an explicit SKPaymentQueueDelegate set — no difference in behavior Would appreciate any insight — thanks!
1
0
402
3d
WKWebView IAP message handler works in Simulator but not TestFlight
Hi, I’m having an issue with an in-app purchase implementation using StoreKit and a WKWebView. The app uses a WKWebView with a WKScriptMessageHandler registered with the name "iap" to communicate between JavaScript and the native Swift code. The implementation works correctly when running the app through Xcode Simulator. The IAP buttons trigger the expected native code and the bridge functions correctly. However, when I install the same/latest build through TestFlight, the IAP functionality does not work as expected. The buttons/JavaScript-to-native communication do not appear to trigger the same way they do in the Simulator. The IAP products and configuration have been set up in App Store Connect. I have already checked the implementation and confirmed that the same code works when running from Xcode. Could there be any difference between Simulator and TestFlight regarding: StoreKit sandbox/TestFlight behaviour Entitlements or signing App Store Connect configuration WKWebView/WKScriptMessageHandler behaviour JavaScript-to-native communication in a TestFlight build Any required configuration for IAP testing through TestFlight I would appreciate any guidance on what I should check to determine why the "iap" WKScriptMessageHandler works in Simulator but not in TestFlight. Thanks.
0
0
185
6d
StoreKit Sandbox returns 0 products after TN3186 checks — catalog association issue?
We are testing two auto-renewable subscriptions for a new iOS app. In Apple Sandbox, StoreKit 2 Product.products(for:) always returns an empty array. Legacy SKProductsRequest independently reports both identifiers as invalid. Environment: Physical iPhone, iOS 26.5 Xcode development build with automatic signing Storefront.current = USA (143441) canMakePayments = true No StoreKit Configuration file in the Run scheme Direct native StoreKit 2 diagnostics, without a third-party purchase SDK TN3186 checks completed: Explicit Bundle ID matches the App Store Connect app, installed app, and provisioning profile In-App Purchase is enabled for the App ID Developer membership, Paid Apps Agreement, banking, and tax are active One subscription group with monthly and yearly subscriptions is visible Pricing, localizations, and availability are configured Neither subscription is Rejected or Developer Action Needed The scheme is using real Sandbox data, not local StoreKit testing Results: StoreKit 2 batch query: rawCount = 0 SKProductsRequest: valid = []; both identifiers are invalid StoreKit 2 individual monthly query: 0 StoreKit 2 individual yearly query: 0 No exception; failure occurs during product discovery Related reports: https://developer.apple.com/forums/thread/839313 — TN3186 verified and USA storefront valid, but still 0 products; no replies https://developer.apple.com/forums/thread/841722 — Apple Commerce mentioned Rejected or Developer Action Needed states; ours have neither https://developer.apple.com/forums/thread/820656 — Apple DTS confirmed first subscriptions do not require review before Sandbox testing Apple Developer Support referred us to TN3186, and we verified every applicable item. The individual subscription detail route in App Store Connect also intermittently remains on a loading indicator although the group and both records are visible. Could an App Store Commerce or StoreKit engineer check whether the app-to-IAP catalog association is populated correctly on Apple's side, or advise an official escalation path to have the Sandbox catalog reprocessed? Exact account, app, product, device, email, and support-case identifiers are omitted from this public post and can be supplied privately through Apple Support or Feedback Assistant.
0
0
116
1w
TestFlight + Sandbox: consumable second purchase fails (DuplicateTransaction) on some devices, and product price sometimes returns USD — expected behavior, and recommended test setup?
We're testing In-App Purchases for our app distributed via TestFlight, using Sandbox Apple Accounts. We observe two device-dependent behaviors and have two questions. (App-specific details, including the bundle ID, are in our Feedback report FB24632077.) Observation 1 — Consumable second purchase fails with DuplicateTransaction on some devices The first purchase of a consumable succeeds and the transaction is finished. A second purchase of the same consumable then fails with PurchaseFailureReason.DuplicateTransaction ("This In-App Purchase has already been bought") on some devices. It correlates with sandbox session persistence: on devices where the purchase prompts for password only (e.g., iOS 26.x, iPadOS 18.4.1) the second purchase succeeds; on devices where it prompts for the account (email) + password every time (e.g., iOS 18.3.2, iPadAir2 15.6), the second purchase fails. The same Sandbox Apple Account behaves differently on different devices. An Ad Hoc (development-signed) build with the same account succeeds. Observation 2 — Product price sometimes returns USD instead of the storefront currency With the same Sandbox account (region: Japan), prices are shown in JPY on iOS 26.2 but in USD on iOS 18.3.2. The App Store app shows JPY, but SKProductsRequest / StoreKit 2 Product metadata returns USD. Question 1: Are these known Sandbox/TestFlight limitations? If so, what is the recommended way to reliably test repeat consumable purchases (and to get the correct storefront currency) in TestFlight across many devices and OS versions? Question 2: For TestFlight IAP testing, are there environmental differences between (A) using the device's real Apple ID (signed into Media & Purchases; automatic sandbox) and (B) signing out of Media & Purchases and using a Sandbox Apple Account — with respect to: reliability of repeat consumable purchases, authentication / session persistence (password-only vs account + password each purchase), storefront / currency resolution for product metadata, ability to clear purchase history? Which approach do you recommend for a consistent, reliable TestFlight IAP QA environment? Environment: TestFlight (App Store distribution), Sandbox tester region = Japan. (App-specific identifiers such as bundle ID are in our Feedback report FB24632077.) Repro: buy a consumable once (succeeds, finished) → buy the same product again → DuplicateTransaction on affected devices. Thanks!
0
0
98
1w
Subscriptions load in TestFlight sandbox but not during App Review — 2.1(b), third rejection
Our first submission has now been rejected under Guideline 2.1(b), with the message: "the in-app purchases do not load successfully." Each review was performed on an iPad Air 11-inch (M3) running iPadOS 26.6. The app sells only auto-renewable subscriptions. We cannot reproduce the failure, and we have verified every part of the configuration we can think of. WHAT WE VERIFIED (via the App Store Connect API, not just the UI) Two subscriptions in one group, state READY_TO_SUBMIT Product IDs exactly match what the app requests Available in 175 territories, including the United States Prices set, en-US localizations present for both products and for the group App review screenshots attached to both, state COMPLETE Both subscriptions are included in the review submission (READY_FOR_REVIEW) Paid Apps Agreement: Active. Bank account: Active. Tax forms: Active. WHAT WORKS On our own devices, installed via TestFlight (sandbox environment), the products load correctly and a purchase completes and activates as expected. This works on both a real Apple ID and a Sandbox Tester account. WHAT WE OBSERVED FROM THE REVIEW SESSION We use RevenueCat. Their server-side API returns our offering with both packages and the correct product identifiers, so the offering metadata is fine. Our backend also shows that the reviewer's session reached our servers and signed in successfully at the review timestamp, so the device had working network connectivity. That leaves StoreKit itself returning no products on the reviewer's device, which is what empties the offering. QUESTIONS Are there known conditions under which StoreKit returns no products in the App Review sandbox for subscriptions that are in "Ready to Submit" and are attached to the same submission as the binary? For an app that has never been approved, is product loading during review handled differently from a normal sandbox session on a released app? Is there any way to obtain diagnostics from a review session, or to ask the reviewer for a screenshot of the failing screen? Replies in Resolution Center so far have only repeated the original rejection text. Is there anything specific to iPadOS 26.6 that could affect StoreKit 2 product lookups? For the next submission we have added a timeout and automatic retries around the product lookup, plus a visible retry control instead of a spinner, in case the failure is a transient cold-start timeout. But we would rather understand the actual cause than keep guessing. Any pointers appreciated.
0
0
123
1w
Same issue: subscription group stuck on "must be submitted with a subscription of the same group" despite correct config
I'm having the exact same issue. My app has 2 subscription groups, each with 2 auto-renewable subscriptions (monthly and yearly duration) — 4 products total, all in "Ready to Submit" status. The error I keep getting when trying to submit the first group together with the app version is: "New subscription groups must be submitted with an auto-renewable subscription of that same group" What I've already verified/tried: Full metadata on each subscription: reference name, pricing, localizations (display name + description) in two languages, review screenshot Added the individual subscription products (not the group) to the submission draft from each product's own page Draft correctly shows the app version + all subscriptions grouped together under "Suscripciones (4)" Set both durations (monthly/annual) to the same subscription level within each group, as suggested in another thread — no change Recreated the subscriptions from scratch with entirely new Product IDs — same error Tried different browsers, incognito mode, hard refresh Paid Applications Agreement is Active, no pending agreements The error persists regardless of what I try. Has anyone found what actually resolved this beyond the subscription level fix? Or is this something only Apple can unblock from their side?
1
0
123
1w
Increased StoreKit errors “Unable to Complete Request”
Since January 28, 2026, we’ve noticed an increase in StoreKit-related errors during purchase flows. Specifically, we’re seeing a spike in errors reported as “Unable to Complete Request”, categorized as unknown StoreKit errors. This correlates with a noticeable drop in the overall purchase success rate. A few observations: The issue is not limited to the latest app version, it also affects older versions. It appears to occur only on iOS 17+. The impact seems country-specific: some regions are affected more heavily, while others show no significant change compared to previous days. At the moment, there are no related incidents reported on Apple’s System Status page. Given these symptoms, this looks like a potential StoreKit / Apple API issue, but we haven’t found any official confirmation yet. Has anyone else observed similar StoreKit behavior recently on iOS 17+? Any insights or known issues would be greatly appreciated.
5
1
1.2k
1w
Product.products(for:) never returns — approved subscriptions, live app, all agreements active
My app is live on the App Store and all three auto-renewable subscriptions are Approved, but StoreKit 2 never answers on device. Product.products(for:) does not settle — no products, no error, no throw. I let it run 30 seconds. Storefront.current behaves the same way, so this is not a product-id or catalogue problem. StoreKit is not reaching a store at all. Already ruled out: Product ids app.steady.pro.weekly / .monthly / .yearly, all Approved; subscription group Approved Bundle id app.steady.calm, matches App Store Connect exactly Paid Applications Agreement Active, bank and tax forms Active In-App Purchase capability enabled on the App ID and present on the App Store provisioning profile Two iPhones, two Apple Accounts, storefronts AZ and TR, three networks A clean build run directly from Xcode on a different Mac — identical silence Also reproduced through a third-party purchases SDK before reverting to plain StoreKit 2, so it is not my bridge layer This has never worked once, on any device or account, since launch. It is not intermittent. Open with Apple: Developer Support case 20000143122321, Feedback FB24488724 with sysdiagnose attached. Has anyone seen Storefront.current hang like this? Is there an account-level state that can stop StoreKit from resolving a storefront even when the app and products are approved?
1
0
147
1w
Clarification about the new EU terms effective October 1, 2026.
I'm looking for clarification on how the new EU business terms apply to a code-redemption flow. My app sells self-guided digital audio tours via Apple In-App Purchase. I would also like to sell the same tours independently through third-party travel marketplaces (general tour and activity booking platforms). The proposed flow: The app would not advertise, mention, or link to these marketplaces in any way. After purchasing a tour externally, an EU customer receives a booking code. In the app, the customer taps "Enter a booking code," types the code, and taps "Fetch Tour." The app verifies the booking against our server and unlocks the purchased tour, with no additional payment taken. The same tours remain available for direct purchase through Apple In-App Purchase. App Review has previously rejected this type of code-redemption functionality under the In-App Purchase rules. Two questions: Is this exact flow now permitted on EU storefronts under Attachment 14, using the StoreKit External Purchase or External Purchase Link entitlement? Do these externally initiated sales need to be reported to Apple, or incur an Apple commission, given that the app contains no external offer, marketplace name, purchase instructions, or actionable link? Thanks in advance for any guidance.
0
0
146
1w
Sandbox testing - Clear Purchase History
Hi, Overview I have an app for which I have created a sandbox account. When I try to clear purchase history it doesn't work, it still shows the in-app purchase items (non-consumable in-app purchases) as purchased. I have tied tried the following ways, but none of them work. Any help on this would be much appreciated! Attempt 1: Go to https://appstoreconnect.apple.com/ Users and Access > Sandbox Check sandbox account > Tap Clear Purchase History button Attempt 2: Go to the iPhone > Settings > Developer > Sandbox Apple Account Tap on account > Manage > Clear Purchase History Attempt 3: Sign out of Sandbox account and sign back in Attempt 4: Delete app and re-run app from Xcode
5
4
779
1w
Apple In-App Purchase availability.
Hello, I am a developer based in Somalia and I have recently enrolled in the Apple Developer Program. I am planning to build an iOS app exclusively for users in Somalia. The app will offer premium digital features, and I would like to use WaafiPay, a local Somali payment provider that supports mobile-money payments such as EVC Plus, ZAAD and SAHAL. Somalia does not have an Apple App Store storefront or Apple In-App Purchase availability. Before I start development, I would like to confirm whether an app distributed to users in Somalia can use WaafiPay to process payments for premium digital features directly inside the app. If this is permitted, please let me know whether I need any special entitlement, approval, or implementation requirements. Thank you.
0
0
129
1w
Guideline 3.1.3(b) — showing a web-only B2B tier on iOS pricing page
We have a multiplatform SaaS app (iOS, Desktop). Individual plans are sold via IAP on iOS. We also offer a B2B multi-seat plan that's only sold through our website (per-seat billing, admin provisioning, etc.). On our iOS pricing page, we want to show all plans — including the B2B one — so users can see the full picture. The B2B plan would just show features and a starting price with a label like "Managed through our desktop platform." No purchase button, no link, no redirect. Only the individual plans would have IAP subscribe buttons. Three questions: Does showing pricing/features for a plan that can't be purchased in-app count as "steering" under 3.1.3? Is a static label like "Managed through our desktop platform" considered a call to action if there's no link or button? Would a "Contact Sales" form (just collects an email, follow-up happens outside the app) be a safer approach? We did check with Apple Developer Support (Aug 2026) and were told this should be fine, but want to hear from anyone who's shipped something similar before we submit. Thanks.
0
0
60
1w
Locate the In-App Purchases and Subscriptions Section in App Store Connect
App Store Connect displays the In-App Purchases and Subscriptions section on your app's version page when your app has an In-App Purchase or subscription with a Ready to Submit status. To locate the In-App Purchases and Subscriptions section: In Apps, select the app you want to view. In the sidebar, select the app version. On the version page, scroll down to the In-App Purchases and Subscriptions section. For more information, see Submit an In-App Purchase.
Replies
0
Boosts
0
Views
2.4k
Activity
Jun ’26
In-App Purchase Resources
General: Forums topic: StoreKit Forums tag: In-App Purchase App Store Pathway Simple and safe In-App Purchases Auto-renewable subscriptions In-App Purchase documentation Getting started with In-App Purchase using StoreKit views documentation Supporting business model changes by using the app transaction documentation Testing at all stages of development with Xcode and the sandbox documentation App Store Server Notifications documentation App Store Server API documentation Simplifying your implementation by using the App Store Server Library documentation TN3185: Troubleshooting In-App Purchases availability in Xcode technote TN3186: Troubleshooting In-App Purchases availability in the sandbox technote TN3188: Troubleshooting In-App Purchases availability in the App Store technote Understanding StoreKit workflows sample code Implementing a store in your app using the StoreKit API sample code What’s new in StoreKit and In-App Purchase video
Replies
0
Boosts
0
Views
1.4k
Activity
Jun ’26
I need help/support: its my first ap
Hey, I am trying to submit but I keep getting these 2 errors :-) Unable to Submit for Review Your auto-renewable subscription must be submitted with its subscription group. To submit your items for review, add an app version for the selected platform. Problem is I cannot find where to do this. The UI is appaling.
Replies
5
Boosts
0
Views
463
Activity
2h
How to cancel Auto-renewable subscription bought in TestFlight?
I've read several topics on cancelling subscriptions in sandbox environment, but it seems to me that it could not be applied to TestFlight. I can cancel sandbox subscriptions through Settings > App Store > Sandbox account But since TestFlight does not use sandbox account I cannot cancel a sub from there. Also, TF purchase does not appear in the list of regular subscriptions (Settings > Profile > Media & Purchases). So my question is: is there any way to manually cancel auto-renewable subscription bought in TestFlight build of the app?
Replies
11
Boosts
7
Views
9.3k
Activity
1d
Rejected for non-existent elements in in-app purchases and subscriptions
I have an ongoing rejection for having non-existent promotional images within in-app purchases and subscriptions in my submissions. The minute the app goes into review it is rejected over and over as if the reviewer doesn't care to review the changes within the in-app records and subscriptions along with the translations. The display names and descriptions are unique for each tier. This has been going for over a week and there are no more changes that I can make other than going from freemium to fully paid model and forget the freemium model. Can someone from the App Review team look into this? Thanks.
Replies
0
Boosts
0
Views
48
Activity
1d
In-App Purchase product not returned by StoreKit despite complete, correct configuration
App name: Hold My Bouquet Bundle ID: com.holdmybouquet.app App Store Connect App ID: 6807080553 In-App Purchase Product ID: com.holdmybouquet.app.page_unlock (Non-Consumable, £3.99) Our app was rejected on Guideline 2.1 because the reviewer could not complete this in-app purchase. Since the rejection, we have verified and corrected every configuration item we can control, but the purchase still fails identically in sandbox testing on a physical device. Confirmed correct: Paid Applications Agreement: Active com.holdmybouquet.app.page_unlock: status "Ready to Submit," Cleared for Sale, pricing and availability set Bundle ID matches exactly across Xcode, App Store Connect, and our purchase provider (RevenueCat) Product ID matches exactly, no typos or case mismatches Sandbox tester account verified and signed in on-device (Settings → Developer → Sandbox Account) No local StoreKit Configuration file overriding real data (confirmed "None" in the Xcode scheme) To rule out our purchase provider entirely, we bypassed it and called Apple's native StoreKit 2 API directly from the app: let products = try await Product.products(for: ["com.holdmybouquet.app.page_unlock"]) This also returns zero products, with no error — confirming the issue is not a third-party SDK integration problem. Has anyone seen this before, or can anyone from Apple advise what else to check? We are otherwise ready to resubmit for review.
Replies
1
Boosts
0
Views
72
Activity
2d
Sandbox allows free trial again on resubscribe to the same subscription
Title: Sandbox allows free trial again on resubscribe to the same subscription Hi everyone, I'm testing an auto-renewable subscription using App Store Connect with a Sandbox tester (not a local StoreKit configuration file). My subscription has an introductory free trial configured. Scenario: Purchase the subscription for the first time using a Sandbox Apple ID. The user receives the introductory free trial as expected. Let the subscription expire. Purchase the same subscription product again using the same Sandbox Apple ID. I receive an App Store Server Notification with Notification Type = RESUBSCRIBE, and the transaction appears to have a price of 0, making it look like the user received another free trial. From Apple's documentation, my understanding is that an introductory offer can only be redeemed once per subscription group per Apple ID. Based on that, I expected the second purchase to be charged immediately rather than receive another free trial. My questions are: Is this expected behavior in the Sandbox environment? Does Sandbox sometimes allow introductory offers to be redeemed multiple times for testing? Or am I misinterpreting the RESUBSCRIBE notification and the $0 transaction? I did not intentionally reset the Sandbox tester's introductory offer eligibility, and I'm purchasing the same product in the same subscription group with the same Sandbox Apple ID. Has anyone observed this behavior or can clarify whether this is expected in Sandbox versus production? Thanks!
Replies
1
Boosts
0
Views
340
Activity
2d
TestFlight 沙盒中 StoreKit 2 的 `Product.products(for:)` 对两个非消耗型内购持续返回空数组
大家好,我正在排查一个 TestFlight 沙盒环境中的 StoreKit 2 商品加载问题,希望获得建议。 一、现象 iOS App 通过 TestFlight 安装(Build 4)后,使用 Product.products(for:) 请求两个非消耗型内购项目。调用不会抛出错误,但始终返回空数组,因此购买页没有任何可购买商品。 products = try await Product.products(for: [ "com.shidan.qieting.plus.trial.7day", "com.shidan.qieting.plus.lifetime" ]).sorted { $0.id < $1.id } 两个 Product ID 分别为: Product ID 类型 价格 App Store Connect 状态 com.shidan.qieting.plus.trial.7day 非消耗型 Tier 0 / US$0.00 可供审核 com.shidan.qieting.plus.lifetime 非消耗型 US$5.99 可供审核 二、日志 在 TestFlight App 冷启动后,诊断日志记录: 2026-09-03T08:12:08Z [settings] plus products loaded: trialAvailable=false, lifetimeAvailable=false 打开购买页时再次调用,结果仍然为空。没有捕获到 StoreKit 异常,也没有购买流程报错。 三、系统级沙盒验证结果 为排除 App UI 和 StoreKit 商品加载代码的影响,我们还使用同一开发团队创建的 Sandbox Apple Account,在 iOS 的“设置 > 开发者 > Sandbox Apple Account > 管理 > Test Transactions”中直接测试: Bundle ID:com.shidan.qieting Product ID:com.shidan.qieting.plus.lifetime 系统提示:“提供的产品 ID 或套装 ID 无效”。该工具不经过 App 内的购买页或 Product.products(for:) 结果,仍无法识别这组 Bundle ID 与 Product ID。 四、已完成核验 代码中的 Product ID 与 App Store Connect 中的 Product ID 完全一致。 Release Bundle ID 与 App Store Connect App Record 一致,均为 com.shidan.qieting。 App ID 为显式 ID,不是 wildcard App ID。 Certificates, Identifiers & Profiles 中已启用 In-App Purchase capability;Xcode Target 也已启用,Xcode Cloud 使用自动签名。 TestFlight 使用 Archive 构建;共享 Scheme 的 ArchiveAction 没有 StoreKit Configuration 文件。本地 .storekit 文件只用于 Xcode Run/Test,本身不影响 Archive/TestFlight。 两个项目均已设置价格、175 个 App Store 地区可售,以及简体中文、繁体中文、英语本地化。 最后一次修改 IAP 元数据已经超过 48 小时。 Paid Apps Agreement、税务信息和银行信息均为有效/正在使用中。 尚未提交 App 或 IAP 审核;理解为 TestFlight 沙盒测试不应以提交审核为前提。 欧盟《数字服务法》(DSA)交易商合规信息仍在审核中;但该要求针对欧盟 App Store 产品页的交易商信息。Apple 官方说明中,单独通过 TestFlight 分发不属于在欧盟 App Store 以交易商身份分发,因此这不应影响 TestFlight 沙盒或 Test Transactions。 五、想请教 在上述条件已确认、Product.products(for:) 不报错却返回 [] 的情况下,是否还有容易遗漏的 App Store Connect、沙盒、签名或 TestFlight 配置? 是否有人遇到过“所有 Product ID 均正确、商品完整且全球可售,但 TestFlight 沙盒始终返回空数组”的情况?如果这是 Apple 沙盒端的已知延迟或异常,有什么进一步的排查或反馈渠道? 我可以按需要补充已打码的 App Store Connect 配置截图和完整诊断日志。谢谢。
Replies
3
Boosts
0
Views
335
Activity
3d
New iOS App stuck at Ready for Review
I am new and submitted an app which got reviewed twice over the last 2 weeks. I tried adding IAP in the 2nd submission but it didn't get attached. I created 3rd submission and the status says Ready for Review. The IAP says (Unable to Submit for Review To submit your items for review, add an app version for the selected platform.). There is no option to cancel the submission and restart. Previous review cycles showed "Waiting for Review" and "In Review" before I got response on reasons for rejecting the app submission. But now it appears to be stuck. I requested email support. Is there any solution that I am missing? Thanks for your help! Raja
Replies
0
Boosts
0
Views
50
Activity
3d
In-App Purchase key returns 401 (4010000) on Advanced Commerce API but 200/404 on App Store Server API
Environment: Sandbox Bundle ID: com.fosssocial.app Key ID: L7DZYHGM62 Issuer ID: cf1f7bc7-452f-4bb8-a925-31ca29175fac Summary Our In-App Purchase key is accepted by the App Store Server API but rejected by the Advanced Commerce API, using the exact same bearer token. This appears to be an authorization grant that was never applied to the key, rather than a signing or request-format problem on our side. Reproduction — one token, two API families GET /inApps/v1/subscriptions/1 -> 404, errorCode 4040010 (token ACCEPTED, resource simply not found) POST /advancedCommerce/v1/subscription/changeMetadata/1 -> 401, errorCode 4010000 (token REJECTED) Same JWT, same key, issued seconds apart. A 401 on one family and a 404 on the other isolates this to key authorization. On-device symptom A signed SubscriptionCreateRequest passed to StoreKit as advancedCommerceData fails with StoreKitError.unknown / "Unable to Complete Request". No payment sheet appears and no InvalidRequestError is returned, so there is no field-level error to act on. What we have already verified JWS header: alg ES256, kid, typ JWT Claims: iss, iat, aud "advanced-commerce-api", bid, nonce, request No exp claim (per Apple's documentation) The request claim uses standard padded base64, not base64url Key ID and .p8 file confirmed to be a matching pair Key regenerated after receiving the Advanced Commerce access-granted email; the 401 is unchanged AdvancedCommerceProduct(id:) resolves successfully on device, which confirms the PRODUCT has Advanced Commerce access Question Does the In-App Purchase key require a separate authorization for the Advanced Commerce API beyond the product-level access we were granted? If so, how is that applied to an existing key?
Replies
0
Boosts
0
Views
47
Activity
3d
restorePurchases() returns zero transactions for Apple ID with confirmed active subscription
Hi all — hoping someone has run into this. restorePurchases() (via Flutter's in_app_purchase/in_app_purchase_storekit plugin, which wraps StoreKit) consistently returns zero transactions for an Apple ID that has a confirmed, currently active auto-renewable subscription to my app. Evidence the subscription is genuinely active: Settings → [Apple ID] → Subscriptions shows the subscription as active for this Apple ID. Independently confirmed via the App Store Server API (GET /inApps/v1/subscriptions/{originalTransactionId}) that Apple's servers currently recognize this subscription. Details: originalTransactionId: 2000000099299646, original purchase mid-2022 The App Store Server API's "latest transaction" for this ID resolves to environment: Sandbox, even though this Apple ID has also made real Production purchases over time — wondering if mixed Sandbox/Production history on one Apple ID could be affecting restorePurchases()'s results Tested on a real device, iOS [version], with and without an explicit SKPaymentQueueDelegate set — no difference in behavior Would appreciate any insight — thanks!
Replies
1
Boosts
0
Views
402
Activity
3d
WKWebView IAP message handler works in Simulator but not TestFlight
Hi, I’m having an issue with an in-app purchase implementation using StoreKit and a WKWebView. The app uses a WKWebView with a WKScriptMessageHandler registered with the name "iap" to communicate between JavaScript and the native Swift code. The implementation works correctly when running the app through Xcode Simulator. The IAP buttons trigger the expected native code and the bridge functions correctly. However, when I install the same/latest build through TestFlight, the IAP functionality does not work as expected. The buttons/JavaScript-to-native communication do not appear to trigger the same way they do in the Simulator. The IAP products and configuration have been set up in App Store Connect. I have already checked the implementation and confirmed that the same code works when running from Xcode. Could there be any difference between Simulator and TestFlight regarding: StoreKit sandbox/TestFlight behaviour Entitlements or signing App Store Connect configuration WKWebView/WKScriptMessageHandler behaviour JavaScript-to-native communication in a TestFlight build Any required configuration for IAP testing through TestFlight I would appreciate any guidance on what I should check to determine why the "iap" WKScriptMessageHandler works in Simulator but not in TestFlight. Thanks.
Replies
0
Boosts
0
Views
185
Activity
6d
StoreKit Sandbox returns 0 products after TN3186 checks — catalog association issue?
We are testing two auto-renewable subscriptions for a new iOS app. In Apple Sandbox, StoreKit 2 Product.products(for:) always returns an empty array. Legacy SKProductsRequest independently reports both identifiers as invalid. Environment: Physical iPhone, iOS 26.5 Xcode development build with automatic signing Storefront.current = USA (143441) canMakePayments = true No StoreKit Configuration file in the Run scheme Direct native StoreKit 2 diagnostics, without a third-party purchase SDK TN3186 checks completed: Explicit Bundle ID matches the App Store Connect app, installed app, and provisioning profile In-App Purchase is enabled for the App ID Developer membership, Paid Apps Agreement, banking, and tax are active One subscription group with monthly and yearly subscriptions is visible Pricing, localizations, and availability are configured Neither subscription is Rejected or Developer Action Needed The scheme is using real Sandbox data, not local StoreKit testing Results: StoreKit 2 batch query: rawCount = 0 SKProductsRequest: valid = []; both identifiers are invalid StoreKit 2 individual monthly query: 0 StoreKit 2 individual yearly query: 0 No exception; failure occurs during product discovery Related reports: https://developer.apple.com/forums/thread/839313 — TN3186 verified and USA storefront valid, but still 0 products; no replies https://developer.apple.com/forums/thread/841722 — Apple Commerce mentioned Rejected or Developer Action Needed states; ours have neither https://developer.apple.com/forums/thread/820656 — Apple DTS confirmed first subscriptions do not require review before Sandbox testing Apple Developer Support referred us to TN3186, and we verified every applicable item. The individual subscription detail route in App Store Connect also intermittently remains on a loading indicator although the group and both records are visible. Could an App Store Commerce or StoreKit engineer check whether the app-to-IAP catalog association is populated correctly on Apple's side, or advise an official escalation path to have the Sandbox catalog reprocessed? Exact account, app, product, device, email, and support-case identifiers are omitted from this public post and can be supplied privately through Apple Support or Feedback Assistant.
Replies
0
Boosts
0
Views
116
Activity
1w
TestFlight + Sandbox: consumable second purchase fails (DuplicateTransaction) on some devices, and product price sometimes returns USD — expected behavior, and recommended test setup?
We're testing In-App Purchases for our app distributed via TestFlight, using Sandbox Apple Accounts. We observe two device-dependent behaviors and have two questions. (App-specific details, including the bundle ID, are in our Feedback report FB24632077.) Observation 1 — Consumable second purchase fails with DuplicateTransaction on some devices The first purchase of a consumable succeeds and the transaction is finished. A second purchase of the same consumable then fails with PurchaseFailureReason.DuplicateTransaction ("This In-App Purchase has already been bought") on some devices. It correlates with sandbox session persistence: on devices where the purchase prompts for password only (e.g., iOS 26.x, iPadOS 18.4.1) the second purchase succeeds; on devices where it prompts for the account (email) + password every time (e.g., iOS 18.3.2, iPadAir2 15.6), the second purchase fails. The same Sandbox Apple Account behaves differently on different devices. An Ad Hoc (development-signed) build with the same account succeeds. Observation 2 — Product price sometimes returns USD instead of the storefront currency With the same Sandbox account (region: Japan), prices are shown in JPY on iOS 26.2 but in USD on iOS 18.3.2. The App Store app shows JPY, but SKProductsRequest / StoreKit 2 Product metadata returns USD. Question 1: Are these known Sandbox/TestFlight limitations? If so, what is the recommended way to reliably test repeat consumable purchases (and to get the correct storefront currency) in TestFlight across many devices and OS versions? Question 2: For TestFlight IAP testing, are there environmental differences between (A) using the device's real Apple ID (signed into Media & Purchases; automatic sandbox) and (B) signing out of Media & Purchases and using a Sandbox Apple Account — with respect to: reliability of repeat consumable purchases, authentication / session persistence (password-only vs account + password each purchase), storefront / currency resolution for product metadata, ability to clear purchase history? Which approach do you recommend for a consistent, reliable TestFlight IAP QA environment? Environment: TestFlight (App Store distribution), Sandbox tester region = Japan. (App-specific identifiers such as bundle ID are in our Feedback report FB24632077.) Repro: buy a consumable once (succeeds, finished) → buy the same product again → DuplicateTransaction on affected devices. Thanks!
Replies
0
Boosts
0
Views
98
Activity
1w
Subscriptions load in TestFlight sandbox but not during App Review — 2.1(b), third rejection
Our first submission has now been rejected under Guideline 2.1(b), with the message: "the in-app purchases do not load successfully." Each review was performed on an iPad Air 11-inch (M3) running iPadOS 26.6. The app sells only auto-renewable subscriptions. We cannot reproduce the failure, and we have verified every part of the configuration we can think of. WHAT WE VERIFIED (via the App Store Connect API, not just the UI) Two subscriptions in one group, state READY_TO_SUBMIT Product IDs exactly match what the app requests Available in 175 territories, including the United States Prices set, en-US localizations present for both products and for the group App review screenshots attached to both, state COMPLETE Both subscriptions are included in the review submission (READY_FOR_REVIEW) Paid Apps Agreement: Active. Bank account: Active. Tax forms: Active. WHAT WORKS On our own devices, installed via TestFlight (sandbox environment), the products load correctly and a purchase completes and activates as expected. This works on both a real Apple ID and a Sandbox Tester account. WHAT WE OBSERVED FROM THE REVIEW SESSION We use RevenueCat. Their server-side API returns our offering with both packages and the correct product identifiers, so the offering metadata is fine. Our backend also shows that the reviewer's session reached our servers and signed in successfully at the review timestamp, so the device had working network connectivity. That leaves StoreKit itself returning no products on the reviewer's device, which is what empties the offering. QUESTIONS Are there known conditions under which StoreKit returns no products in the App Review sandbox for subscriptions that are in "Ready to Submit" and are attached to the same submission as the binary? For an app that has never been approved, is product loading during review handled differently from a normal sandbox session on a released app? Is there any way to obtain diagnostics from a review session, or to ask the reviewer for a screenshot of the failing screen? Replies in Resolution Center so far have only repeated the original rejection text. Is there anything specific to iPadOS 26.6 that could affect StoreKit 2 product lookups? For the next submission we have added a timeout and automatic retries around the product lookup, plus a visible retry control instead of a spinner, in case the failure is a transient cold-start timeout. But we would rather understand the actual cause than keep guessing. Any pointers appreciated.
Replies
0
Boosts
0
Views
123
Activity
1w
Same issue: subscription group stuck on "must be submitted with a subscription of the same group" despite correct config
I'm having the exact same issue. My app has 2 subscription groups, each with 2 auto-renewable subscriptions (monthly and yearly duration) — 4 products total, all in "Ready to Submit" status. The error I keep getting when trying to submit the first group together with the app version is: "New subscription groups must be submitted with an auto-renewable subscription of that same group" What I've already verified/tried: Full metadata on each subscription: reference name, pricing, localizations (display name + description) in two languages, review screenshot Added the individual subscription products (not the group) to the submission draft from each product's own page Draft correctly shows the app version + all subscriptions grouped together under "Suscripciones (4)" Set both durations (monthly/annual) to the same subscription level within each group, as suggested in another thread — no change Recreated the subscriptions from scratch with entirely new Product IDs — same error Tried different browsers, incognito mode, hard refresh Paid Applications Agreement is Active, no pending agreements The error persists regardless of what I try. Has anyone found what actually resolved this beyond the subscription level fix? Or is this something only Apple can unblock from their side?
Replies
1
Boosts
0
Views
123
Activity
1w
Increased StoreKit errors “Unable to Complete Request”
Since January 28, 2026, we’ve noticed an increase in StoreKit-related errors during purchase flows. Specifically, we’re seeing a spike in errors reported as “Unable to Complete Request”, categorized as unknown StoreKit errors. This correlates with a noticeable drop in the overall purchase success rate. A few observations: The issue is not limited to the latest app version, it also affects older versions. It appears to occur only on iOS 17+. The impact seems country-specific: some regions are affected more heavily, while others show no significant change compared to previous days. At the moment, there are no related incidents reported on Apple’s System Status page. Given these symptoms, this looks like a potential StoreKit / Apple API issue, but we haven’t found any official confirmation yet. Has anyone else observed similar StoreKit behavior recently on iOS 17+? Any insights or known issues would be greatly appreciated.
Replies
5
Boosts
1
Views
1.2k
Activity
1w
Product.products(for:) never returns — approved subscriptions, live app, all agreements active
My app is live on the App Store and all three auto-renewable subscriptions are Approved, but StoreKit 2 never answers on device. Product.products(for:) does not settle — no products, no error, no throw. I let it run 30 seconds. Storefront.current behaves the same way, so this is not a product-id or catalogue problem. StoreKit is not reaching a store at all. Already ruled out: Product ids app.steady.pro.weekly / .monthly / .yearly, all Approved; subscription group Approved Bundle id app.steady.calm, matches App Store Connect exactly Paid Applications Agreement Active, bank and tax forms Active In-App Purchase capability enabled on the App ID and present on the App Store provisioning profile Two iPhones, two Apple Accounts, storefronts AZ and TR, three networks A clean build run directly from Xcode on a different Mac — identical silence Also reproduced through a third-party purchases SDK before reverting to plain StoreKit 2, so it is not my bridge layer This has never worked once, on any device or account, since launch. It is not intermittent. Open with Apple: Developer Support case 20000143122321, Feedback FB24488724 with sysdiagnose attached. Has anyone seen Storefront.current hang like this? Is there an account-level state that can stop StoreKit from resolving a storefront even when the app and products are approved?
Replies
1
Boosts
0
Views
147
Activity
1w
Clarification about the new EU terms effective October 1, 2026.
I'm looking for clarification on how the new EU business terms apply to a code-redemption flow. My app sells self-guided digital audio tours via Apple In-App Purchase. I would also like to sell the same tours independently through third-party travel marketplaces (general tour and activity booking platforms). The proposed flow: The app would not advertise, mention, or link to these marketplaces in any way. After purchasing a tour externally, an EU customer receives a booking code. In the app, the customer taps "Enter a booking code," types the code, and taps "Fetch Tour." The app verifies the booking against our server and unlocks the purchased tour, with no additional payment taken. The same tours remain available for direct purchase through Apple In-App Purchase. App Review has previously rejected this type of code-redemption functionality under the In-App Purchase rules. Two questions: Is this exact flow now permitted on EU storefronts under Attachment 14, using the StoreKit External Purchase or External Purchase Link entitlement? Do these externally initiated sales need to be reported to Apple, or incur an Apple commission, given that the app contains no external offer, marketplace name, purchase instructions, or actionable link? Thanks in advance for any guidance.
Replies
0
Boosts
0
Views
146
Activity
1w
Sandbox testing - Clear Purchase History
Hi, Overview I have an app for which I have created a sandbox account. When I try to clear purchase history it doesn't work, it still shows the in-app purchase items (non-consumable in-app purchases) as purchased. I have tied tried the following ways, but none of them work. Any help on this would be much appreciated! Attempt 1: Go to https://appstoreconnect.apple.com/ Users and Access > Sandbox Check sandbox account > Tap Clear Purchase History button Attempt 2: Go to the iPhone > Settings > Developer > Sandbox Apple Account Tap on account > Manage > Clear Purchase History Attempt 3: Sign out of Sandbox account and sign back in Attempt 4: Delete app and re-run app from Xcode
Replies
5
Boosts
4
Views
779
Activity
1w
Apple In-App Purchase availability.
Hello, I am a developer based in Somalia and I have recently enrolled in the Apple Developer Program. I am planning to build an iOS app exclusively for users in Somalia. The app will offer premium digital features, and I would like to use WaafiPay, a local Somali payment provider that supports mobile-money payments such as EVC Plus, ZAAD and SAHAL. Somalia does not have an Apple App Store storefront or Apple In-App Purchase availability. Before I start development, I would like to confirm whether an app distributed to users in Somalia can use WaafiPay to process payments for premium digital features directly inside the app. If this is permitted, please let me know whether I need any special entitlement, approval, or implementation requirements. Thank you.
Replies
0
Boosts
0
Views
129
Activity
1w
Guideline 3.1.3(b) — showing a web-only B2B tier on iOS pricing page
We have a multiplatform SaaS app (iOS, Desktop). Individual plans are sold via IAP on iOS. We also offer a B2B multi-seat plan that's only sold through our website (per-seat billing, admin provisioning, etc.). On our iOS pricing page, we want to show all plans — including the B2B one — so users can see the full picture. The B2B plan would just show features and a starting price with a label like "Managed through our desktop platform." No purchase button, no link, no redirect. Only the individual plans would have IAP subscribe buttons. Three questions: Does showing pricing/features for a plan that can't be purchased in-app count as "steering" under 3.1.3? Is a static label like "Managed through our desktop platform" considered a call to action if there's no link or button? Would a "Contact Sales" form (just collects an email, follow-up happens outside the app) be a safer approach? We did check with Apple Developer Support (Aug 2026) and were told this should be fine, but want to hear from anyone who's shipped something similar before we submit. Thanks.
Replies
0
Boosts
0
Views
60
Activity
1w