The latter allows users the freedom to restore and upgrade while preserving their purchased features, but Apple doesn't make it obvious how to accomplish this.
Our friends at DigiDNA found that employing free in-app purchases solves this problem. Their strategy, in short, is:
- Simultaneously release the new app alongside an update to the legacy version.
- Have the legacy version write a special flag in the keychain at first launch. These keychain entries can be read by the new app because they're from you, the same developer.
- Have the legacy app inform users that the new app exists, and let them know that all currently-owned features will be unlocked for free.
- Once installed, the new app reads the special keychain entry and offers those users (and only those users) a free in-app purchase bundle that unlocks all their previously paid-for add-ons (yes, free in-app purchases seem counter-intuitive, but they are allowed, at least currently).
Interested developers can (and should) read the whole blog post to get the nitty gritty on this creative method. Kudos to the folks at DigiDNA for coming up with this solution!