@@ -123,17 +123,17 @@ - (NSArray*)rm_transactions {
123123
124124@interface RMProductsRequestDelegate : NSObject <SKProductsRequestDelegate>
125125
126- @property (nonatomic , strong ) RMSKProductsRequestSuccessBlock successBlock;
127- @property (nonatomic , strong ) RMSKProductsRequestFailureBlock failureBlock;
126+ @property (nonatomic , copy ) RMSKProductsRequestSuccessBlock successBlock;
127+ @property (nonatomic , copy ) RMSKProductsRequestFailureBlock failureBlock;
128128@property (nonatomic , weak ) RMStore *store;
129129
130130@end
131131
132132@interface RMAddPaymentParameters : NSObject
133133
134- @property (nonatomic , strong ) RMSKPaymentTransactionSuccessBlock deferBlock;
135- @property (nonatomic , strong ) RMSKPaymentTransactionSuccessBlock successBlock;
136- @property (nonatomic , strong ) RMSKPaymentTransactionFailureBlock failureBlock;
134+ @property (nonatomic , copy ) RMSKPaymentTransactionSuccessBlock deferBlock;
135+ @property (nonatomic , copy ) RMSKPaymentTransactionSuccessBlock successBlock;
136+ @property (nonatomic , copy ) RMSKPaymentTransactionFailureBlock failureBlock;
137137
138138@end
139139
@@ -160,7 +160,7 @@ @implementation RMStore
160160
161161 NSMutableArray *_storedStorePayments;
162162
163- NSInteger _pendingRestoredTransactionsCount ;
163+ NSMutableSet *_pendingRestoredTransactionIds ;
164164 BOOL _restoredCompletedTransactionsFinished;
165165
166166 SKReceiptRefreshRequest *_refreshReceiptRequest;
@@ -180,6 +180,7 @@ - (instancetype) init
180180 _productsRequestDelegates = [NSMutableSet set ];
181181 _productsRequests = [NSMutableSet set ];
182182 _restoredTransactions = [NSMutableArray array ];
183+ _pendingRestoredTransactionIds = [NSMutableSet set ];
183184 _storedStorePayments = [NSMutableArray array ];
184185 [[SKPaymentQueue defaultQueue ] addTransactionObserver: self ];
185186 }
@@ -320,7 +321,7 @@ - (void)restoreTransactionsOnSuccess:(void (^)(NSArray *transactions))successBlo
320321 failure : (void (^)(NSError *error))failureBlock
321322{
322323 _restoredCompletedTransactionsFinished = NO ;
323- _pendingRestoredTransactionsCount = 0 ;
324+ [_pendingRestoredTransactionIds removeAllObjects ] ;
324325 _restoredTransactions = [NSMutableArray array ];
325326 _restoreTransactionsSuccessBlock = successBlock;
326327 _restoreTransactionsFailureBlock = failureBlock;
@@ -333,7 +334,7 @@ - (void)restoreTransactionsOfUser:(NSString*)userIdentifier
333334{
334335 NSAssert ([[SKPaymentQueue defaultQueue ] respondsToSelector: @selector (restoreCompletedTransactionsWithApplicationUsername: )], @" restoreCompletedTransactionsWithApplicationUsername: not supported in this iOS version. Use restoreTransactionsOnSuccess:failure: instead." );
335336 _restoredCompletedTransactionsFinished = NO ;
336- _pendingRestoredTransactionsCount = 0 ;
337+ [_pendingRestoredTransactionIds removeAllObjects ] ;
337338 _restoreTransactionsSuccessBlock = successBlock;
338339 _restoreTransactionsFailureBlock = failureBlock;
339340 [[SKPaymentQueue defaultQueue ] restoreCompletedTransactionsWithApplicationUsername: userIdentifier];
@@ -735,9 +736,13 @@ - (void)didFailTransaction:(SKPaymentTransaction *)transaction queue:(SKPaymentQ
735736
736737- (void )didRestoreTransaction : (SKPaymentTransaction *)transaction queue : (SKPaymentQueue*)queue
737738{
738- RMStoreLog (@" transaction restored with product %@ " , transaction.originalTransaction .payment .productIdentifier );
739+ NSString *productIdentifier = transaction.originalTransaction .payment .productIdentifier ;
740+ RMStoreLog (@" transaction restored with product %@ " , productIdentifier);
741+
742+ if (productIdentifier) {
743+ [_pendingRestoredTransactionIds addObject: productIdentifier];
744+ }
739745
740- _pendingRestoredTransactionsCount++;
741746 if (self.receiptVerifier != nil )
742747 {
743748 [self .receiptVerifier verifyTransaction: transaction success: ^{
@@ -830,9 +835,10 @@ - (void)notifyRestoreTransactionFinishedIfApplicableAfterTransaction:(SKPaymentT
830835 if (transaction != nil )
831836 {
832837 [_restoredTransactions addObject: transaction];
833- _pendingRestoredTransactionsCount--;
838+ [_pendingRestoredTransactionIds removeObject: transaction.payment.productIdentifier];
839+
834840 }
835- if (_restoredCompletedTransactionsFinished && _pendingRestoredTransactionsCount == 0 )
841+ if (_restoredCompletedTransactionsFinished && _pendingRestoredTransactionIds. count == 0 )
836842 { // Wait until all restored transations have been verified
837843 NSArray *restoredTransactions = [_restoredTransactions copy ];
838844 if (_restoreTransactionsSuccessBlock != nil )
0 commit comments