I am the Lead iOS Developer for The Incc, an upcoming social networking application. The platform offers subscriptions that grant users access to premium content, primarily digital magazines showcasing diverse cultures, alongside standard social media features and additional unique functionalities.
I am exploring two specific use cases for our subscription model.
Promo Codes with Split Payments:
We plan to collaborate with the our influencers (referred to as Mover Shakers) by providing them with promo codes for users to purchase subscriptions. For such purchases, we aim to implement a revenue split model, allocating 10% to the influencer and the remainder to us after Apple’s fees.
Gifting Subscriptions:
We also wish to enable users to gift subscriptions to others within the app.
I understand that the Apple Subscription Service does not natively support these features.
What other options do we have to achieve this that are also not against the Apple's guidelines.
Subscriptions
RSS for tagGive users access to content, services, or premium features in your app on an ongoing basis with subscriptions, a type of in-app purchase.
Posts under Subscriptions tag
200 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
Hello, Apple App Store Server API Team!
I have one questions about the identifiers provided by Apple App Store Server API. Could you please answer?
We are running an iOS App. In our app, the transactionId we get from Apple App Store Server API is called T1. (Example)
Q1. Is it correct that other iOS apps cannot get T1 for transactionId from Apple App Store Server API? (I'm wondering if the transactionId is globally unique across apps.)
Thank you!
Hi,
I launched and released my app in the App Store after first App build is approved. But its subscriptions are still in the status of Pending Binary Approval. So currently in my App subscription is empty. Is this normal to wail a bit? or should i do something asap. It's very strange for users to see no subscription options in a launched App I think.
I'm using Transaction.environment to determine server behavior.
https://developer.apple.com/documentation/storekit/apptransaction/environment
https://developer.apple.com/documentation/storekit/appstore/environment
I gather this information on the app using StoreKit and then send it to the server:
originalTransactionId = transaction.originalID
originalTransactionEnvironment = transaction.environment
When testing within Xcode, on a simulator, the value sent to the server for originalTransactionEnvironment is Xcode - as expected.
When testing on a device using a TestFlight build, the value sent to the server for originalTransactionEnvironment is undefined/nil. I expected it to be Sandbox - and later in production it should be Production.
Most importantly, the value sent to the server for originalTransactionId in the TestFlight version is not undefined/nil - it is the value I expected it would be. The transaction was originally for a subscription purchase, if that makes a difference.
So the transaction is available, and information like originalID is also available. Why is transaction.environment not available? What is the behavior in production?
I want to create offer code for my Vision app, but I didn't find that option in Apple Connect subscription price page. And when I check that from my iPhone app page, I saw the offer code description "Codes for discounted prices or free offers are unique alphanumeric codes that can be easily distributed using physical or digital channels for your iOS app and macOS app. Your customers can redeem them on devices running iOS 14, iPadOS 14, macOS 15 or later through the App Store redemption flow or within the app if you've implemented the presentCodeRedemptionSheet StoreKit API. You can create codes for up to 10 active offers at a time."
It doesn't mentioned VisionOS, so can I set offer code for my Vision app?
So, we've implemented IAP with StoreKit2 e2e for both the client and backend and it's working mostly perfectly, however we have an issue which we can't seem to understand Apple's behavior.
So, imagine a purchase that occurred on the 10th of December in the sandbox environment through an install from TestFlight, and this same purchase keeps getting queued in the Transaction.unfinished list for some reason (today, the 17th of December, a whole week after the initial purchase!).
Here's the flow:
We iterate the list on app launch
Send the unfinishedTransaction's transactionId to our servers
The server says "hey, we could verify it with Apple but it's not longer active (expired). We can't really work with it so just finish it on your side and don't send it to me again"
The client finishes!! the transaction
On the very next app launch it keeps reappearing in the Transaction.unfinished queue
Are we doing something wrong, why doesn't it get cleaned? Is this an expected behavior?
Note, this is generally the server's logic for new purchases:
If we weren't able to contact Apple - we tell the client to not finish the transaction so that we'll be able to re-iterate it on the next app launch or retry
If the transaction is not expired and valid - we update our records and tell the client to finish the transaction
If we couldn't update our records - we tell the client to not finish the transaction so that we'll be able to re-iterate it on the next app launch or retry
If the transaction is not valid for some reason - we tell the user to finish the transaction
The server might see it as a valid transaction if we'll send the originalTransactionId instead of the 'transactionId(using it to callgetTransactionInfoinAppStoreServerLibrary`), but is this something we want to do?
This will obviously not fix the problem because the server tells the client to finish the transaction anyways, but it simply doesn't work.
Please, any advice or changes to make to either Client/Server would be greatly appreciated
Best Regards, Ofek
I added auto renewable subscriptions to my app. First submission of IAPs require a new build along with it. I tested everything locally through the .storekit file. Everything worked perfectly so I submitted it for review.
The moment I did so, StoreKit.Product.products(for:) stops returning the products. If I click on the "Sync" button on .storekit now the pre-existing subscriptions disappear. Apple reviews the build and states that there are no subscription options visible.
Also in "Prepare for submission" phase, IAP & Subscriptions section disappears so one can no longer add them to the next builds.
I have tried to explain this 7 times (with new version submissions) through App Review Comments. It looks like nobody reads the responses. I tried adding the issue as a note, screenshot, video in different parts of the submission. They are entirely ignored. I sent 3 support request none of which have resulted in a response. I tried setting up a 1 on 1 call with Apple and it got rejected.
This issue has been reported by other people in this forum and others with no solutions provided.
I am completely out of options at this point. If I and others are indeed right to think that there is a bug in App Store Connect on the specific scenario with first time IAP review submissions where the first build is rejected by developer's fault, it bugs out with subscriptions.
My app's success entirely depends on this as I can't monetise it and I am in Apple Developer Program which means I am subscribing to this service. Can someone from Apple Team, please respond to this specific issue on whichever medium chosen. I am completely blocked and in dire need of help.
Thanks for your understanding.
I have an Apple subscription with a 2-week introductory offer and a 3-month promotional offer code. There are 2 subscription plans:
1-month subscription
12-month subscription
For the 1-month plan, my promotional offer code is "Monthly_Free," and for the 12-month plan, my promotional offer code is "Yearly_Free." However, when users try to enter the respective promo codes for the 1-month or 12-month plans, they receive the following error:
"Offer not available. Your account is not eligible for this offer. You can still subscribe at the regular plan price."
This works fine in the sandbox account, where I can use the promo codes as many times as needed, switching between the 1-month and 12-month plans easily. What could be the issue here?
I’m curious if Siri can help me improve my overall health, specifically with goals like losing weight. I’m not a programmer or very technical, so I’d love simple explanations or step-by-step instructions.
Here’s what I’d like to know:
Can Siri provide personalized health tips or reminders to help with weight loss (e.g., drinking water, exercising, or meal tracking)?
How can I use Siri to set up routines or shortcuts that integrate with the Apple Health app?
Are there any specific commands or features that make it easier to track progress, like logging meals or checking daily step counts?
I’m looking for practical ways to use Siri as a health companion without needing to dive into complex setups. Any advice would be greatly appreciated!
So I ran a promo for my app that got me 30k downloads or so. The app was free for a day and so it got lots of "purchases". There were two errors from StoreKit2 that I can't explain (I'll detail the other one in another post)
This one:
StoreKit.StoreKitError.systemError(Error Domain=NSCocoaErrorDomain Code=4097 "connection to service with pid 19497 named com.apple.storekitd" UserInfo={NSDebugDescription=connection to service with pid 19497 named com.apple.storekitd}
There are various theories online that the display name of the purchase could be an issue.
Another was that this indicates that this indicates that a helper process has crashed.
Generally my guidance was to restart the device and that seemed to resolve it for most if not everyone. But not everyone reached out and it rained bad reviews and I was accused of a bait and switch and so on.
Is there any way to mitigate this? Any way to address it? It doesn't happen for everyone but it happens very frequently still.
I am using RevenueCat to dynamically show subscriptions using experiments.
I'm doing this to experiment with price and wording on the paywall.
However, apple is rejecting this because they can't find all the subscriptions. However it's literally not possible for a user to see them all. I tried explaining this in my first rejection but they rejected it again. Any ideas?
Guideline 2.1 - Information Needed
We have started the review of your app, but we are not able to continue because we cannot locate the in-app purchases within your app at this time.
Specifically, out of 9 only 3 were found during the review.
Next Steps
To help us proceed with the review of your app, please reply to this message providing the steps for locating the in-app purchases in your app.
Note that in-app purchases are reviewed in an Apple-provided sandbox environment. Make sure they have been appropriately configured for review in the Apple-provided sandbox environment.
If you are restricting access to in-app purchases based on factors such as storefront or device configurations, please include this information in your reply along with steps to enable the in-app purchases for our review.
Resources
Learn more about offering in-app purchases.
Learn more about testing in sandbox.
Support
Reply to this message in your preferred language if you need assistance. If you need additional support, use the Contact Us module.
Consult with fellow developers and Apple engineers on the Apple Developer Forums.
Provide feedback on this message and your review experience by completing a short survey.
Reply to App Review
I'm trying to follow the instructions from https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-for-review's "Submit an in-app purchase for the first time" section. However, I can't get the “Add In-App Purchases or Subscriptions” dialog to open - there isn't a clickable link in the In-App Purchases and Subscriptions section.
My IAPs seem to be set up properly, they're all in the "Ready to Submit" state.
Hi, i have my mispelled my name and cannot change it in any way. My simple Apple account is show ok but developer account is shown wrong. I think this makes my previous enrollments invalid as my name cannot be checked. How can i fix this?
My submission was rejected because (among other reasons) of this:
"Guideline 2.1 - Performance - App Completeness
We found that your in-app purchase products exhibited one or more bugs which create a poor user experience. Specifically, your app did not load its content and the activity indicator spun indefinitely in subscription page. Please review the details and resources below and complete the next steps."
The issue here is that I use SubscriptionStoreView. The screenshot that the review team attached shows a loading spinner with a text "Loading subscription" - that view is already part of SubscriptionStoreView.
The problem here is how to prevent rejections like this. By using SubscriptionStoreView we get convenience because a lot of things are handled automatically, but there is no way to force reload and there are no callbacks in case loading of products breaks.
What is the recommended solution, except for not using SubscriptionStoreView and making a custom view?
It feels kind of stupid to have your app rejected because one of the Apple provided views malfunctions.
Hi everyone,
I have a question about subscription upgrades and refunds for an app that offers two options:
Premium Yearly - $99.99/year (level 1)
Premium Monthly - $9.99/month (level 2)
If a user has been on the Premium Monthly plan for 11 months (totaling $109.89) and then upgrades to the Premium Yearly plan ($99.99/year), how would the refund/credit work in this situation?
Would the user receive:
A $9.99 credit (difference between $109.89 paid and $99.99 for yearly)?
No credit at all?
I am somewhat of a beginner in mobile app development. I have some questions about IAP and commissions. One of my clients has a website that basically acts as the middle man which connects the trainers and participants. Basically, the trainers pay my client a subscription fee and they can list the kind of trainings they have to offer (ex. cardio, weight lifting, ...etc.). These trainings can be one-to-one, one-to-many, or one-to-few depending on the trainers. When the participants see something that they like, they would make a payment directly to the trainers via the website. To save time, we will probably do some kind of webview app. Having said all these, my questions are as follows,
As far as the IAP is concerned, can the payments between the trainers and the participants use third party payment method and ONLY the subscription fee from the trainers to the client use the storeKit/Apple IAP plugin?
If the answer to the question above is Yes (i.e. using Apple IAP for subscription only but use a third party payment for the transactions between the trainers and the participants), does it mean that the commissions ONLY apply on the subscription fees and NOT the payments between the trainers and the participants?
If the answer to Question 1 is No (i.e. ALL the payments have to go through Apple IAP), the commissions would apply to both the payments between the trainers and the participants and the monthly subscription payments, right? In this case though, to my understanding, when using the Apple IAP plugin, essentially, all the payments go to Apple temporarily. After taking out the commissions, the payments would be released to the bank account on file with the App Store within 45 days of the last day of the fiscal month in which the transaction was completed. Am I correct? And if so, as far as the business model on the App is concerned, my client would collect the money released from Apple and then distribute the money to the appropriate trainers. Am I correct?
Hi! Could you please clarify when and why the subscription auto-renewal rate in TestFlight was changed to a daily cycle? Now, the subscription lasts for 6 days! This is causing significant issues in testing. Previously, the 5-minute auto-renewal for weekly subscriptions was an excellent solution.
Is there a way to adjust the auto-renewal timing for an account in TestFlight?
Documentation link: https://developer.apple.com/help/app-store-connect/test-a-beta-version/subscription-renewal-rate-in-testflight.
Thank you for your clarification!
I've noticed that some new users are able to redeem promotional offers. However, Apple's documentation states: "Promotional offers can be effective in winning back lapsed subscribers or retaining current subscribers. You can provide lapsed or current subscribers a limited-time offer of a discounted or free period of service for auto-renewable subscriptions on macOS, iOS, and tvOS." (Source)
Could someone clarify whether promotional offers are intended solely for lapsed or current subscribers, or can new subscribers also redeem them under certain conditions?
Hello Developers,
I’m encountering an issue while setting up and testing subscriptions for my iOS app. Here’s a detailed breakdown of the situation:
I have configured a 1-Year Premium Membership subscription in App Store Connect. The subscription is currently in the Waiting for Review status.
To properly test this subscription in the Sandbox environment, it seems the subscription needs to be approved first. However, to get it approved, I need to submit it with my app, creating a frustrating loop.
My app currently doesn’t feature the subscription on its UI, as I want to thoroughly test its functionality before integrating it fully.
Steps Taken:
Configured metadata for the subscription in App Store Connect (e.g., localized name, description, and price).
Submitted the subscription for review.
Verified product IDs and linked them correctly in my paywall configuration.
Key Questions:
Is it mandatory for the subscription to be integrated into the app for the initial review?
Can I successfully test a subscription in the sandbox environment while its status is still Waiting for Review?
What’s the best practice to handle this situation and break the testing-review loop?
Any insights or guidance would be greatly appreciated. Thank you for your time!
Starting a few months ago, we noticed that we are receiving sign-ups to our application using Sandbox accounts. These accounts were not created by us, and certainly do not show up under Sandbox users on App Store Connect.
When we setup In App Payment, our server side validation followed the guidance to always allow sandbox receipts (see https://developer.apple.com/documentation/appstorereceipts/verifyreceipt).
I think we assumed that only Sandbox users that we setup in App Store connect would be allowed to be used with our app. Another assumption was that Apple reviewers could create Sandbox accounts to use to test our IAP sign-up during app review.
How are other developers preventing fraudulent sign-ups from sandbox accounts? Has something changed with In App Payments this year related to sandbox accounts?