* Remove M1 base image + test with installing simulator runtime on xcode 14.3.1
* Comment out other jobs for testing
* Added SnapshotTestingStub Package.swift for Swift 5.8 when running on CircleCI with Xcode 14.3.1
* Re-add rosetta step for iOS 13 simulators
* Fix compilation errors targeting iOS 13 because of SKTesting API not being available
* Reverting temporary commenting out CircleCI jobs
* Removed iOS 13 test support since it was only used for generating snapshots, which failed
* Removed M1 specific Mint dependency from CircleCI config
* Simplified CircleCI config by removing macos 12.6 executer since it's no longer used
* Remove last mention of old macos executor
* Removed the validate Package.swift file for Swift 5.7 build step
* Removed iOS 14 test from default build and run
* Removed support for Swift 5.7 and removed related Swift version checks
* Revert "Temporary revert of automatic health reporting in the SDK (#5353)"
This reverts commit dd7086fd98.
* Do not run health check when running integration tests
* Revert "fix `Purchases` temporary leak when running SDK health check (#5350)"
This reverts commit 26de54308c.
* Revert "[DX-457] Log the SDK configuration report on every `#DEBUG` run (#5317)"
This reverts commit 21f226de00.
* Creates a brand new SDK Manager to reuse logic across different classes
* Updates to use the new manager
* Adds a new method to log the health report to the console only for debug builds
* Run health check for debug builds
* Fixes sendable warnings that got introduced with new manager
* Fixes swiftlint violations
* Adds unit tests for the new SDK Health manager
* Creates a new authorization provider
* Injects the new authorization provider
* Tidies and cleans up unit tests
* Adds a new configuration value
* Updates configuration unit tests
* Makes sure that values are only set on DEBUG configuration
* Reverts state of default value
* Updates wording of output message
* Fixes the wrong wording of error message
* Logs the word RevenueCat along with report title
* Fixes wording issues in error messages
* Addresses PR comments
* Adds extra checks
* Renames configuration value
* Removes unnecessary `Task`
* Renames parameter
* Calls the new endpoint in the BE to check if the app is available or not
* Do not log or perform the report operations if it is not available
* Missing xcodeproj changes
* Adds unit test coverage
* Turns validation on by default
* Creates a new path for the report availability endpoint
* We need to bypass auth but make sure that requests are still signed
* Updates the name of the response field
* Updates unit tests target with new response structure
* Handles no credentials case more gracefully
* Adds new unit tests for the new No ASC credentials warning
* Updates the file's header comment
* Adds documentation
* Wraps calls in necessary compiler directives
* Hide all report-related content behind compiler directives
* Makes more health-related functionality DEBUG only
* Addresses PR comments
* Updates all unit test build failures
* Gets it back to compile on `CUSTOM_ENTITLEMENT_COMPUTATION`
* Removes configuration value
* Updates logging to only include issues
* Adds a mock method for the health report availability request
* Forks into a separate method to be preserver backwards compatibility
* Resets `PurchasesDiagnosticsHealth` to state before merge
* Adds missing unit tests
* Fixes lint errors
* Fixes errors
* Updates documentation
* Moves types under the debug flag
* Moves more types under debug
* Adds reference to error in documentations
* Initial app creation
* Initial screen
* Installs and configures the SDK
* Creates a full Swift 6 compliant ViewModel
* Adds a demo customer center button
* Fixes icon name
* Updates a bit of the logic to fetch offerings
* Updates initial layout by showing offerings
* Makes more progress with a VERY DRAFT and VERY WIP screen
* Creates a new network path and requests
* Creates a new health API and adds it to the BE class
* Creates a `checkOfferings` method
* Pushes local changes
* Moved viewmodels to separate files
* Prepared some basic UI structure
* Initial shell of the new method for testing
* Initial implementation of `HealthReportOperation` from the SDK
* Passes `appUserId` through to the internal API
* Adds a new path called `appUserID`
* Removes 'old' `appHealth` endpoint
* Creates a new model for the network response
* Report should be the response type
* Updates backend request
* Updates types and documentation for the new internal request
* Moves validation into its own file
* Replaces method for DebugViewModel
* Updates error messages
* Updates the `Status` section
* Adds logic to show failure reason
* Removes Sample App from PR
* Resets `Package.resolved`
* Availability checks
* Check if device is authorized to make payments
* Fixes all SwiftLint errors
* Updates `ProductStatus` to not have a raw value of String
* Minor style fixes
* Removes warning
* Adds more availability checks
* Fixes comments
Co-authored-by: Antonio Pallares <ajpallares@users.noreply.github.com>
* Simplifies logic
* Updates comment
* Updates the comments to denote that this method is not intended for production use
* Removes android-only invalid SDK version error
* Adds an action button that the user can use to open the dashboard
* Updates copy about non-actionable item
* Prefers `Your RevenueCat Configuration` to `The Dashboard`
* Removes `Sendable`-related warnings
* Fixes unit tests on CI/CD
* Fixes tests
* Adds unit test for offering configuration error
* Adds unit test for no packages in default offering
* Adds unit test for generic offering configuration
* Removes periods from the end of the error messages
* Adds unit tests for all new errors
* Fixes linter errors
* Wrap in a `DEBUG` compiler directive
* Includes all products in the healthy check status to be used in the Sample App
* Updates report to include product and offering information
* Moves logic over to the report rather than being exclusive to the Debug View
* Fixes CI/CD failures
* Updates the asset for the health check status
---------
Co-authored-by: Hidde van der Ploeg <hiddevanderploeg@me.com>
Co-authored-by: Antonio Pallares <ajpallares@users.noreply.github.com>
### Changes:
- `InternalAPI` is now `Sendable` to deal with new compilation error
- `PaywallEventStoreType` is now `Sendable`
- Extracted `SK2BeginRefundRequestHelperType` to make
`SK2BeginRefundRequestHelper` `Sendable`
- Updated `MockSK2BeginRefundRequestHelper` to be thread-safe and
`Sendable`
- Fixed compilation error in `DebugContentViews`
- Fixed compilation error in `DebugViewModel`
- Fixed compilation error in `StoreMessagesHelper`
Fixes https://github.com/RevenueCat/purchases-capacitor/issues/100 and
https://app.circleci.com/pipelines/github/RevenueCat/purchases-ios/14093/workflows/b3f8d001-6f39-40db-a5c5-00fc37d0211e/jobs/105838
```
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 ??? 0x0 ???
1 libswiftCore.dylib 0x18f9b8cf8 swift_getSingletonMetadata + 956
2 RevenueCat 0x107f42de4 type metadata accessor for DebugViewModel + 64
3 libobjc.A.dylib 0x18017d938 realizeClassMaybeSwiftMaybeRelock(objc_class*, mutex_tt<false>&, bool) + 116
4 libobjc.A.dylib 0x180184eb0 realizeAllClasses() + 168
5 libobjc.A.dylib 0x180187b3c objc_copyClassList + 36
6 XCTestCore 0x10532fcb0 +[XCTestCase(RuntimeUtilities) _allSubclasses] + 36
7 XCTestCore 0x10532fdb8 +[XCTestCase(RuntimeUtilities) allSubclasses] + 16
```
Both `XCTest` (to load tests at runtime) and `Capacitor` use
`objc_getClassList`. That's broken before iOS 16 and will try to load
the metadata for `DebugViewModel` even though it's not `@available`.
A similar issue has been reported before:
https://openradar.appspot.com/radar?id=4970535809187840 /
https://github.com/apple/swift/issues/58099
This adds a layer of indirection so loading `DebugViewModel` at runtime
doesn't require the metadata for `NavigationPath`.
### Context:
`#if os(iOS)` no longer evaluates to `true` when compiling for
`visionOS`
Which means we need `|| os(xrOS)`.
But to support older Xcode we need `#if swift(>=5.9) && os(xrOS)`.
But, fun fact, short-circuiting doesn’t work in `Xcode 13`.
And we still need that to run iOS <15 tests (`FB12223404` /
`FB12805891`)
💩
This works around that by defining our own `VISION_OS` flag.
### Changes:
- Added `VISION_OS` compile time flag to determine SDK
- Replaced `#if os(xrOS)` with `#if VISION_OS`
- Added flag to `Package.swift` (thanks @neonichu for helping with this)