There is no difference between the sandbox and TestFlight environments. TestFlight apps run in the same sandbox environment as does StoreKit apps installed to your device by Xcode. Unless an app is installed from the iTunes App Store, it runs in the sandbox. However, it's odd that you've encountered a difference - but as you mention that the auto-renewing subscription is for one-month and the compressed renewal time is 5 minutes, I wonder if there is an unusual side effect with how the transactionObserver runs that may be causing this problem.
To test an auto-renewing subscription in the sandbox, it's important that you background the app or force quit the app before checking for a renewal. To understand why, it helps to understand that the transactionObserver detects auto-renewing subscription renewals. The transactionObserver only checks the App Store at the following times
- when the addTransactionObserver call is made,
- when the addPayment call is made an the transaction result is to be processed and
- when the app transitions from the background to the foreground.
In the case that the auto-renewing subscription for one-month is purchased, it would seem simple to leave the app open. After 5 minutes, the App Store will renew the sandbox one-month auto-renewing subscription and it will be placed on the app's transaction queue. Leaving the app open will trigger one of the events described above and the renewal will not be detected. The solution - background the app or force quit the app and relaunch it.
Of course there might be some other issue going on if in fact the app is being backgrounded or relaunched.
rich kubota developer technical support CoreOS/Hardware/MFI