aystv,
In response to your question, you must use the production version of the app to test promo codes. It can be an update as well.
I need to correct an error which my earlier response made. In the production environment, promo codes should work once App Review has approved an app, but before the app has been officially released by the developer to the production App Store. In the promo code redemption process, the user uses iTunes to redeem the promo code. When the App Store receives the promo code redemption request, the App Store sets up an incompleteTransaction for the application ID/iTunes User, in the same way that it handles an auto-renewable subscription renewal.
When the production app is launched, it should install the transactionObserver, which will query the App Store for any pending incompleteTransaction. If one is found, the Authentication dialog is presented, the the purchase is processed in the same way as if the user had just use the "Buy" button. The updatedTransactions delegate method is called with the successful purchase state and the app processes the transaction.
What is a problem is that for an newly approved application where a new In-App Purchase identifier is included, the identifier will not be activated until the application is activated. In this case, the SKProductsRequest will fail to validate the new identifier until the app is approved for release by the developer. In addition, the new identifier may take up to 48 hours to be activated after the application is activated.
rich kubota - rkubota@apple.com
developer technical support CoreOS/Hardware/MFI