In my case (maybe because of the lots of auto renewable subscriptions I've generated through testing) there were a few cases where on restore the transction's originalTransaction was nil and it crashed when it tried to add a nil product identifier to an NSSet.
I've fixed this issue by using the restored transaction's product identifier instead of the original transaction. I'm not 100% sure that this is the best way to solve this issue but it solved it permanently.
In my case (maybe because of the lots of auto renewable subscriptions I've generated through testing) there were a few cases where on restore the transction's originalTransaction was nil and it crashed when it tried to add a nil product identifier to an NSSet. I've fixed this issue by using the restored transaction's product identifier instead of the original transaction. I'm not 100% sure that this is the best way to solve this issue but it solved it permanently.