Clearing purchases from iOS in-app purchase sandbox for a test user

RandomIOSDeveloper picture RandomIOSDeveloper · Oct 13, 2011 · Viewed 46.1k times · Source

Does anyone have any ideas on how to reset and/or clear the iOS in-app purchase sandbox?

I have an app that I'm testing with the sandbox, and I'd like to test new purchases without having to create a new test user every time I purchase something.

If I don't do this, then I (of course) always get a message that the in-app purchase item has already been purchased when I click on my app's buy button.

Answer

Roberto Canogar picture Roberto Canogar · Mar 26, 2013

IMO there are 3 things you can do to make testing non-consumables bearable:

  1. You can have many test accounts associated to one email. Gmail for example lets you add a "plus" string to the email to create aliases for an address: so [email protected] and [email protected] both really just go to [email protected]. Probably other email hosts do the same. When you create a test account you need to introduce: first name, last name, email address, password, secret question, secret answer, date of birth, and iTunes store country. You can put exactly the same data (including password) for [email protected] and [email protected] and you will have two test accounts. Finally, in your [email protected] inbox you will receive two verification emails from Apple to confirm both test accounts.

  2. Say that you have a non-consumable with product ID @"Extra_Levels". Instead of writing @"Extra_Levels" in all methods (requestProduct, purchaseProduct, ...), just write PRODUCT_ID1 and at some header file put #define PRODUCT_ID1 @"Extra_Levels" (with no semicolon!), then the preprocessor will search PRODUCT_ID1 and substitute it for @"Extra_Levels". Then creating a new non-consumable called @"Extra_Levels_01" and changing the #define will be as good as resetting the purchases for all your test users.

  3. As appsmatics pointed out, you can test the correct behavior of your code when you buy a non-consumable IAP by first using a consumable IAP (so that test user can make as many purchases as needed) to get rid of some bugs. Of course, you should also test the code with the real non-consumable IAP after that.