I have no Idea how to to check if the app verifies receipts on the device and support the SHA-256 algorithm.
My App is purchased once and without in-app purchase.
the are the verifying process:
// Load the receipt into a Data object
let _receipt_url = Bundle.main.appStoreReceiptURL,
let _receipt_data = try? Data(contentsOf: _receipt_url)
let _receipt_bio = BIO_new(BIO_s_mem())
let _receipt_bytes: [UInt8] = .init(_receipt_data)
BIO_write(_receipt_bio, _receipt_bytes, Int32(_receipt_data.count))
let _receipt_pkcs7 = d2i_PKCS7_bio(_receipt_bio, nil)
BIO_free(_receipt_bio)
guard _receipt_pkcs7 != nil else {
SKReceiptRefreshRequest().start()
return
}
// Check that the container has a signature
guard OBJ_obj2nid(_receipt_pkcs7!.pointee.type) == NID_pkcs7_signed else {
SKReceiptRefreshRequest().start()
return
}
// Check that the container contains data
let _receipt_contents = _receipt_pkcs7!.pointee.d.sign.pointee.contents
guard OBJ_obj2nid(_receipt_contents?.pointee.type) == NID_pkcs7_data else {
SKReceiptRefreshRequest().start()
return
}
// Load the AppleInc_root_certificate into a Data object
guard
let _root_cert_url = Bundle.main.url(forResource: "AppleIncRootCertificate", withExtension: "cer"),
let _root_cert_data = try? Data(contentsOf: _root_cert_url)
else {
return
}
let _root_cert_bio = BIO_new(BIO_s_mem())
let _root_cert_bytes: [UInt8] = .init(_root_cert_data)
BIO_write(_root_cert_bio, _root_cert_bytes, Int32(_root_cert_data.count))
let _root_cert_x509 = d2i_X509_bio(_root_cert_bio, nil)
BIO_free(_root_cert_bio)
// Verify the signature
let _store = X509_STORE_new()
X509_STORE_add_cert(_store, _root_cert_x509)
OpenSSL_add_all_digests()
let _verification_result = PKCS7_verify(_receipt_pkcs7, nil, _store, nil, nil, 0)
guard _verification_result == 1 else {
return
}
// Get a pointer to the start and end of the ASN.1 payload
let _receipt_sign = _receipt_pkcs7?.pointee.d.sign
let _octets = _receipt_sign?.pointee.contents.pointee.d.data
var _ptr = UnsafePointer(_octets?.pointee.data)
let _end = _ptr!.advanced(by: Int(_octets!.pointee.length))
var _type: Int32 = 0
var _xclass: Int32 = 0
var _length: Int = 0
// Key attributes of in-app purchase.
var _iap_id = ""
var _iap_quantity = -1
var _iap_set: [(String, Int)] = []
// Parse ASN.1 payload
ASN1_get_object(&_ptr, &_length, &_type, &_xclass, _ptr!.distance(to: _end))
guard _type == V_ASN1_SET else {
return
}
while _ptr! < _end {
ASN1_get_object(&_ptr, &_length, &_type, &_xclass, _ptr!.distance(to: _end))
guard _type == V_ASN1_SEQUENCE else {
continue
}
ASN1_get_object(&_ptr, &_length, &_type, &_xclass, _ptr!.distance(to: _end))
guard _type == V_ASN1_INTEGER else {
continue
}
let _attribute_type = ASN1_INTEGER_get(c2i_ASN1_INTEGER(nil, &_ptr, _length))
ASN1_get_object(&_ptr, &_length, &_type, &_xclass, _ptr!.distance(to: _end))
guard _type == V_ASN1_INTEGER else {
continue
}
_ptr = _ptr?.advanced(by: _length)
ASN1_get_object(&_ptr, &_length, &_type, &_xclass, _ptr!.distance(to: _end))
guard _type == V_ASN1_OCTET_STRING else {
continue
}
switch _attribute_type {
case 17:
// Parse In-App purchase receipt.
ASN1_get_object(&_ptr, &_length, &_type, &_xclass, _ptr!.distance(to: _end))
guard _type == V_ASN1_SET else {
return
}
case 1701:
ASN1_get_object(&_ptr, &_length, &_type, &_xclass, _ptr!.distance(to: _end))
guard _type == V_ASN1_INTEGER else {
continue
}
_iap_quantity = ASN1_INTEGER_get(c2i_ASN1_INTEGER(nil, &_ptr, _length))
if _iap_quantity != -1 && _iap_id != "" {
_iap_set.append((_iap_id, _iap_quantity))
_iap_quantity = -1
_iap_id = ""
}
case 1702:
ASN1_get_object(&_ptr, &_length, &_type, &_xclass, _ptr!.distance(to: _end))
guard _type == V_ASN1_UTF8STRING else {
continue
}
let _mutable_ptr = UnsafeMutableRawPointer(mutating: _ptr!)
_iap_id = String(bytesNoCopy: _mutable_ptr, length: _length, encoding: .utf8, freeWhenDone: false) ?? ""
if _iap_quantity != -1 && _iap_id != "" {
_iap_set.append((_iap_id, _iap_quantity))
_iap_quantity = -1
_iap_id = ""
}
default:
_ptr = _ptr?.advanced(by: _length)
}
}
Should I need to change it?
App Store Connect
RSS for tagApp Store Connect is a suite of tools for submitting and managing your apps and in-app purchases on the App Store.
Post
Replies
Boosts
Views
Activity
We currently have an app that contains a monthly subscription to unlock the main functionality. We would like to have a way for our employees to be able to use the app without having to go through this mechanic. For instance, our sales associates and our support staff.
I had previously made a promo code field which would check the value with an API to determine whether to validate the subscription or not, but the app was denied since it didn't use the IAP system, which I understand.
I'm aware that I could somewhat achieve this behaviour through the use of promo codes, but that would require us to create a new batch of codes periodically, not to mention that every employee would need to have a payment method setup in their device, which we would like to avoid.
We could also periodically issue TestFlight builds to bypass this, but once again it's not an ideal solution since it necessitates some periodic and perpetual management.
Is there any way I can achieve this while following the App Review Guidelines?
My new version is stuck with 'Ready for Distribution' status since Jan 18. I have contact Apple by email, chat and call; however, they replied that they'll need senior/technical supporters for this, but all of them are busy now (?), and will contact me later. Does any face the same issue?
The issue is on 6th December we successfully renewed our Membership program. In the beginning of January money returned to my bank account.
Now, even if I try to pay again for the Program it says:
Sorry, you can’t enroll at this time.
Your Apple ID is already associated with the Account Holder of a membership.
What should we do? Our apps got banned from AppStore. We need a solution ASAP
I’ve thoroughly checked all configurations, flags, and settings, and I am 100% certain of using the latest stable version of Xcode (16.2, build 16C5032a) with the corresponding SDKs. Despite verifying everything and even trying to deploy using older stable Xcode versions in a VM, I've had no success.
Besides trying other xcode versions, update build numbers, creating new projects, new apps, checking all configs available in xcode, validating certificates and profiles, I've ran out of even what to check, test and try.
Any ideas?
I've contacted Apple already, awaiting response for now.
Hi,
suppose I released an App with subscription price, monthly or annually, can I increase its price anytime ? Or there’s some restrictions ?
—
Kind Regards
Hi,
how to reserve an App name for an App I’m developing ?
—
Kind Regards
I have configured the auto-renewable subscription product through Apple Store Connect, made it available in Xcode via the .storekit configuration file, and successfully purchased it in the testing of the old version. However, during the development of the new version, it seems that I mistakenly opened the .storekit configuration file of the old version, and then one or two pop-up windows appeared (the specific content was similar to saving? I don't quite understand), after that, I found that my new version .storekit configuration file could not automatically sync the auto-renewable subscription product from Apple Store Connect. I can't understand what happened here.
我通过Apple store Connect配置好了自动续期订阅产品,将它在Xcode通过.storekit配置文件配置可用,并且在旧版本的测试中成功购买。
但是,在开发新版本的过程中,我似乎错误的打开了旧版本的.storekit配置文件,然后弹出了一个或者两个弹窗(具体内容类似保存?我不太理解),之后,我发现我的新版本.storekit配置文件无法从Apple store Connect自动同步自动续期订阅产品。
我无法理解这里发生了什么问题。
Hello everyone,
We recently (a week ago) released our app, which includes an App Clip as a target. Before going live, we thoroughly tested the App Clip functionality using both the "Local Experience" and the "_XCAppClipURL" method. During testing, everything worked seamlessly.
After going live, when we manually create QR codes using the default App Clip URLs, such as:
https://appclip.apple.com/id?p=
https://appclip.apple.com/id?p=&clip=
The App Clip card is displayed, and the functionality works as expected.
However, we encountered an issue where scanning the App Clip QR codes displays the message: "No usable data found."
Our App Clip QR codes are dynamically generated with URLs in the format:
https://example.com/clip?id=
We implemented an advanced App Clip experience with the URL:
https://example.com/clip
This advanced App Clip experience is currently showing the status "Received" in App Store Connect. If this issue is due to the "Received" state of the advanced App Clip experience.
Here are the key implementation details for your reference:
We have added the domain "appclips:example.com" to the App Clip target's entitlement.
The AASA (Apple App Site Association) file is hosted at https://example.com/.well-known/apple-app-site-association This file has been validated successfully and includes the correct entries for App Clips.
The domain URL is "validated" status on App Store Connect.
The Advance app clip is in "Received" status.
The diagnostic for the URL is showing like a screen shot attached.
This issue is critical for our marketing and user adoption.
Could any of you please assist us in identifying and resolving this issue? If additional details or documentation are needed, we are happy to provide them promptly.
Thank you for your support and assistance in this matter.
Hello,
I setup a leaderboard in the default language English and everything works and the app is live in the store.
Now I am adding localization to the leaderboard and noticed than some languages have the data entry "Score Format Suffix" and some languages the data entries "Score Format Suffix (Singular)" and "Score Format Suffix (Plural)" instead.
Is this an error or intentional?
Kind Regards,
Chris
I have an application on the App Store and within the app itself it correctly lists the current year 2025. However on the Apple App Store it lists © 2024 and our LLC name. How can we list the correct year? It should update every year as long as you are in good standing. It's not like we have not made any updates to our app. Our last update was 3 days ago.
สินค้าที่เกี่ยวข้องกับการใช้งานประจำวัน
Several players in our app cannot purchase after upgrading iOS system. They make purchases every day before upgrading. After upgrading, they cannot purchase.
User purchase behaviors:
cannot request product:
no callback received;
didFailWithError received: Couldn’t communicate with a helper application .
request product success:
purchase stuck and after 2 mins failed with error message "There was a problem with your purchase"
These players try to make purchases every day. Most of time they cannot get store products with no request callback.
These player can make purchases in other apps.
players' info:
ipad7: 18.1.1 -> 18.2
ipad7: 18.1.1 -> 18.2.1
iPhone13 pro max: 17.6.1 -> 18.1.1
app info:
xcode: 15.2
iap: store kit
related code: iosIap.m (see the attachment)
IOSIAP.m.txt
Does any one know how to resolve this issue? Thanks.
we developed a pharmacy app for a client and we have business account but the app is rejected because of Guideline 5.1.1
if Everyone experience this issue till me how he's fixed it?
HI,
Can anybody please provide the details related to above
How to check if you developer account is auto renew or not?
Where do we go and hit the auto renew button or update the payment details and select auto renew.
All the docs and reference on internet says. Go to Account > Membership details > Click Auto renew
I can't to find the renew details anywhere in app connect.
Please guide me.
Hi,
First year receiving revenue through Storekit subscriptions. I live in the United States and know I need to pay taxes within the U.S. for my revenue. I'm curious if I have to handle anything (taxes, etc) in each country I sold a subscription in or does Apple handle all that for me? If it's a per-country basis is there a list somewhere so I can use it to choose where I should offer my app in the future?
Thanks everyone!
Hello
I am writing to report an issue with my account. I am unable to receive payments for user purchases made within my apps. The Balance is constantly Carried Forward, and I am unsure why. I have already updated all necessary information in my account, so everything should be in order.
Unfortunately, I have not received any response from the Financial Reports Support team despite reaching out multiple times over the past four months. I have also contacted other support teams, but there has been no progress for almost five months.
Currently, my account has accumulated a balance of more than 4K USD, which I am unable to access. I believe that the Apple Financial Reports Support team may need to reinitiate payments on my account. This issue might be related to payment pauses due to the war in Ukraine (although this is just my assumption). As a Ukrainian citizen, I find this situation particularly concerning.
Previously I was located in region which was partially occupied by Russia, but not my City, anyway whole region was banned from Swift transfers.
And now I'm not located on Ukraine, I updated address in my bussined account and bank account which are also not Ukranian. But this is tottally not helped me, and money just stuck in AppStore Connect.
Additionally, here are several case IDs to demonstrate my previous attempts to resolve this issue, none of which have received a response:
Case ID: 102368759149
Case ID: 8699462
Case ID: 9235318
Case ID: 10706490
Case ID: 102506141858
Please help me solve this issue and get the money I earned in my bank account, which is active in my AppStore Connect.
Thank you in advance for your help and time.
Kind regards
I logged into Transporter with 'a' APPID to upload the ipa package. Everything went smoothly until I logged out of 'a' APPID and then logged in with 'b' APPID. Transporter then prompted me: "This device is already associated with another account in the Apple Developer Program or Apple Developer Enterprise Program. Please use another device." Could you please tell me how to unbind my Mac device from 'a' APPID?
The accounts I make in AppStoreConnect do not work on emulators. I am unable to sign in using the username and password I set in AppStoreConnect. This has occurred with multiple test accounts. I cannot even reset my password in the emulator.
Additionally, there's apparently no way to restore a deleted Sandbox account.
At present I am unable to test Apple Sign In for the app I am working on, so this is issue is very important for me to resolve.
Thanks in advance!
Example in-app purchases for a single app:
$0.99
reference name "100 Coins"
product id "smallcoins"
$0.99
reference name "100 Gems"
product id "smallgems"
I can see the proceeds when I download the sales data but cannot tell which one was purchased. How do I differentiate the sales of each in-app purchase on App Store Connect?
Is this something I would need to track in my own database as purchases are made or can I pull this from one of Apple's APIs?
Thanks!