Bladeren bron

Merge pull request #337 from bizz84/assert-complete-transactions-called-on-startup

Assert that completeTransactions() was called when the app launches.
Andrea Bizzotto 7 jaren geleden
bovenliggende
commit
a56093c938

+ 4 - 0
CHANGELOG.md

@@ -2,6 +2,10 @@
 
 All notable changes to this project will be documented in this file.
 
+## [0.12.1](https://github.com/bizz84/SwiftyStoreKit/releases/tag/0.12.1) Assert that `completeTransactions` was called when the app launches.
+
+* Assert that `completeTransactions()` was called when the app launches ([#337](https://github.com/bizz84/SwiftyStoreKit/pull/337), related issue: [#287](https://github.com/bizz84/SwiftyStoreKit/issues/287))
+
 ## [0.12.0](https://github.com/bizz84/SwiftyStoreKit/releases/tag/0.12.0) Add `verifySubscriptions` method for subscription groups 
 
 * Add `verifySubscriptions` method to check all subscriptions in a group at once ([#333](https://github.com/bizz84/SwiftyStoreKit/pull/333), related issue: [#194](https://github.com/bizz84/SwiftyStoreKit/issues/194))

+ 9 - 1
SwiftyStoreKit/PaymentQueueController.swift

@@ -103,9 +103,16 @@ class PaymentQueueController: NSObject, SKPaymentTransactionObserver {
         super.init()
         paymentQueue.add(self)
     }
+    
+    private func assertCompleteTransactionsWasCalled() {
+        
+        let message = "SwiftyStoreKit.completeTransactions() must be called when the app launches."
+        assert(completeTransactionsController.completeTransactions != nil, message)
+    }
 
     func startPayment(_ payment: Payment) {
-
+        assertCompleteTransactionsWasCalled()
+        
         let skPayment = SKMutablePayment(product: payment.product)
         skPayment.applicationUsername = payment.applicationUsername
         skPayment.quantity = payment.quantity
@@ -115,6 +122,7 @@ class PaymentQueueController: NSObject, SKPaymentTransactionObserver {
     }
 
     func restorePurchases(_ restorePurchases: RestorePurchases) {
+        assertCompleteTransactionsWasCalled()
 
         if restorePurchasesController.restorePurchases != nil {
             return

+ 8 - 6
SwiftyStoreKitTests/PaymentQueueControllerTests.swift

@@ -69,6 +69,8 @@ class PaymentQueueControllerTests: XCTestCase {
 
         let payment = makeTestPayment(productIdentifier: "com.SwiftyStoreKit.product1") { _ in }
 
+        paymentQueueController.completeTransactions(CompleteTransactions(atomically: true) { _ in })
+
         paymentQueueController.startPayment(payment)
 
         XCTAssertEqual(spy.payments.count, 1)
@@ -127,12 +129,12 @@ class PaymentQueueControllerTests: XCTestCase {
         }
 
         // run
+        paymentQueueController.completeTransactions(completeTransactions)
+
         paymentQueueController.startPayment(testPayment)
 
         paymentQueueController.restorePurchases(restorePurchases)
 
-        paymentQueueController.completeTransactions(completeTransactions)
-
         paymentQueueController.paymentQueue(SKPaymentQueue(), updatedTransactions: transactions)
         paymentQueueController.paymentQueueRestoreCompletedTransactionsFinished(SKPaymentQueue())
 
@@ -183,10 +185,10 @@ class PaymentQueueControllerTests: XCTestCase {
         }
 
         // run
-        paymentQueueController.startPayment(testPayment)
-
         paymentQueueController.completeTransactions(completeTransactions)
 
+        paymentQueueController.startPayment(testPayment)
+
         paymentQueueController.paymentQueue(SKPaymentQueue(), updatedTransactions: transactions)
         paymentQueueController.paymentQueueRestoreCompletedTransactionsFinished(SKPaymentQueue())
 
@@ -238,10 +240,10 @@ class PaymentQueueControllerTests: XCTestCase {
         }
 
         // run
-        paymentQueueController.restorePurchases(restorePurchases)
-
         paymentQueueController.completeTransactions(completeTransactions)
 
+        paymentQueueController.restorePurchases(restorePurchases)
+
         paymentQueueController.paymentQueue(SKPaymentQueue(), updatedTransactions: transactions)
         paymentQueueController.paymentQueueRestoreCompletedTransactionsFinished(SKPaymentQueue())