I hit this bug when I first tried the example. My offerings loaded
slowly - so the paywall was empty, and didn't update when the offerings
were retrieved.
### Description
App stores current state in the shared `UserViewModel`, but the
`PaywallView` doesn't currently observe changes on this model - so it only
shows the state at the point where the view was shown.
This is potentially a state where offerings have not yet been retrieved.
This was changed in #1460. Additionally, without #1600 this wasn't producing the correct rename, it wasn't finding `DeferredPromotionalPurchaseBlock` anywhere.
I keep getting Xcode automatically updating these 2. Looks like for 2 reasons:
- #946 got rid of SPM on the MagicWeatherProject
- The dependency got updated
* updated deployment targets in Package.swift
* updated deployment targets in Podspec
* updated deployment targets in xcode project
* updated deployment target in cocoapods integration tests
* updated deployment target in SPM integration tests
* Added note in the v4_api_updates doc to document the new OS requirements
* reverted os version for watchOS back to "6.2" since it seems like `v6_2` doesn't work
* Sk2: fetch products, make purchases (#800)
* added product struct
* added Product protocol and separated wrappers for sk1 and sk2
* added price and localizedPriceString to Product
* added bridging code and first call to generic productsWithIdentifiers
* a lot of cleanup, added a couple more properties for products
* added subscription group id and cleaned up a bit
* Updated productsManager so it forwards the products calls to fetchers for sk1 and sk2
* updated a few tests and API availability checks
* updated a few methods to use productwrapper instead of skproduct
* updated tests in many places and apis
* fixed rebase issues
* fixed a few todos
* fixed a few issues caught by swiftlint
* fixed rebase issues and some visibility issues
* updated a few places to use SK2
* added horrifyingly hacky implementation for purchasing with sk2
* small cleanup, re-added method for getting SKProducts directly
* cleanup
* added caching to sk2 products fetcher
* removed trailing whitespace
* slight cleanup
* added more clarifying comments
* another cleanup
* added missing availability marks for macOS
* fixed availability marks for ProductsFetcher in ProductsManager
* yet another fix for macOS availability checks
* and more fixes for macOS version since 13.0 doesn't exist
* fixed issues in api tester
* fixed pod lib lint on non-arch64 architectures
* bundle update fastlane
* added test for dictionary += operator
* removed unnecessary method for fetching product wrappers
* cleanup file names
* updated references in StoreKitTests
* fixed targets for test file
* fixed rebase issues
* added StoreKit 2 transaction listener in the hopes of getting purchases working, unfortunately doesn't seem to work well
* fix bad refactor
* refactored, move purchasing logic to the orchestrator, added processing of results of SK 2 purchases to the orchestrator and the sk2 listener
* added arch checks in a few places to fix builds in armv7
* added another todo
* updated test for ProductsManager in StoreKit Test
* renamed `Product.swift` -> `ProductWrapper.swift`
* increased timeout for test
* added checks to ensure test compatibility with lower iOS versions
* ProductWrapper -> ProductDetails
* import Purchases -> import RevenueCat
* withProductDetailss -> withProductDetails
* productDetailss -> productDetails
* productsFromOptimalStore -> productsFromOptimalStoreKitVersion
* linting
* `Task.init {` -> `Task {`
* added comment explaining explicit cancel
* more improvements from PR comments
* `} catch let error {` -> `} catch {`
* readability improvements
* move init to the top for consistency
* extracted logging string into PurchasesString
* extracted another string
* added todo comment
* improvements from PR comments, removed redundant method
* removed unused method, more renames and improvements from PR comments
* updates xcode version for CI
* split files into StoreKit 1 and StoreKit 2 groups
* fix indentation
* fixed rebase issues
* Fix PurchaseTester project (#847)
* CheckTrialOrIntroPriceEligibility StoreKit2 support (#807)
* Sk2: fetch products, make purchases (#800)
* added product struct
* added Product protocol and separated wrappers for sk1 and sk2
* added price and localizedPriceString to Product
* added bridging code and first call to generic productsWithIdentifiers
* a lot of cleanup, added a couple more properties for products
* added subscription group id and cleaned up a bit
* Updated productsManager so it forwards the products calls to fetchers for sk1 and sk2
* updated a few tests and API availability checks
* updated a few methods to use productwrapper instead of skproduct
* updated tests in many places and apis
* fixed rebase issues
* fixed a few todos
* fixed a few issues caught by swiftlint
* fixed rebase issues and some visibility issues
* updated a few places to use SK2
* added horrifyingly hacky implementation for purchasing with sk2
* small cleanup, re-added method for getting SKProducts directly
* cleanup
* added caching to sk2 products fetcher
* removed trailing whitespace
* slight cleanup
* added more clarifying comments
* another cleanup
* added missing availability marks for macOS
* fixed availability marks for ProductsFetcher in ProductsManager
* yet another fix for macOS availability checks
* and more fixes for macOS version since 13.0 doesn't exist
* fixed issues in api tester
* fixed pod lib lint on non-arch64 architectures
* bundle update fastlane
* added test for dictionary += operator
* removed unnecessary method for fetching product wrappers
* cleanup file names
* updated references in StoreKitTests
* fixed targets for test file
* fixed rebase issues
* added StoreKit 2 transaction listener in the hopes of getting purchases working, unfortunately doesn't seem to work well
* fix bad refactor
* refactored, move purchasing logic to the orchestrator, added processing of results of SK 2 purchases to the orchestrator and the sk2 listener
* added arch checks in a few places to fix builds in armv7
* added another todo
* updated test for ProductsManager in StoreKit Test
* renamed `Product.swift` -> `ProductWrapper.swift`
* increased timeout for test
* added checks to ensure test compatibility with lower iOS versions
* ProductWrapper -> ProductDetails
* import Purchases -> import RevenueCat
* withProductDetailss -> withProductDetails
* productDetailss -> productDetails
* productsFromOptimalStore -> productsFromOptimalStoreKitVersion
* linting
* `Task.init {` -> `Task {`
* added comment explaining explicit cancel
* more improvements from PR comments
* `} catch let error {` -> `} catch {`
* readability improvements
* move init to the top for consistency
* extracted logging string into PurchasesString
* extracted another string
* added todo comment
* improvements from PR comments, removed redundant method
* removed unused method, more renames and improvements from PR comments
* updates xcode version for CI
* split files into StoreKit 1 and StoreKit 2 groups
* fix indentation
* adds check intro trial sk2 support
* fixes and renames
* removes debugging variables
* fixes and use of ProductsManager
* fix sk2Product isEligibleForIntroOffer
* remove swiftlint warning
* adds header and links to issues
* fix strings
* early return
* indentation fix
* removes maccatalyst
* fixes compilation and renames to checkEligibility
* changes on ProductsManager adding a specific sk2 function
* makes changes in TrialOrIntroPriceEligibilityChecker
* rename function to sk2ProductDetails
* some renaming
* duplicated ProductsFetcherSK1Tests.swift
* add XCTUnwrap
* revert
Co-authored-by: aboedo <andresboedo@gmail.com>
* fixed offeringsManagerTests (#856)
* Separate storekit test and backend tests (#845)
* Sk2: fetch products, make purchases (#800)
* added product struct
* added Product protocol and separated wrappers for sk1 and sk2
* added price and localizedPriceString to Product
* added bridging code and first call to generic productsWithIdentifiers
* a lot of cleanup, added a couple more properties for products
* added subscription group id and cleaned up a bit
* Updated productsManager so it forwards the products calls to fetchers for sk1 and sk2
* updated a few tests and API availability checks
* updated a few methods to use productwrapper instead of skproduct
* updated tests in many places and apis
* fixed rebase issues
* fixed a few todos
* fixed a few issues caught by swiftlint
* fixed rebase issues and some visibility issues
* updated a few places to use SK2
* added horrifyingly hacky implementation for purchasing with sk2
* small cleanup, re-added method for getting SKProducts directly
* cleanup
* added caching to sk2 products fetcher
* removed trailing whitespace
* slight cleanup
* added more clarifying comments
* another cleanup
* added missing availability marks for macOS
* fixed availability marks for ProductsFetcher in ProductsManager
* yet another fix for macOS availability checks
* and more fixes for macOS version since 13.0 doesn't exist
* fixed issues in api tester
* fixed pod lib lint on non-arch64 architectures
* bundle update fastlane
* added test for dictionary += operator
* removed unnecessary method for fetching product wrappers
* cleanup file names
* updated references in StoreKitTests
* fixed targets for test file
* fixed rebase issues
* added StoreKit 2 transaction listener in the hopes of getting purchases working, unfortunately doesn't seem to work well
* fix bad refactor
* refactored, move purchasing logic to the orchestrator, added processing of results of SK 2 purchases to the orchestrator and the sk2 listener
* added arch checks in a few places to fix builds in armv7
* added another todo
* updated test for ProductsManager in StoreKit Test
* renamed `Product.swift` -> `ProductWrapper.swift`
* increased timeout for test
* added checks to ensure test compatibility with lower iOS versions
* ProductWrapper -> ProductDetails
* import Purchases -> import RevenueCat
* withProductDetailss -> withProductDetails
* productDetailss -> productDetails
* productsFromOptimalStore -> productsFromOptimalStoreKitVersion
* linting
* `Task.init {` -> `Task {`
* added comment explaining explicit cancel
* more improvements from PR comments
* `} catch let error {` -> `} catch {`
* readability improvements
* move init to the top for consistency
* extracted logging string into PurchasesString
* extracted another string
* added todo comment
* improvements from PR comments, removed redundant method
* removed unused method, more renames and improvements from PR comments
* updates xcode version for CI
* split files into StoreKit 1 and StoreKit 2 groups
* fix indentation
* updated all references from StoreKitTests -> BackendIntegrationTests
* updated references in a few more places
* updated name of target back to StoreKitTests so the cert doesn't get updated 🙄
* fixed issues in tests
* updated arch checks for arm devices from if arm64 to if !arm, so that the code will run successfully in intel macs
* upgraded deployment target to 12.0 to fix issues when compiling StoreKit 2.
Removed arch checks.
* added separate `UnitTestsHostApp` since the `StoreKitTest` app has higher minimum deployment target than the unit tests target
* added separate scheme for unit tests to address the need of StoreKitTest
* fixed scheme name for Scanfile
* small fixes
* added skipping of test depending on OS version availability
* added pre-warming of iOS device since tests aren't starting up correctly in CI
* added pre-warming of iphone 6 and tv
* fixed devices setup since iPhone 6 is no longer available in CircleCI
* renamed StoreKitTestApp + StoreKitTests -> BackendIntegrationTests + HostApp
* more fixes to naming
* updated Nimble version, more fixes to paths
* removed host app for regular unit tests, fixed setup
* even more naming fixes, updated the scan schemes so we don't try to test appleTV for the StoreKitUnitTests
* enabled backend_integration_tests for all commits
* added missing dependency to RevenueCat framework from StoreKitUnitTests target
* fixed dependencies between targets, which would compile more targets than necessary and would have issues where the main framework would get built for the wrong platform
* update fastlane
* fixed lane name
* fixed deployment target for backend integration tests
* updated scan device OS for backend integration tests to 15.0
* fixed integration tests running wrong fastlane lane, added pre-warming devices for regular unit tests, added command line tools installation step
* removed command line tools installation step
* updated device name since iPhone SE isn't available on circleCI
* updated iPhone SE -> iPhone 8 in a couple more places
* removed pre-warming of devices, since it has been removed from Xcode 13
* removed 14.5 device from tests for now
* removed signing from backend integration tests
* fixed rebase issues
* Sk2: ProductDetails cleanup and improvements (#832)
* moved logic to wrap products into productsFetcher, added basic test to compare sk1Wrapper and sk2Wrapper
* added more checks to cover all existing properties for productWrappers
* added test to check that sk1 wrapper works correctly
* added test for SK2 product wrapper
* renamed internal method `purchase(product:` -> `purchase(sk1Product:`
* moved StoreKit2TransactionListener into corresponding group in project
* added base file for PurchaseOrchestratorTests, improved a couple of version checks for tests
* updated imports to `RevenueCat`
* re-added @available in a couple of tests
* update naming: ProductWrapper -> ProductDetails
* fix rebasing issue
* added type aliases for legacy and new skproduct, updated references to them in many places
* renamed mockSKProduct -> mockLegacySKProduct
* more cleanup
* updated naming in a few more places
* and more naming updates
* final batch of naming updates
* updated naming from new and legacy sk products to sk1 and sk2 products
* fixed naming issues with variable names that started in uppercase
* more fixes to variable names
* even more naming fixes
* final batch of naming updates, rebase fixes
* several fixes from rebase
* removed another arch check
* fixes from PR comments
* fixed missing mocks for MockProductsManager
* more "productDetailss" var renames
* removed scan_scheme env variable since we're setting it manually
* added extra test configuration for UnitTests scheme, set test ordering to random
* small ci configuration updates
* added more generous timeout for one test case
* added pre-warming of simulators
* added device pre-warming at the fastlane level
* added test plan
* added manual sleep of 5 mins to see if that fixes the testing issues
* re-added manual opening of simulators, otherwise the wait makes no sense
* made the wait for simulator bit only happen in ci
* improvement from PR comments
* fixed one reason for app crash in iOS < 15, since SceneDelegate was missing
* added check for subscriptionGroupIdentifier
* updated to use XCTSkip instead of early return in a couple of tests
* Tests for CheckTrialOrIntroductoryPriceEligibility StoreKit2 using StoreKitTests (#863)
* Storekit 2: fix tests for iOS 14.5 (#890)
* updated storage of underlyingSK2Product to use Any to prevent crashes in 14.5 devices
* added comment and small cleanup
* re-added iOS 14.5 devices to fastlane scan
* fixed rebase issues
* merge storekit_2_disable_mac_builds
* Sk2 purchase tests (#873)
* added tests skeleton, cleaned up handling of purchase sk2 package
* code clean up, added mocks to sk unit tests target, clean up tests code
* added mockStoreKit2Listener, fixed purchasesOrchestator test
* implemented missing test cases
* casted SK2Product to any for storing to prevent linking issues
* fixed more issues with linking + moved PurchasesOrchestratorTests to storekit tests
* linting
* fixed duplicate files in build phase
* fixed more issues with linking on older OS
* fixed rebase issues
* fix one test in SwiftAPITester
* updated xcode version for swift api tester
* updated api testers to use an existing bundle id to prevent code signing issues
* remove development team + undo bundle id updates
* added fastlane match readonly step
* re-add dev team
* re-add dev team to release builds for objc api tester ios
* updated certs to use fastlane match
* specified missing params for match
* fixed copy/paste issue
* `MockStoreKit2Listener` -> `MockStoreKit2TransactionListener`
* added clearing of user defaults before every test run
* added crude handling of the user cancelled case for SK2 purchases.
* fixed indentation
* updated test name to reflect what it's actually testing
* reset the value of `failTransactionsEnabled` before every test
* moved to using `resetToDefaultState`
* Removes `RequiresXcode13` (#895)
* improve pre-warming and fix flaky tests (#897)
* replaced manual pre-warming with orb
* removed appleTV from prewarming list
* removed duplicate source file
* added test timeouts
* added artificial wait before running storekit tests
* made the artificial wait run only once
* removed unnecessary param
* moved the `Self.hasWaited = true` line above, removed unnecessary parenthesis
* doubled the wait time just in case, made it a static let.
* doubled initial wait time again
* removed another instance of `wait_for_simulator:true`
* Temporarily disable sk2 purchases (#898)
* added a feature flag to disable SK2 temporarily
* fixed tests
* Show Manage Subscriptions public API (#896)
* fix rebase issue
* fixed rebase issues
* Re-enable macOS builds (#923)
* updated xcode version to 13.1.0
* re-enabled macOS builds, re-added API tester for macOS
* Merge main into storekit_2 (#930)
* Begin Refund Request (#924)
* Fix/explicit errors on tasks (#940)
* replaced `Task.init` with `_ = Task<Void, Never>`, so that if the contents of the task throw, the compiler forces us to handle the exception
* added link with explanation to the swift style guide
* Fix: storekit 2 tests on older OS versions (#951)
* removed duplicate line for devices
* fixed tests for older os versions by not storing SK2 types directly in the tests target.
* fixed copy/pasta
* merged main into sk2 (#952)
* improvements from PR comments
* more improvements from PR comments
* even more improvements from PR comments
* more improvements from PR comments
* updated to use the new lock
* removed outdated comment
* added missing cases to switch
* refactor to pass in the systemInfo to productsManager, and to reuse existing instances for intro eligiblity
* made useStoreKit2IfAvailable an instance variable instead of static
* added test cases for fetching from optimal sk with different sk version preferences
* fixed instance of the wrong method being called from overriden `setUpWithError`
* oops, fixed missing `try`
* added more detail to fatalError message when sk version can't be determined
* split tests for `TrialOrIntroPriceEligibilityChecker` into SK1 and SK2
* fix merge conflicts
Co-authored-by: Cesar de la Vega <cesarvegaro@gmail.com>
Co-authored-by: beylmk <maddie@revenuecat.com>
* updated sample app READMEs with setup instructions
* fixed the xcodeproj name file for SwiftUI
* updated a few file locations to be clearer
* updated another file location
* Create CODE_OF_CONDUCT.md (#589)
Resolves#588
* Update issue templates (#537)
* Update issue templates
Looks like GitHub wants this named differently 🤷♂️
* Delete migration_task.md
* Update custom.md
* Update README.md (#636)
Just removing the outdated image on the readme
* ETags support (#509)
* identity v3: public-facing changes (#453)
* re-added the public-facing changes for identity v3
* updated nullability for errors in login
* temporarily removed version from PurchasesCoreSwift in Purchases.podspec
* updated sample app to use identity v3
* improved copy in RCPurchases.h
* Integration tests: Identity v3 test cases (#506)
* added extra test case for storekit tests
* added more test cases
* added a few more test cases
* slight cleanup
* added another, particularly gnarly test case
* updated test case name
* added another test case
* one more test case
* refactors and cleanups, made chained calls more reliable for one test case
* fixed name, added debug information to appUserIDs
* fixed issue with test clearing transactions when it shouldn't
* formatting
* code cleanup
* update call to replace api key and proxy url to catch issues if proxy url is empty
* updated syntax since lanes are executed in a block
* updated xcode and simulator versions for storekitTests
* updated syntax for setting log levels
* fixed fastlane changes that broke replace_in for storekit_tests
* update fastlane
* improvements from PR comments
* restricted storekit_tests to release tags and branches
* removed signing for storekittest app since it only runs in simulator
* removed storekitTestCertificate.cer since it's not needed, re-added tests just in case
* restricted storekit_tests to release branches and tags again now that they passed
* Bump addressable in /IntegrationTests/CocoapodsIntegration (#647)
Bumps [addressable](https://github.com/sporkmonger/addressable) from 2.7.0 to 2.8.0.
- [Release notes](https://github.com/sporkmonger/addressable/releases)
- [Changelog](https://github.com/sporkmonger/addressable/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sporkmonger/addressable/compare/addressable-2.7.0...addressable-2.8.0)
---
updated-dependencies:
- dependency-name: addressable
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* remove unused typedef to fix build warning (#649)
* Release: 3.12.0 (#648)
* looks like in some rebase createAlias got un-deprecated, re-deprecated it
* updated changelog and version number to 3.12.0
* added missing PR for identity v3 in changelog
* added install swiflint step to more ci jobs
* fix typo in circleci config.yml
* updated the name of the swiftlint step in xcode so it's more obvious at first glance when it fails
* fixed an issue where a few targets wouldn't compile correctly when doing carthage archive because they were pointing to unreleased versions of Purchases.
* re-added the old carthage script for archives
* added `vendor` folder to excluded directories for swiftlint
* Preparing for next version (#656)
Co-authored-by: Andy Boedo <andresboedo@gmail.com>
* added swiftlint installation to all places that were missing it (#657)
* Release: 3.12.1 (#659)
* renamed eTagInResponse -> maybeEtagInResponse to resolve conflict in some versions of Xcode
* updated version number to 3.12.1 and changelog
* added `scan_derived_data` to excluded directories for swiftlint
* Preparing for next version (#661)
Co-authored-by: Distiller <distiller@static.38.39.178.68.cyberlynk.net>
* Fix: Calling `setDebugLogsEnabled(false)` enables debug logs when it should not (#663)
* fixed a bug where setting debugLogsEnabled = false would still set them to true
* cleanup: replaced if / else with ternary operator
* reverted changes in SystemInfo initialization
* format fixes
* removed rchttpRequest
* updated call in `buildTvWatchAndMacOS`: install-gems -> install-dependencies
* undo accidental whitespace
* deleted empty RCSystemInfo.m file
Co-authored-by: Joshua Liebowitz <taquitos@users.noreply.github.com>
Co-authored-by: Corey Rabazinski <6013553+CoreyRab@users.noreply.github.com>
Co-authored-by: Cesar de la Vega <cesarvegaro@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: revenuecat-ops <60164957+revenuecat-ops@users.noreply.github.com>
Co-authored-by: Distiller <distiller@static.38.39.178.68.cyberlynk.net>
* looks like in some rebase createAlias got un-deprecated, re-deprecated it
* updated changelog and version number to 3.12.0
* added missing PR for identity v3 in changelog
* added install swiflint step to more ci jobs
* fix typo in circleci config.yml
* updated the name of the swiftlint step in xcode so it's more obvious at first glance when it fails
* fixed an issue where a few targets wouldn't compile correctly when doing carthage archive because they were pointing to unreleased versions of Purchases.
* re-added the old carthage script for archives
* added `vendor` folder to excluded directories for swiftlint
* Initial removal of some fatalError calls
* Update for Nimble SPM limitations
Nimble doesn't support raiseException() when built with SPM
- paves way for SPM support and M1 support
* Update UInt8+ExtensionsTests.swift
Specify specific BitShiftError cases in test
* Let's just remove carthage while we're at it.
* Remove integration-tests-carthage from config.yml
* Update fastlane Fastfile for removing carthage
* Linter errors
* Updates for comments
* Fix config.yml
* Update ObjCThrowExceptionMatcher.swift
* private instead of fileprivate, I always forget which is more restrictive