New SwiftUI Purchase Tester example#1722
Conversation
|
Look at that thing 😻 This is awesome |
aboedo
left a comment
There was a problem hiding this comment.
OMG I think I'm gonna cry
This is absolutely fantastic @joshdholtz 🚀
Small thing: when trying this on a physical device I had to add a copy files phase to copy the RevenueCat framework in it, lmk if I was missing something
| .textFieldAlert(isShowing: self.$showOtherAlert, title: self.revenueCatKind?.rawValue ?? self.thirdPartyKind?.rawValue ?? "<ERROR>", fields: [ | ||
| ("Value", "Value", self.$otherValue), | ||
| ]) { | ||
| if let kind = self.revenueCatKind { |
There was a problem hiding this comment.
I might be missing a few here! This is also using the deprecated version of these so those should be updated with the new attribution namespace thing at some point 🤷♂️
| import SwiftUI | ||
| import RevenueCat | ||
|
|
||
| struct OfferingDetailView: View { |
| import SwiftUI | ||
| import RevenueCat | ||
|
|
||
| struct TransactionsView: View { |
…d attribution stuff
NachoSoto
left a comment
There was a problem hiding this comment.
This is amazing 👏🏻
I know this is just a starting point so none of my comments are blocking.
| productReference = 2CD2C4F5278C9B02005D1CC2 /* PurchaseTester.app */; | ||
| productType = "com.apple.product-type.application"; | ||
| }; | ||
| 2CD2C4FA278C9B02005D1CC2 /* PurchaseTester (macOS) */ = { |
There was a problem hiding this comment.
I would combine both targets into a cross-platform one, but again can be done in a separate PR.
| @@ -0,0 +1,91 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <Scheme | |||
There was a problem hiding this comment.
Ditto for schemes, we don't need one for each platform.
|
Updated with a bunch of suggestions from @NachoSoto 💪 |
### Changes: * Replaced `CustomerInfo.nonSubscriptionTransactions` with a new non-`StoreTransaction` type (#1733) via NachoSoto (@NachoSoto) * `Purchases.configure`: added overload taking a `Configuration.Builder` (#1720) via NachoSoto (@NachoSoto) * Extract Attribution logic out of Purchases (#1693) via Joshua Liebowitz (@taquitos) * Remove create alias (#1695) via Joshua Liebowitz (@taquitos) All attribution APIs can now be accessed from `Purchases.shared.attribution`. ### Improvements: * Improved purchasing logs, added promotional offer information (#1725) via NachoSoto (@NachoSoto) * `PurchasesOrchestrator`: don't log attribute errors if there are none (#1742) via NachoSoto (@NachoSoto) * `FatalErrorUtil`: don't override `fatalError` on release builds (#1736) via NachoSoto (@NachoSoto) * `SKPaymentTransaction`: added more context to warnings about missing properties (#1731) via NachoSoto (@NachoSoto) * New SwiftUI Purchase Tester example (#1722) via Josh Holtz (@joshdholtz) * update docs for `showManageSubscriptions` (#1729) via aboedo (@aboedo) * `PurchasesOrchestrator`: unify finish transactions between SK1 and SK2 (#1704) via NachoSoto (@NachoSoto) * `SubscriberAttribute`: converted into `struct` (#1648) via NachoSoto (@NachoSoto) * `CacheFetchPolicy.notStaleCachedOrFetched`: added warning to docstring (#1708) via NachoSoto (@NachoSoto) * Clear cached offerings and products after Storefront changes (2/4) (#1583) via Juanpe Catalán (@Juanpe) * `ROT13`: optimized initialization and removed magic numbers (#1702) via NachoSoto (@NachoSoto) ### Fixes: * `logIn`/`logOut`: sync attributes before aliasing (#1716) via NachoSoto (@NachoSoto) * `Purchases.customerInfo(fetchPolicy:)`: actually use `fetchPolicy` parameter (#1721) via NachoSoto (@NachoSoto) * `PurchasesOrchestrator`: fix behavior dealing with `nil` `SKPaymentTransaction.productIdentifier` during purchase (#1680) via NachoSoto (@NachoSoto) * `PurchasesOrchestrator.handlePurchasedTransaction`: always refresh receipt data (#1703) via NachoSoto (@NachoSoto)




Motivation / Description
New app that tests almost all iOS SDK functionality.
This is not an example like MagicWeather that shows how to use RevenueCat in an app but will instead be an example for testing all the SDK functions on any RevenueCat app.
History
This wasn't really on my list of things to ever do but I was debugging something a few months ago when I was on call and the easiest way to do it was to build out some of these screens in SwiftUI. I spent a little bit more to polish it up and this was the result 🤷♂️
RocketSim_Recording_iPhone_13_Pro_Max_2022-06-21_12.12.18.mp4