I looked rest of the code to check to look it was perfect, no missed by the followed the StoreKit tutorials by Apple Inc, and YouTube channel, too. I believed I was very closer to completed IAP! somehow, I noticed I got three codes to show the gray error that shows up after the app has frozen while it appeared sandbox account UIAlertController to purchase the products.
One Code Results:
Error: Enqueued from com.apple.main-thread (Thread 1)
I built UITableView to show an Episode with the Purchase version. The error was the same as the previous code.
Now This is a final code that has shown one word by the error that says; "Thread" without mentioning any what is the issues.
I have no idea what is thread stands for? Someone can give me some tips about Thread for IAP issues?
One Code Results:
Error: Enqueued from com.apple.main-thread (Thread 1)
Code Block func purchase(product: IAPProduct) { guard let productToPurchase = products.filter({ $0.productIdentifier == product.rawValue }).first else { return } let payment = SKPayment(product: productToPurchase) /* Code Crashed paymentQueue.add(payment) */ }
I built UITableView to show an Episode with the Purchase version. The error was the same as the previous code.
Code Block if indexPath.row == 3 { /* code crashed IAPService.shared.purchase(product: .epsiode4non_consumable) */ }
Now This is a final code that has shown one word by the error that says; "Thread" without mentioning any what is the issues.
Code Block extension IAPService: SKPaymentTransactionObserver { func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { print(transaction.transactionState.status(), transaction.payment.productIdentifier) switch transaction.transactionState { case .purchased: SKPaymentQueue.default().finishTransaction(transaction) SKPaymentQueue.default().remove(self) print("Successful Purchased!") queue.finishTransaction(transaction) case .failed: SKPaymentQueue.default().finishTransaction(transaction) SKPaymentQueue.default().remove(self) print("Purchase is Failed.") queue.finishTransaction(transaction) case .restored: SKPaymentQueue.default().finishTransaction(transaction) SKPaymentQueue.default().remove(self) print("Purchase Restore is Successful.") queue.finishTransaction(transaction) case .deferred: SKPaymentQueue.default().finishTransaction(transaction) SKPaymentQueue.default().remove(self) print("Purchase is Deferred.") queue.finishTransaction(transaction) /* code crashed default: queue.finishTransaction(transaction) */ } } } }
I have no idea what is thread stands for? Someone can give me some tips about Thread for IAP issues?