diff --git a/CHANGELOG.md b/CHANGELOG.md index 02453e23..90679740 100644 --- a/CHANGELOG.md +++ b/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)) diff --git a/SwiftyStoreKit/PaymentQueueController.swift b/SwiftyStoreKit/PaymentQueueController.swift index 3cb3d91e..f50d5701 100644 --- a/SwiftyStoreKit/PaymentQueueController.swift +++ b/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 diff --git a/SwiftyStoreKitTests/PaymentQueueControllerTests.swift b/SwiftyStoreKitTests/PaymentQueueControllerTests.swift index 93faa31a..aa6c4f57 100644 --- a/SwiftyStoreKitTests/PaymentQueueControllerTests.swift +++ b/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())