Our app sells two auto-renewable subscriptions. Product loading succeeds and
returns both products with correct localized prices, but every purchase attempt
fails roughly one second later with "Item Unavailable". No purchase sheet is
ever presented to the user.
The app has not yet passed its first App Review. It was rejected under Guideline
2.1(b) because the reviewer encountered this same error on their device.
MY QUESTION
Under what conditions does StoreKit reject a purchase with "Item
Unavailable" for a product that has just been returned successfully, with a
valid localized price, by a product request?
Is an auto-renewable subscription transactable in the sandbox environment
for an app that has never had a binary approved by App Review?
Question 2 is the one I most need answered. App Review's rejection states that
In-App Purchase products "do not need prior approval to function in review", but
neither we nor the reviewer can transact them.
DIAGNOSTIC LOG
Captured on-device during a failing session:
01:08:56 fetchProducts [com.aurascanner.app.pro.weekly,
com.aurascanner.app.pro.annual]
01:08:56 fetchProducts -> 2 product(s):
com.aurascanner.app.pro.annual=$39.99;
com.aurascanner.app.pro.weekly=$6.99
01:08:56 requestPurchase sku=com.aurascanner.app.pro.weekly
01:08:57 purchaseError: code=purchase-error msg=Item Unavailable
01:08:57 error code=purchase-error, storefront=USA
01:09:05 fetchProducts -> 2 product(s), same prices returned again
01:09:05 requestPurchase sku=com.aurascanner.app.pro.annual
01:09:06 requestPurchase threw: Item Unavailable
01:09:06 error code=purchase-error, storefront=USA
An introductory-offer eligibility check earlier in the session also succeeded,
using the subscription group ID read from the loaded product. So product
metadata, including the subscription group, resolves correctly.
CONDITIONS
Fails identically for both products, on every attempt.
Reproduces in TestFlight on our own devices and Apple IDs.
Also failed during App Review on iPad Air 11-inch (M3), iPadOS 26.5.2.
Storefront reports as USA in every case.
Real devices only. Not reproduced on Simulator.
ALREADY VERIFIED
Paid Applications Agreement: Active, banking and tax information complete.
In-App Purchase capability: enabled on the App ID at
Certificates, Identifiers & Profiles.
Bundle identifier com.aurascanner.app matches the App Store Connect record.
Both subscriptions: complete metadata, review screenshots uploaded, USD
pricing set, United States availability.
Both subscriptions and the subscription group are attached to the current
submission, status "Ready for Review".
Subscription group has a localized display name.
Build distributed via TestFlight, which routes purchases to sandbox
automatically.
IMPLEMENTATION
The app is React Native and uses a wrapper library over StoreKit 2, but the
error text originates from StoreKit rather than the wrapper, and the call order
follows the documented pattern:
Initialize the StoreKit connection.
Load products. This succeeds and returns both products.
Register transaction update and error listeners.
Request the purchase. This is where it fails.
Purchases are verified server-side using Apple's App Store Server Library, and
the transaction is finished only after verification succeeds.
I am not asking anyone to debug the wrapper. My question is about StoreKit and
App Store behaviour: what causes the store to quote a product and then decline
to sell it?
Any pointers appreciated. I can supply screenshots or the full log.
1
1
91