StoreKit

RSS for tag

Support in-app purchases and interactions with the App Store using StoreKit.

StoreKit Documentation

Posts under StoreKit subtopic

Post

Replies

Boosts

Views

Activity

iOS OfferCode testing in outside the app .
In my app, I need the user to redeem a code outside the app and then capture the transaction in the callback/response from the App Store. How can I test this process? Here's my function for opening a URL: if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url, options: [:], completionHandler: nil) } } I am trying to get the transaction object in the TransactionObserver class: // Implementation details... } Here is the link to this class. However, I am not receiving the expected callback in this observer. I am testing on a TestFlight build. My question is: Is it possible to test offer codes in TestFlight? Or is there something wrong with my implementation?
2
0
525
Nov ’24
subscriptionStorePolicyDestination is broken since iOS 18.0.1
I'm using StoreKit together with SubscriptionStoreView to show the subscriptions in my app. I also utilize subscriptionStorePolicyDestination to show the terms of service and the privacy policy link on the view: .subscriptionStorePolicyDestination(url: URL(string: "https://www.apple.com/legal/internet-services/itunes/dev/stdeula/")!, for: .termsOfService). Everything was working fine until iOS 18.0.1. After the update, when you tap into the terms of service (or the privacy policy) link on the store view, it opens the web view by rendering the page incorrectly. Besides that, it is not possible to close the web view anymore, you have to kill the app. I already submitted a bug (FB15552274) on Feedback Assistant but I didn't hear anything back for 2 weeks. My apps are getting rejected now, because the store view doesn't have: A functional link to the Terms of Use (EULA) A functional link to the privacy policy This is really frustrating because the API was working fine but now it is broken and neither the Apple developers nor the reviewers really care if the API is broken.
3
3
466
Nov ’24
Can I use AppTransaction to verify purchase of a paid macOS app?
I've tried to use AppTransaction.shared / AppTransaction.refresh() to verify that my app has been purchased from the Mac App Store. It works when testing a release build on my Mac, using a Sandbox Apple ID. But when I submit the app for review, the reviewer says it doesn't work. The error message returned by AppTransaction is "Unable to Complete Request", which is pretty vague. I get the same error when I try to use a real Apple ID for testing on my machine, so I have been wondering if maybe the problem is that App Review is testing a build that doesn't accept Sandbox Apple IDs? My app doesn't have a provisioning profile, could it be that this is the problem? As a Mac app developer, I'm not sure what provisioning profiles are good for, I thought they were only useful for iOS. Has anybody successfully submitted a Mac app that uses AppTransaction?
4
4
1.3k
Nov ’24
How to remove Subscription from Review
The guidance provided only explains how to remove the entire app from review, but not how to remove a single subscription. Currently, I have one incorrect subscription that has been rejected due to localisation issues, and it is stuck in the "In Review" status. Unfortunately, I am unable to make changes to it. The correct subscription is in the "Waiting for Review" status, and while I am able to remove it, there is no need to do so. What I would like to do is remove the previous, incorrect subscription.
0
0
363
Nov ’24
Implementing In-App Purchases for the first time
Hi, I want to apply in app purchases in my app. I have set it up in xcode and on appstoreconnect, it is saying ready to submit. I dont understand what i need to do now to connect the two. I have read i need to send my app for review for them to be reviewed, but i want to test the in app purchases first on test flight and on sandbox before i send my app for review. Please can someone clarify for me and help me?
1
0
426
Nov ’24
In-App Purchase Refund Procedure
Hi everyone, I was just wondering if anyone could point me in the right direction on how to properly handle inquiries about refunding in-app purchases. I've seen multiple posts saying to direct them to Apple's support, but is there no other direct way of handling this? Also, does Apple not provide an API to interface with so you can issue refunds on behalf of the customer? Thanks.
3
0
575
Nov ’24
macOS TestFlight app using Xcode environment for IAP
I don't know how this happened or how to reset this, but I can't test the StoreKit part of my TestFlight app anymore. When I try to retrieve or buy products (IAPs), I get all kinds of strange behavior. I think it is caused by storekitagent thinking the app is in "Xcode sandbox environment". One of the errors from storekitagent looks like this: [51852D62] [LoadSubscriptionStatusTask]: Subscription status request failed with error - Error Domain=NSURLErrorDomain Code=-1003 "A server with the specified hostname could not be found." UserInfo={AMSStatusCode=0, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <468756B3-DA53-4FED-B35C-E093954C27D8>.<1>, NSErrorFailingURLKey=http://localhost:49828/inApps/subscriptions?guid=98DD60024C21&reason=push, _kCFStreamErrorDomainKey=10, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask <468756B3-DA53-4FED-B35C-E093954C27D8>.<1>" ), NSLocalizedDescription=A server with the specified hostname could not be found., NSErrorFailingURLStringKey=http://localhost:49828/inApps/subscriptions?guid=98DD60024C21&reason=push, NSUnderlyingError=0x122f638d0 {Error Domain=kCFErrorDomainCFNetwork Code=-1003 "(null)" UserInfo={_NSURLErrorNWPathKey=satisfied (Path is satisfied), interface: lo0, _kCFStreamErrorCodeKey=-72000, _kCFStreamErrorDomainKey=10}}, _kCFStreamErrorCodeKey=-72000} It looks like it's trying to connect to a local server instead of contacting Apple's App Store servers. I'm on the latest macOS and Xcode. Any help is greatly appreciated:) Thanks!
5
2
1.9k
Nov ’24
StoreKit in IOS 18
I have has a the Storekit working in my application previously. It uses the a iTunes songs ID and allows the user to purchase the track from iTunes within the app using a View. its been fine in IOS 17 but since the update to 18 Ive not been able to get this to work. the iTunes panel loads within the app and shows the track I wish to purchase. on clicking purchase I login with my Apple ID password. that then spins for a few seconds then asks to do the purchase again. Can you please advise. code below print ("Store ID + \(self.appId)") let storeProductViewController = SKStoreProductViewController() storeProductViewController.delegate = self let parameters = [SKStoreProductParameterITunesItemIdentifier: self.appId] storeProductViewController.loadProduct(withParameters: parameters) { status, error -> Void in if status { self.present(storeProductViewController, animated: false, completion: nil) print("success: \(status.description)") } else { if let error = error { print("Error: \(error.localizedDescription)") } } } DispatchQueue.main.async { self.isPresentStoreProduct.wrappedValue = false } }
1
1
832
Nov ’24
Filling the tax Information. Help needed.
I'm setting up subscriptions on the App Store and need to fill out some forms. One of them is the "U.S. Certificate of Foreign Status of Beneficial Owner." At the bottom of the form, I see a label 'U.S. Person' with my name listed underneath it. What does "U.S. Person" mean here? My name appears below the "U.S. Person" title, but I'm not a U.S. person. What should I do? Also, what title should I enter? I'm the only developer on the app.
6
6
1.6k
Nov ’24
Facing issue on getting inApp procuts
I have created 5 consumable products on store but when i am trying to check on mobile using xcode with debug mode i am get fetching products successfully can u guys help me out why its happening. here is debug error --IAPTest[5101:295128] UnityIAP: Requesting 5 products --IAPTest[5101:295128] UnityIAP: Requesting product data... --IAPTest[5101:295371] UnityIAP: Received 0 products and 5 invalid products i have test same project with another apple account's app bundle ID or iAP products its working fine have a look of those app's debug screen show Perfect Not Perfect
2
1
377
Nov ’24
write-review URL query parameter does not work on macOS 15.2
I use the write-review query parameter in my App Store URL to bring up the review prompt in the App Store app: https://apps.apple.com/app/id0123456789?action=write-review (0123456789 is just an example ID, obviously replace that with your app ID) This is exactly what is supposed to be done as per the documentation: https://developer.apple.com/documentation/storekit/requesting_app_store_reviews#4312600 However, on macOS it just opens the product page as if I never put the query parameter in the URL. It works fine on iOS 18.2. I am using macOS 15.2 beta 3 (24C5079e) Feedback ID: FB15866683
1
0
463
Nov ’24
Unknown duplicated transactions on Store Kit
Hey team, we are having some unexpected transactions being sent to us by the Store Kit service. Right after we process a transaction, another transaction, with a different id, is received on paymentQueue(_:updatedTransactions:) without the user interaction. This is breaking some of our internal flows and there were some reports of users being charged twice. I'm trying to understand where did these transactions came from and how can we avoid that. Can you help me? I've attached some transactions that had this issue: match_incomplete_purchases.csv
1
0
508
Nov ’24
Failure during payment with sandbox account
I got this error if I buy my IAP on the simulator with a sandbox account. Any solutions? On android it's working very well. &lt;SKPaymentQueue: 0x6000018b8430&gt;: Payment completed with error: Error Domain=ASDErrorDomain Code=530 "(nu11)" UserInfo={NSUnderlyingError=0x600001512970 (Error Domain=AMSErrorDomain Code=100 "Authentication Failed The authentication failed." UserInfo={NSMultipleUnderlyingErrorsKey=( "Error Domain=AMSErrorDomain Code=2 \"Password reuse not available for account The account state does not support password reuse.\" UserInfo={NSDebugDescription=Password reuse not available for account The account state does not support password reuse., AMSDescription=Password reuse not available for account, AMSFailureReason=The account state does not support password reuse.}", "Error Domain=AMSErrorDomain Code=0 \"Authentication Failed Encountered an unrecognized authentication failure.\" UserInfo={NSDebugDescription=Authentication Failed Encountered an unrecognized authentication failure,, AMSDescription=Authentication Failed, AMSFailureReason=Encountered an unrecognized authentication failure,}" ), AMSDescription=Authentication Failed, NSDebugDescription=Authentication Failed The authentication failed., AMSFailureReason=The authentication failed,}}, storefront-country-code=USA, client-environment-type=Sandbox)
3
1
1.1k
Nov ’24
"purchaseDate" of the Reciepts
I have some questions regarding the specifications of the receipt information that can be obtained from https://developer.apple.com/documentation/appstoreserverapi/get_transaction_info. When a subscription is newly purchased, it is expected that the purchaseDate should reflect the time of purchase and should not be later than this time, such as an hour after the purchase. Is this understanding correct? We observed a phenomenon where, when a user purchased a new subscription between 17:30 and 20:00 JST on November 3, 2024, the purchaseDate in the received receipt was delayed by one hour compared to the actual purchase time. Is this a specification or an issue? When validating the receipt for a newly purchased subscription, if the purchaseDate reflects a time later than when the purchase was made, should I regard the user as having subscription rights at the time of validation?
0
1
449
Nov ’24
I have a question with `isEligibleForIntroOffer(for: groupId)`
I have a question with isEligibleForIntroOffer(for: groupId) that in which case that isEligibleForIntroOfferForGroupId changes from false to true. I found that a few user of our app isEligibleForIntroOffer changes. they used to buy a renewing-subscription with 3-day free trial. but 3 days later. i got from logs their isEligibleForIntroOffer becomes true. We rely on this field to determine whether to display products with free trials. there is only one product with free trial introductory offer.
1
0
406
Nov ’24
RevenueCat integration with Apple is returning only null values all the time
Hi All, I have setup RevenueCat integration with Apple for in-App purchase, signed all Business Agreements. x-checked all the keys and deleted and created subscription 100 times along with products in RevenueCat but only null is returned to my app by RevenueCat. I read and discussed with RevenueCat, as per them Apple returns null to them and they revert back null to users. Can someone please help me, I am struggling and out of wits. Don't know what to do. Any help, will be highly appreciated.
1
0
714
Nov ’24
How to verify plain, non-inApp purchase with AppTransaction
Hi all, I'm trying to switch from the 'exit(173)' method to using AppTransaction for a plain, paid app. My current attempt in swift looks like this: Task { let shared = try await AppTransaction.shared switch (shared) { case .verified(let transaction): print("verified <3") case .unverified(let transaction, let error): print("unverified. :'(") exit(0) } } However running this on my dev machine always ends up in the "verified <3" branch. I am ruinning on macOS 15 and am pretty sure that on older systems with the exit(173) method, I would see a window asking me to log into my app store account... I already created a new sandbox account and tried using an empty ".storekit" file... Am I doing something wrong in my code, or is the purchase coming from somewhere else? I already set the bundle-identifier to a non-existent one, but it still seems to think that there was a purchase. Is there any documentation on how to do normal purchase / receipt validation for paid apps using AppTransaction? I only found in-app related docs :'(
7
0
651
Nov ’24