We are implementing in-app purchases using StoreKit 2. The issue we need guidance on is how our app should correctly handle a StoreKit 2 transaction that becomes .unverified during Apple App Review.
In our local development testing, purchases work correctly. When we test the same IAP products locally, the transaction returned from Product.purchase() is .verified, and the purchase flow completes successfully.
However, during Apple App Review, the reviewer appears to encounter a failure where the StoreKit 2 transaction is returned as .unverified on the client side.
The original localized error message shown is in Traditional Chinese:
「資訊對裝置無效」
Our English translation of this message is:
“The information is not valid for this device.”
Because the message is localized, we are not sure what the exact original English StoreKit error string would be.
This failure happens in the client app before our backend receipt or server-side validation flow. We are not using verifyReceipt for this step. The failure occurs at the StoreKit 2 VerificationResult level when checking the transaction returned by StoreKit.
Our current implementation only accepts .verified transactions. If StoreKit 2 returns .unverified, we treat the transaction as failed and do not unlock the purchased content. We believe this is the recommended secure behavior, but we would like to confirm the correct handling, especially because this issue is appearing during App Review while our local development purchases succeed.
Additional context:
• Distribution/review context: App Review / IAP review • API: StoreKit 2 • Failure point: VerificationResult returned as .unverified • Localized error message: 「資訊對裝置無效」 • Rough English translation: “The information is not valid for this device.” • Local development testing: purchases return .verified and succeed • The issue occurs before backend validation • Our app currently rejects .unverified transactions and does not unlock content
Questions:
- What are the known causes of StoreKit 2 returning .unverified with the localized error message 「資訊對裝置無效」 during App Review?
- Is our current behavior correct: only unlock content for .verified transactions and reject .unverified transactions?
- If App Review receives .unverified, what should the app do from Apple’s recommended perspective? Should we show a retry/error message, ask the reviewer to retry, refresh entitlements, or take another action?
- Is there any App Review environment, device configuration, Apple ID configuration, or StoreKit account state that can cause this device-related verification error?
- Since local development purchases succeed but App Review fails, what diagnostics or logs should we collect and provide to identify the root cause?
- Should we ever bypass StoreKit 2 transaction verification in App Review/TestFlight, or should .unverified always be treated as a failed transaction?
We would appreciate guidance on the correct code-level handling so that our app remains secure while also passing App Review reliably.
Thank you.