From 426c9f378d6219b1e9a4ef47fcd2b303be44cb80 Mon Sep 17 00:00:00 2001 From: NachoSoto Date: Fri, 14 Oct 2022 14:02:12 -0700 Subject: [PATCH] `PurchaseTesterSwiftUI`: fixed warnings and simplified code using `async` methods --- .../Shared/PurchaseTesterApp.swift | 16 ++++++- .../Views/Customer/TransactionsView.swift | 16 +++---- .../Shared/Views/HomeView.swift | 24 +++++++---- .../Views/Offerings/OfferingDetailView.swift | 42 +++++++++++-------- .../Offerings/PromoOfferDetailsView.swift | 19 +++++---- 5 files changed, 75 insertions(+), 42 deletions(-) diff --git a/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/PurchaseTesterApp.swift b/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/PurchaseTesterApp.swift index 26b62ba04c..02c42ed204 100644 --- a/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/PurchaseTesterApp.swift +++ b/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/PurchaseTesterApp.swift @@ -63,4 +63,18 @@ class RevenueCatCustomerData: ObservableObject { } -extension RevenueCat.StoreProduct: Identifiable {} +extension RevenueCat.StoreProduct: Identifiable { + + public var id: String { + return self.productIdentifier + } + +} + +extension RevenueCat.NonSubscriptionTransaction: Identifiable { + + public var id: String { + return self.productIdentifier + } + +} diff --git a/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/Customer/TransactionsView.swift b/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/Customer/TransactionsView.swift index 1601add6a8..f13e6c4cc3 100644 --- a/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/Customer/TransactionsView.swift +++ b/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/Customer/TransactionsView.swift @@ -12,23 +12,23 @@ import RevenueCat struct TransactionsView: View { let customerInfo: RevenueCat.CustomerInfo - let dateFormatter: DateFormatter = { - var df = DateFormatter() - df.dateFormat = "yyyy-MM-dd HH:mm:ss" - return df - }() - var body: some View { ScrollView { VStack(alignment: .leading, spacing: 10) { - ForEach(self.customerInfo.nonSubscriptionTransactions) { transaction in + ForEach(self.customerInfo.nonSubscriptions) { transaction in VStack(alignment: .leading, spacing: 0) { Text("\(transaction.productIdentifier)") .bold() - Text("\(dateFormatter.string(from: transaction.purchaseDate))") + Text("\(Self.dateFormatter.string(from: transaction.purchaseDate))") } } } }.padding(.horizontal, 20) } + + private static let dateFormatter: DateFormatter = { + var df = DateFormatter() + df.dateFormat = "yyyy-MM-dd HH:mm:ss" + return df + }() } diff --git a/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/HomeView.swift b/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/HomeView.swift index 25e98697b6..a65383eb6d 100644 --- a/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/HomeView.swift +++ b/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/HomeView.swift @@ -22,7 +22,7 @@ struct HomeView: View { CustomerInfoHeaderView() { action in switch action { case .login: self.showLogin() - case .logout: self.logout() + case .logout: await self.logout() } }.padding(.horizontal, 20) @@ -83,7 +83,7 @@ struct HomeView: View { Button { Task { do { - try await Purchases.shared.beginRefundRequestForActiveEntitlement() + _ = try await Purchases.shared.beginRefundRequestForActiveEntitlement() } catch { print("🚀 Info 💁‍♂️ - Error: \(error)") } @@ -105,7 +105,7 @@ struct HomeView: View { return } - Task { + Task { do { let (customerInfo, created) = try await Purchases.shared.logIn(self.newAppUserID) print("🚀 Info 💁‍♂️ - Customer Info: \(customerInfo)") @@ -133,10 +133,12 @@ struct HomeView: View { self.showingAlert = true } - private func logout() { - Purchases.shared.logOut { customerInfo, error in + private func logout() async { + do { + let customerInfo = try await Purchases.shared.logOut() print("🚀 Info 💁‍♂️ - Customer Info: \(customerInfo)") - print("🚀 Info 💁‍♂️ - Error: \(error)") + } catch { + print("🚀 Failed logging out 💁‍♂️ - Error: \(error)") } } } @@ -144,7 +146,7 @@ struct HomeView: View { private struct CustomerInfoHeaderView: View { @EnvironmentObject var revenueCatCustomerData: RevenueCatCustomerData - typealias Completion = (Action) -> () + typealias Completion = (Action) async -> () enum Action { case login, logout } @@ -194,13 +196,17 @@ private struct CustomerInfoHeaderView: View { Spacer() if Purchases.shared.isAnonymous { Button { - self.completion(.login) + Task { + await self.completion(.login) + } } label: { Text("Login") } } else { Button { - self.completion(.logout) + Task { + await self.completion(.logout) + } } label: { Text("Logout") } diff --git a/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/Offerings/OfferingDetailView.swift b/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/Offerings/OfferingDetailView.swift index cd9d02b732..db69f514e0 100644 --- a/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/Offerings/OfferingDetailView.swift +++ b/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/Offerings/OfferingDetailView.swift @@ -47,9 +47,7 @@ struct OfferingDetailView: View { Text("**Pkg Id:** \(package.identifier)") Text("**Sub Group:** \(package.storeProduct.subscriptionGroupIdentifier ?? "-")") Text("**Package type:** \(package.display)") - - - + if let period = package.storeProduct.sk1Product?.subscriptionPeriod?.unit.rawValue { Text("**Sub Period:** \(period)") } else { @@ -75,7 +73,9 @@ struct OfferingDetailView: View { .foregroundColor(.blue) .padding(.vertical, 10) .onTapGesture { - purchaseAsPackage() + Task { + await self.purchaseAsPackage() + } } Divider() @@ -84,7 +84,9 @@ struct OfferingDetailView: View { .foregroundColor(.blue) .padding(.vertical, 10) .onTapGesture { - purchaseAsProduct() + Task { + await self.purchaseAsProduct() + } } Divider() @@ -101,22 +103,28 @@ struct OfferingDetailView: View { } } - private func purchaseAsPackage() { - Purchases.shared.purchase(package: self.package) { transaction, info, error, userCancelled in - print("🚀 Info 💁‍♂️ - Transactions: \(transaction)") - print("🚀 Info 💁‍♂️ - Info: \(info)") - print("🚀 Info 💁‍♂️ - Error: \(error)") - print("🚀 Info 💁‍♂️ - User Cancelled: \(userCancelled)") + private func purchaseAsPackage() async { + do { + let result = try await Purchases.shared.purchase(package: self.package) + self.completedPurchase(result) + } catch { + print("🚀 Failed purchase: 💁‍♂️ - Error: \(error)") } } - private func purchaseAsProduct() { - Purchases.shared.purchase(product: self.package.storeProduct) { transaction, info, error, userCancelled in - print("🚀 Info 💁‍♂️ - Transactions: \(transaction)") - print("🚀 Info 💁‍♂️ - Info: \(info)") - print("🚀 Info 💁‍♂️ - Error: \(error)") - print("🚀 Info 💁‍♂️ - User Cancelled: \(userCancelled)") + private func purchaseAsProduct() async { + do { + let result = try await Purchases.shared.purchase(product: self.package.storeProduct) + self.completedPurchase(result) + } catch { + print("🚀 Purchase failed: 💁‍♂️ - Error: \(error)") } } + + private func completedPurchase(_ data: PurchaseResultData) { + print("🚀 Info 💁‍♂️ - Transaction: \(data.transaction?.description ?? "")") + print("🚀 Info 💁‍♂️ - Info: \(data.customerInfo)") + print("🚀 Info 💁‍♂️ - User Cancelled: \(data.userCancelled)") + } } } diff --git a/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/Offerings/PromoOfferDetailsView.swift b/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/Offerings/PromoOfferDetailsView.swift index cf9e22c075..f91218de40 100644 --- a/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/Offerings/PromoOfferDetailsView.swift +++ b/Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Views/Offerings/PromoOfferDetailsView.swift @@ -98,7 +98,9 @@ struct PromoOfferDetailsView: View { .foregroundColor(.blue) .padding(.vertical, 10) .onTapGesture { - purchasePromo(promotionalOffer: promotionalOffer) + Task { + await self.purchasePromo(promotionalOffer: promotionalOffer) + } } } } @@ -107,12 +109,15 @@ struct PromoOfferDetailsView: View { } } - func purchasePromo(promotionalOffer: PromotionalOffer) { - Purchases.shared.purchase(package: self.package, promotionalOffer: promotionalOffer) { transaction, info, error, userCancelled in - print("🚀 Info 💁‍♂️ - Transactions: \(transaction)") - print("🚀 Info 💁‍♂️ - Info: \(info)") - print("🚀 Info 💁‍♂️ - Error: \(error)") - print("🚀 Info 💁‍♂️ - User Cancelled: \(userCancelled)") + private func purchasePromo(promotionalOffer: PromotionalOffer) async { + do { + let result = try await Purchases.shared.purchase(package: self.package, promotionalOffer: promotionalOffer) + + print("🚀 Info 💁‍♂️ - Transactions: \(result.transaction?.description ?? "")") + print("🚀 Info 💁‍♂️ - Info: \(result.customerInfo)") + print("🚀 Info 💁‍♂️ - User Cancelled: \(result.userCancelled)") + } catch { + print("🚀 Purchase failed: 💁‍♂️ - Error: \(error)") } } }