In response to your finding, I think we should start with the fact - StoreKit is a set of API's for charging an iTunes User account for In-App Purchases. Once the charge has been billed to a customer credit card, the StoreKit API calls the updatedTransactions delegate method with the result of the transactions - purchased or failed. It's up to the application to act on the result - to provide content to the user or not.
If the StoreKit process successfully charges a user account, it's likely that the app is being passed the SKPaymentTransactionStatePurchased state at the updatedTransactions delegate method. You indicate that the app is not providing the associated products. Something is happening after the updatedTransactions delegate is entered to prevent the app from providing the content. You state that the things work in the Sandbox. I take it that App Review passed the app and now it's the production version which is failing. The first thing I'd check is to see if the app performs appStoreReceipt validation. If so, is the verifyReceipt URL for the sandbox server hardcoded into the app. This would explain why things work well in the sandbox and in App Review but fail in the production version. I'd review Tech Note 2413, iAP FAQ
<https://developer.apple.com/library/content/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228-CH1-RECEIPTURL>
The app has to dynamically be able to attempt receipt validation with the production verifyReceipt server first. If the attempt results in status 21007, then test with the sandbox verifyReceipt server.
If this is not the reason, please provide more info about what happens after the updatedTransactions delegate method is entered and why the app may not provide content to the user.
rich kubota - rkubota@apple.com
developer technical support CoreOS/Hardware/MFI