Hello,
I would like to ask for your opinion on whether the following in-app purchase (IAP) specifications would comply with the App Store Review Guidelines.
■ App Overview
・The app allows users to create a “Family Group” by inviting other family members to join.
・The app provides brain-training games. The game itself is displayed via WebView.
・All purchases use in-app purchase (IAP) only. No external payments or links are provided.
■ Purchase Types (2 models)
① Group Unlimited Plan
・If one member of a family group purchases this plan, all members of the same group can play the games without limits for a certain period.
・This is based on the app’s own group-sharing mechanism, not Apple’s “Family Sharing.” We will clearly state this in the UI to avoid confusion.
② Ticket System (Consumable)
・One user in the group purchases game-play tickets.
・Other members of the same group can also consume those tickets to play.
・Tickets are only shared and consumed within the app’s family group. They cannot be transferred, resold, or moved outside the app.
■ Points to Confirm
A. For model ①: Is it acceptable under the guidelines to grant access to the entire group when one member purchases the plan (via the app’s own group logic)?
B. For model ②: Is it acceptable to allow consumable tickets to be shared and consumed within the group?
(I understand that Apple’s official “Family Sharing” does not allow sharing of consumables. This would be strictly our own in-app sharing logic.)
If anyone has experience or insights regarding whether such designs are allowed under the guidelines, I would greatly appreciate your advice.
In-App Purchase
RSS for tagOffer extra content, digital goods, and features directly within your app using in-app purchases.
Posts under In-App Purchase tag
200 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hello, I have 2 subscription group. Each group have different plans and promotional offer. I was set 1 month free promotional offer in all plans. While I subscribe any plan IAP sheet is not showing 1 month free promotional offer. I already used with new sandbox account. How can I get promotional offer in IAP sheet?
Hello,
I would like to ask for your opinion on whether the following in-app purchase (IAP) specifications would comply with the App Store Review Guidelines.
■ App Overview
・The app allows users to create a “Family Group” by inviting other family members to join.
・The app provides brain-training games. The game itself is displayed via WebView.
・All purchases use in-app purchase (IAP) only. No external payments or links are provided.
■ Purchase Types (2 models)
① Group Unlimited Plan
・If one member of a family group purchases this plan, all members of the same group can play the games without limits for a certain period.
・This is based on the app’s own group-sharing mechanism, not Apple’s “Family Sharing.” We will clearly state this in the UI to avoid confusion.
② Ticket System (Consumable)
・One user in the group purchases game-play tickets.
・Other members of the same group can also consume those tickets to play.
・Tickets are only shared and consumed within the app’s family group. They cannot be transferred, resold, or moved outside the app.
■ Points to Confirm
A. For model ①: Is it acceptable under the guidelines to grant access to the entire group when one member purchases the plan (via the app’s own group logic)?
B. For model ②: Is it acceptable to allow consumable tickets to be shared and consumed within the group?
(I understand that Apple’s official “Family Sharing” does not allow sharing of consumables. This would be strictly our own in-app sharing logic.)
If anyone has experience or insights regarding whether such designs are allowed under the guidelines, I would greatly appreciate your advice.
I don't know I keep getting rejected for the same thing. My guy won't tell me what's wrong with it. He just keeps sending me the same screenshot and I just don't see what's wrong with it so here I am can somebody please look at this and tell me what you see do you see what's wrong with this so that I can correct it and submit it for the fifth time and hoping I get rejected.
We are developing an app which has an In App Purchase for subscription, we have the application in tesflight, and the subscription is done through apple developers account in the app store, now we are trying to cancel the subscription, we just keep getting an error message in app store stating "your request is temporarily unable to be processed".
we need to cancel this subscription for us to test our application properly.
any help on this would be appreciated.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Tags:
Subscriptions
In-App Purchase
Hi everyone,
I’m trying to submit my first release with In-App Purchases, but I can’t keep the IAP attached to the submission.
Status: Not published yet (first release)
Version: 5.0.0 (multiple builds: (7), (8), etc.)
What happens
I upload a new build and select it for version 5.0.0.
I go to Add for Review and select my newly created IAP (auto-renewable subscriptions).
I submit the version.
When I re-open the submission details, the IAP section is empty (they no longer appear as “Included in this submission”).
The result is a double failure:
App rejection (Guideline 2.1 – “IAP not found in the submitted binary”).
Each IAP is also rejected for lack of a binary in its review context.
It looks like the IAP and the build keep getting detached from each other after I submit. Since this is my first version, I’ve tried changing builds and even editing version metadata, but it still feels like I’m just “editing the first version” rather than creating a fresh link between this binary and these IAP.
What I already tried
Creating the IAP and selecting them during Add for Review.
Ensuring the IAP have complete metadata/localizations and pricing.
Re-submitting using a new build number (5.0.0 (8), etc.).
Checking Monetization → In-App Purchases and Subscriptions; products exist, but after submit they stop appearing under the submission.
(When testing the opposite path) Removing IAP entirely for a non-IAP release — but Review still referenced IAP “linked” on their side.
Questions
What is the exact, canonical sequence to link a new build to newly created IAP so they remain listed under “Included in this submission” after I hit Submit?
For first-time IAP, do I need to press Submit for Review on each IAP product before selecting them in the app submission? Or is selecting them during Add for Review enough?
Which product statuses are required so that IAP do not drop off the submission? (Ready to Submit vs Waiting for Review, etc.)
Can changing the build (or editing version metadata) after attaching IAP cause them to be silently removed from the submission?
Since this app is not yet published, is it advisable to create a new app version (e.g., 5.0.1) to “reset” the linkage, or should a new build under 5.0.0 be sufficient?
Any guidance or a step-by-step checklist to keep IAP attached to the submission would be greatly appreciated. Thanks!
— Victor
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Tags:
App Store Connect
In-App Purchase
I have three questions about verify receipt
I use this api (https://buy.itunes.apple.com/verifyReceipt)to verify receipt is success or not. But since last month, this interface has started to return an error(21002). I see this document (https://developer.apple.com/documentation/appstorereceipts/verifyreceipt) say its Deprecated. My question is, is the error suddenly returned recently because the interface has been deprecated or for some other reason? (I haven't modified my code about this recently)
I can not understand this document: (https://developer.apple.com/documentation/appstorereceipts/validating_receipts_on_the_device) Does this mean that in the new version, as long as the app returns a payment success (purchaseDetails.status == PurchaseStatus.purchased), the payment is guaranteed to be successful, and my server does not need to request payment result verification from Apple's server?
I try to use this (https://github.com/apple/app-store-server-library-java) to get TransactionInfo, but I dont konw to get Transaction status to know is success or not.
my java server code :
AppStoreServerAPIClient client = new AppStoreServerAPIClient(encodedKey, keyId, issuerId, bundleId, environment); TransactionInfoResponse response = client.getTransactionInfo(transactionId);
(bug i can note get transaction status, how do i konw this Transaction is success or not)
I am attempting to test non-consumable sandbox purchases, however I am unable to select the "Approve Transaction" option after initiating a purchase. Leaving the transaction in a permanent pending state. I can view the transaction in the transaction manager by navigating to Debug -> Storekit -> Manage Transactions.. but the only available options to select are "Refund Transaction" or "Delete Transaction".
What am I missing about Xcode or my environment that is preventing me from testing this purchase flow?
Some more information about my set up.
I have a .storekit file synced to AppStore Connect with my product Id.
There's a StoreKitTestCertificate.cert saved in the project.
I've tried running the build on my phone as Debug, Release and ReleaseForRunning all with the same behavior after making a purchase.
My phone is logged into a sandbox test user apple account in the developer iOS settings
I’m running into an issue where the com.apple.developer.storekit entitlement is not being included in provisioning profiles, even though my App ID is properly configured for In-App Purchase.
Entitlements file: explicitly includes
<key>com.apple.developer.storekit</key>
<true/>
Capability: In-App Purchase is enabled in the Apple Developer Portal and shows as “Enabled.”
What I’ve tried:
Automatic signing in Xcode → profiles generated, but missing com.apple.developer.storekit
Manual signing → deleted and recreated provisioning profiles multiple times; entitlement still missing.
Waited several hours for possible propagation.
Verified that my in-app purchase products are set up correctly.
Error message:
Provisioning profile "iOS Team Provisioning Profile: zu.inniu" doesn't include the com.apple.developer.storekit entitlement
Question:
Has anyone else encountered this? Is there a step I might be missing to get StoreKit entitlements included in provisioning profiles, or could this be a backend issue that needs escalation through Apple DTS?
This is blocking me from building my app for physical devices, so any guidance would be greatly appreciated.
Thanks in advance!
Topic:
Code Signing
SubTopic:
Certificates, Identifiers & Profiles
Tags:
Entitlements
In-App Purchase
The documentation mentions the following:
Verify your receipt first with the production URL; then verify with the sandbox URL if you receive a 21007 status code. This approach ensures you don’t have to switch between URLs while your app is in testing, in review by App Review, or live in the App Store.
This way, you can use one server environment to handle both Sandbox and Production environments. It is necessary to pass App Review.
However, I'm not manually hitting these URLs - I'm using Apple's libraries.
Specifically, the environment is used in SignedDataVerifier and AppStoreServerAPIClient.
(I can't link to these because, for some reason, the domain apple.github.io is not allowed. The documentation for these is only found there. You can find it quickly by searching these terms and the domain.)
Here is how SignedDataVerifier is being used:
const verifier = new SignedDataVerifier(
appleRootCertificates,
APPLE_ENABLE_ONLINE_CHECKS,
APPLE_ENVIRONMENT,
APPLE_BUNDLE_ID,
APPLE_APP_ID
)
const verifiedNotification: ResponseBodyV2DecodedPayload = await verifier.verifyAndDecodeNotification(signedPayload)
if (!verifiedNotification)
{
// Failure
return
}
Here is how AppStoreServerAPIClient is being used:
const appStoreServerAPIClient = new AppStoreServerAPIClient(
SIGNING_KEY,
APPLE_IAP_KEY_ID,
APPLE_IAP_ISSUER_ID,
APPLE_BUNDLE_ID,
APPLE_ENVIRONMENT
)
const statusResponse: StatusResponse = await appStoreServerAPIClient.getAllSubscriptionStatuses(originalTransactionId, [Status.ACTIVE])
In the source code for SignedDataVerifier.verifyAndDecodeNotification, I can see that it throws a VerificationException(VerificationStatus.INVALID_ENVIRONMENT) error .
So for SignedDataVerifier is it as simple as wrapping my code in a try/catch and checking that the error's status code is 21007? I'm unsure about this because if you scroll to the bottom of the linked source code file, you can see the enumeration VerificationStatus, but it's unclear if this member has a value of 21007.
The source code for AppStoreServerAPIClient only says that it throws an APIException if a response could not be processed, so I'm not too sure about how to handle this one.
We’ve been approved for the Advanced Commerce API and are setting up the generic product identifiers per the guide:
https://developer.apple.com/documentation/advancedcommerceapi/setting-up-your-project-for-advanced-commerce#Set-up-generic-product-identifiers
We have multiple auto-renewable subscriptions (for simplicity: Product 1, Product 2, etc.). We created a new subscription group for Advanced Commerce and are about to add the subscription(s) inside that group.
Should we create one auto-renewable subscription (generic, e.g. subscription.ac) to represent all of our subscriptions, or one generic per product family (e.g., product1.ac, product2.ac, …)? If the answer depends on whether subscribers can hold multiple products simultaneously, please advise which structure supports that (e.g., separate groups).
Reporting identifiers / segmentation: In Sales and Trends and Payments & Financial Reports, which identifier(s) will appear after migration: the legacy StoreKit product_id, the new generic product id, and/or the SKU? If we use a single generic subscription for all products, what’s Apple’s recommended way to segment revenue by product (Product 1 vs. Product 2)? If SKUs don’t surface in these reports, should we prefer multiple generics/groups to preserve report-level segmentation?
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
Subscriptions
In-App Purchase
Advanced Commerce API
Hi,
We have a app with some auto-renewing subscription in a group of subscriptions.
When a user upgrade from a subscription to another, the "user receive a refund of the prorated amount of their original subscription" (https://developer.apple.com/app-store/subscriptions/).
How is the prorated calculated ?
Example : subscription to 14,99$ / month. If subscriber upgrade after 10 days, is the refund calculated 10/30 of 14,99$ (so ~5$) ?
I would like to know if it is allowed to offer the user to either unlock the app immediately or partake in a 3-day trial period before making a purchase.
I created 2 IAP non-consumable products; 1 for the immediate [which is at a discount] and for the after trial period ends [this is at a higher cost].
Is this something that Apple allows or is frowned upon?
I want to test the "Remove from Sale" scenario in Sandbox. I set my subscription to "Remove from Sale" for all territories in App Store Connect, but I can still make new purchases and auto-renewals continue in the Sandbox environment.
Is this a known limitation? Or is there a specific way to make this work for testing?
If it can't be tested, I'd like to know the expected production behavior. What changes occur in the App Receipt and what App Store Server Notification is sent?
What is the expected behavior for App Receipts and ASSN v2 notifications when a subscription is set to "Remove from Sale"?
I tried to test this in Sandbox, but the "Remove from Sale" setting in App Store Connect doesn't seem to affect the Sandbox environment.
For existing subscribers, what happens in the receipt? Does auto_renew_status change to 0 and is expiration_intent populated immediately?
Also, which notificationType is sent via ASSN v2?
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
Subscriptions
In-App Purchase
App Store Server Notifications
App Store Receipts
Hello,
I am setting up an auto-renewable subscription for my iOS app in App Store Connect.
I would like to set the monthly subscription price to ¥710 (Japanese yen).
From what I understand, Apple requires us to use predefined price tiers for in-app purchases and subscriptions. However, I’m not sure whether subscriptions allow more flexibility than one-time in-app purchases.
👉 My questions are:
Is it possible to set an arbitrary subscription price such as ¥710, or must I pick the closest price tier from Apple’s official subscription price list?
If arbitrary prices are not allowed, is there an official list of available subscription price points for Japan that I can refer to?
Can we set subscription prices in multiples of 10 yen (e.g., ¥700, ¥710, ¥720), or are we strictly limited to the price points Apple provides?
Thank you in advance for your help!
Topic:
Community
SubTopic:
Apple Developers
Tags:
Subscriptions
StoreKit
App Store Connect
In-App Purchase
Now I’m testing in-app purchase for my app but I can’t find how to set up my snadbox account in tvOS.
Acoording to Apple support team, the following menu item should be available in the settings;
Settings > Users and Accounts > Sandbox Account
But it’s not the case for me even I activated develope mode in tvOS already.
Can anyone explain how to set up sandbox account in tvOS or how to activate the menu above?
Thanks in advance.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Tags:
tvOS
In-App Purchase
StoreKit
Hi,I am facing the 21002 issue.Have you went through it? If you have resolved it, please dive me a hand.
Below is my code,and I Have tested in sand box environment.
NSURL receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
if (![[NSFileManager defaultManager] fileExistsAtPath:[receiptURL path]]) {
SKReceiptRefreshRequest receiptRefreshRequest = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:nil];
receiptRefreshRequest.delegate = self;
[receiptRefreshRequest start];
return;
}
NSData data = [NSData dataWithContentsOfURL:receiptURL];
/ receipt_data/
NSString *receipt_data = [data base64EncodedStringWithOptions:0];
After I test the purchase procedure, use the above receipt-data to verify on the server https://sandbox.itunes.apple.com/verifyReceipt,which always response 21002.I have no idea to deal with it.Thanks.
Hello everyone,
I’ve been struggling with App Store Review regarding my delivery app, and I’m hoping someone here can shed light on whether my app actually requires In-App Purchase (IAP) under Apple’s guidelines.
Here’s my situation:
My app connects riders with delivery jobs.
We have two rider payment models:
Commission Plan (10%) – Riders don’t pay upfront, but 10% is deducted per completed delivery.
Fixed Subscription Plan – Riders pay a fixed monthly fee in advance, which allows them to keep 100% of their delivery earnings.
The challenge:
Apple Review has rejected my app multiple times, insisting that I must use IAP for these payments. I’ve written back and forth with them several times explaining that:
The commission plan isn’t a digital feature, it’s simply a revenue share from physical delivery work.
The fixed plan is more like a business service fee for using the platform, not for unlocking content or digital features.
Despite this, the Review Team continues to state that my app “requires IAP.”
My questions are:
Based on Apple’s official guidelines, do apps like mine (delivery/logistics with commission/subscription for riders) really fall under IAP rules?
Has anyone here had a similar issue with a marketplace or service-based app?
If this does require IAP, what’s the reasoning — since the payments are tied to real-world services, not digital content?
I’d appreciate advice, shared experiences, or even clarification from someone who has successfully passed review with a similar model.
Thanks in advance!
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
Tags:
Subscriptions
App Review
App Store Connect
In-App Purchase
Hi everyone,
After my app was initially rejected, all my IAPs now show the status “Developer Action Needed.” There’s nothing I need to change on them — they were just returned because it was the first submission and the app itself was rejected.
Do I need to do anything with the IAPs before I resubmit, or will they still be attached and reviewed automatically with the next binary? I’ve seen conflicting answers, so I’d like to confirm the correct process.
Thanks,
Cris