When an app is first opened it executes didFinishLaunchingWithOptions. Unless there is a problem with available memory, when it is closed it goes into background and then when it is reopened it does not execute didFinishLaunchingWithOptions but rather applicationWillEnterForeground and various other methods. So, if you remove the transaction observer and, perhaps, deallocate StoreKit methods, you need to add a transaction observer and re class StoreKit methods when your app both enters foreground and also when it launches. The 'best practice' suggestion from Apple is to always leave an observer available so that a new subscription will call updatedTransactions whenever the app is open. Alternatively, you could add the transaction observer whenever the app enters foreground (or launches) provided your app believes the subscription may have expired. I think that's 'better practice'.