Commit Graph
54 Commits
Author SHA1 Message Date
fba61f409c Support different modes for depending on RevenueCat when using Tuist (#5888)
* WIP

* Merge branch 'main' into default-tuist-to-local-swift-package

* Cleanup

* Merge branch 'main' into default-tuist-to-local-swift-package

* Fix error with RevenueCatUI

* Removes project v3LoadShedderIntegration from tuist integration

* Add both CI.xcconfig and Local.xcconfig if they are both available

* Remove unnecessary package

* Remove purchases-ios as s tuist dependency

It's already resolved in Tuist/ProjectDescriptionHelpers/ProjectDescriptionPackages.swift

* New tuist project "RevenueCatTests" containing all test targets

* Merge branch 'main' into default-tuist-to-local-swift-package

* Fix Tuist dependency mode issues and clean up project structure

- Use exhaustive switch in ProjectDescriptionPackages instead of if/else if
- Extract shared allDestinations/allDeploymentTargets into ProjectDescriptionHelpers (DRY)
- Fix duplicate ReceiptParser scheme across RevenueCat and RevenueCatTests projects
- Remove stale cross-project test target references from schemes
- Fix bundleId typo in BackendCustomEntitlementsIntegrationTests
- Restore purchases-ios in Tuist/Package.swift for remoteXcodeProject mode
- Make RevenueCat/RevenueCatUI workspace inclusion conditional on dependency mode
- Fix BinarySizeTest to use shared dependency helpers instead of removed APIs
- Fix misleading doc comments on internal dependency helpers

Co-authored-by: Cursor <cursoragent@cursor.com>

* Remove and gitignore file

* Fix Bundle.module ambiguity in RevenueCatUITests and add explicit scheme

Use Bundle.revenueCatUI instead of Bundle.module to resolve ambiguity
when both RevenueCat and RevenueCatUI are imported via @testable in SPM
modes (each module synthesises its own internal Bundle.module).

Add explicit RevenueCatUITests scheme to RevenueCatTests project for
proper scheme generation during full tuist generate.

Made-with: Cursor

* Fix BinarySizeTest localSource deps and remove dead code

Revert BinarySizeTest localSource to explicit .project(target:)
references — it manages its own integration modes independently of
DependencyMode, and the switch to .revenueCat/.revenueCatUI broke it
in the default localSwiftPackage mode (no SPM package declared).

Remove unused allDeploymentTargets constant from RevenueCatUI project.

Made-with: Cursor

* Add priority flush with rate limiting and queuing for feature events

Priority events (paywall impressions, custom paywall events) now trigger
an immediate flush to the backend. A rate limiter (5 calls/60s) prevents
excessive network requests from rapid tracking calls. When a priority
event arrives during an in-progress flush, it is queued and drained
after the current flush completes.

* Extract EventsManagerStrings to separate file to fix file length lint

* Fix integration tests: use non-priority events for flush tests

The `.impression` event now triggers a priority flush, which can
consume the event before the test's explicit `flushPaywallEvents`
call. Replace with `.cancel` (non-priority) since these tests
verify flush mechanics, not event-type behavior.

* Fix duplicate RevenueCat targets in localSwiftPackage mode

Exclude RevenueCat/RevenueCatUI Tuist projects from the workspace when
using localSwiftPackage dependency mode, since the local SPM package
already provides these targets. Including both caused "Multiple commands
produce" build errors (e.g. in the BinarySizeTest CI job).

Also update BinarySizeTest's localSource integration to use SPM package
dependencies instead of Tuist project target references, consistent with
the workspace no longer including those projects in SPM mode.

Made-with: Cursor

* Move rate limiter check to drain phase to prevent queued events from exhausting capacity

When multiple priority events arrived during an in-progress flush, each
one called shouldProceed() on the rate limiter but they all coalesced
into a single pending flush. This wasted rate limiter capacity without
performing actual flushes. Now the rate limiter is only checked when a
flush actually starts in startPendingPriorityFlushIfNeeded().

* Add missing packages declaration to RCTTester project

RCTTester uses .revenueCat and .revenueCatUI dependencies which resolve
to SPM package products in localSwiftPackage mode, but was missing the
packages: .projectPackages declaration needed to provide the package source.

Made-with: Cursor

* Fix Bundle.module resolution for RevenueCatUI snapshot tests

Use #if SWIFT_PACKAGE to select the correct resource bundle in test code:
- SPM builds (CI): Bundle.module resolves to the test target's bundle,
  which contains the test images (header.heic, background.heic)
- Tuist builds: Bundle.revenueCatUI resolves to RevenueCatUI's bundle,
  avoiding ambiguity between multiple Bundle.module definitions

Made-with: Cursor

* Remove internal jwsRepresentation from ObjC API tester

jwsRepresentation is @objc internal on StoreTransaction — it is not part
of the public API (absent from .swiftinterface files). Previously this
compiled because Tuist framework targets expose internal @objc members
in the generated -Swift.h header, but SPM packages only expose public
members.

Made-with: Cursor

* Revert "Merge remote-tracking branch 'origin/rickvdl/priority-flush-events' into default-tuist-to-local-swift-package"

This reverts commit aa585aa9c2, reversing
changes made to 7d10a496ad.

* Restore BinarySizeTest localSource to use Xcode project targets

localSource now uses .project(target:path:) like on main, with
TUIST_RC_XCODE_PROJECT=true set in CI so the workspace includes the
RevenueCat/RevenueCatUI projects. spm uses local SPM package refs.

Added documentation explaining why BinarySizeTest manages its own
dependency integration independently of Environment.dependencyMode.

Made-with: Cursor

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Facundo Menzella <facumenzella@users.noreply.github.com>
Co-authored-by: Rick van der Linden <rick.vanderlinden@revenuecat.com>
2026-03-06 16:33:28 +01:00
Tarek M. Ben Lechhab 82a7afd162 Fix potential infinite recursion in MagicWeather (#6146) 2026-01-30 12:04:54 +01:00
Alejandra WetschandAntonio Pallares 16e2b1e608 Magic Weather Example App - Files reference correction (#5397)
* Magic Weather Example App - Files reference correction

* fix xcodeproj for non-SwiftUI MagicWeather example app

---------

Co-authored-by: Antonio Pallares <antonio.pallares@revenuecat.com>
2025-07-21 14:17:17 +02:00
Antonio Pallares f74872d551 Tuist: unify project settings (#5393)
* tuist: use already-defined `xcconfigFileConfigurations` `Configuration` array

* tuist: rename `project` to `app` (tuist's `Settings` object). Use `.app` or `.framework` throughout the projects in the repo

* rename settings constants
2025-07-17 20:36:59 +02:00
Facundo Menzella 721d2b1740 Add build configurations for tuist workspace (#5364)
* chore: Remove project warnings from examples

* remove extra file

* remove run from RevneueCat and add xctestplans to workspace

* Add build configurations for project

* revert maestro

* remove storyboard

* don't add local xcconfig if not there

* remove additional files - only in workspace

* hide paywall tester scheme

* Add APITester tag

* add BackendIntegrationTestsHostApp

* fixed api testers
2025-07-11 15:31:15 +02:00
Facundo Menzella 03fbe30807 Add basics for a working tuist workspace (#5248) 2025-07-04 11:37:37 +02:00
Toni RicoandBence Pattogato 4d6c51844d Update Extensions.swift (#4987) (#5012)
Co-authored-by: Bence Pattogato <pattogatobence@gmail.com>
2025-04-23 10:29:02 +02:00
Pol Piella Abadia fac4be2852 Update customerInfo from an AsyncStream instead of the PurchasesDelegate in the SwiftUI sample app (#4860)
* Update `customerInfo` from an `AsyncStream` instead

* Simplifies async stream code

* Syncs property back to the Main Thread
2025-03-07 11:36:43 -03:00
Pol Piella Abadia 3bf9fa9576 Uses the remote version of purchases-ios for the SwiftUI sample app (#4841)
* Uses the remote version of `purchases-ios` for the sample app

* Removes framework reference to fix build failure

* Removes workspace

* Resets `Package.resolved` to fix compiler errors

* Re-adds missing dependency

* Updates `README.md`
2025-03-03 16:28:49 +00:00
NachoSoto 2bcd0ce328 5.0.0 changes: support SK2 by default 2024-07-01 14:37:21 -05:00
NachoSoto 761ca1209d New TestStoreProduct for creating mock StoreProducts and Offerings (#2711)
Fixes #1563 and #2193.

This introduces **`DEBUG` and `Swift` only** types that allow creating a
whole `Offering` for tests and SwiftUI previews.

Example:
![Screenshot 2023-06-26 at 12 36
40](https://github.com/RevenueCat/purchases-ios/assets/685609/03d83e65-b95b-40ba-80ad-f8be435c6d3e)

By making it available in only `DEBUG` builds we ensure that apps can't
accidentally try to purchase these products, which would be impossible.
If this is attempted in `DEBUG` builds, we return `ErrorCode`.

When trying to compile this API in release builds, you get an error with
a suggestion:

![image](https://github.com/RevenueCat/purchases-ios/assets/685609/f83b8848-dab6-4ae6-a92d-5c07a30be217)
2023-06-29 14:06:24 -07:00
NachoSoto 442b683cfe Added .xcprivacy for Xcode 15 (#2619)
Example generated report:

![Screenshot 2023-06-09 at 15 16
11](https://github.com/RevenueCat/purchases-ios/assets/685609/5b4265d5-4102-4938-9efa-1915678fc635)
2023-06-14 12:22:35 -07:00
Joseph Kokenge b91dd19c92 SwiftUI Sample Project: Refactor Package terms method to a computed property (#2405)
Note: Not sure if PRs are wanted on Example code.

### Checklist
- [x] If applicable, unit tests
- [ ] If applicable, create follow-up issues for `purchases-android` and
hybrids

### Motivation
Noticed that the terms func was just passing the same `package`.

### Description
Testing: Looks like there are no tests for sample code.

This pull request refactors the terms(for package: Package) method in
the Package extension to a computed property terms. The change not only
improves readability and simplifies access to the package terms, but
also eliminates the need to pass a Package instance to a function that
belongs to the same Package type, which didn't make sense.
By making these changes, we provide a more streamlined and intuitive
approach for developers to access package terms, and eliminate the need
for an explicit method call.
2023-04-13 09:43:10 -03:00
ConfusedVorlon 3cc302bc83 PurchaseTester: PaywallView should respond to changes on the UserView model (#2297)
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.
2023-02-19 18:43:09 -08:00
NachoSoto 9313659efc MagicWeatherSwiftUI: updated README to point to workspace (#2142) 2022-12-20 07:30:14 -08:00
NachoSoto 8806f9df4b MagicWeatherSwiftUI: updated to use async APIs (#1843) 2022-08-17 10:28:24 -07:00
NachoSoto ee2a56165f Added pre-commit hook to ensure API keys aren't committed (#1756)
Fixes [CSDK-273].
2022-07-25 11:56:59 -07:00
NachoSoto ea6d662c03 [skip ci] MagicWeatherSwiftUI: updated to use async API (#1620) 2022-05-26 13:57:25 -07:00
NachoSoto b15255a433 [skip ci] MagicWeather: updated initialization to use new Configuration.Builder (#1619) 2022-05-26 13:20:05 -07:00
NachoSoto 59d4ef8500 MagicWeatherSwiftUI: fixed usage of PurchaseDelegate (#1601)
This was changed in #1460. Additionally, without #1600 this wasn't producing the correct rename, it wasn't finding `DeferredPromotionalPurchaseBlock` anywhere.
2022-05-24 10:09:36 -07:00
NachoSoto 48cb268f17 MagicWeatherSwiftUI: implemented purchases(:shouldPurchasePromoProduct:defermentBlock:) (#1459)
Also added example link from https://stackoverflow.com/a/68386112/401024
2022-04-06 13:19:12 -07:00
NachoSoto 174cdd29e8 MagicWeatherSwiftUI: increased deployment target to iOS 15.0 (#1448)
Not sure why this worked when I added it in #1218, but this `alert` initializer is now only available on iOS 15.0
2022-04-05 11:08:44 -07:00
NachoSoto 81c1398f14 [skip-ci] MagicWeatherSwiftUI: removed reference to SubscriptionPeriod.Unit.unknown (#1319)
Was removed in #1235.
2022-02-19 10:16:46 -07:00
NachoSoto d5ee1543c6 [skip-ci] MagicWeatherSwiftUI: removed redundant Package: Identifiable conformance (#1318)
Already exposed by #1268.
2022-02-19 10:16:37 -07:00
NachoSoto 86dea871ac Re-enabled SK2 (#1213)
Fixes [sc-9602]
2022-01-31 11:22:12 -08:00
NachoSoto 774cc0dee9 MagicWeatherSwiftUI: display error when purchase fails (#1218)
Very simple and crude UI, but it's something. Currently the error was only logged to the console.
2022-01-25 15:38:32 -08:00
aboedo 1cde8c29b0 updated API calls in MagicWeatherSwiftUI (#1192) 2022-01-19 17:38:47 -03:00
NachoSoto f0b6ba6402 MagicWeatherSwiftUI improvements (#1115) 2021-12-29 09:37:04 -08:00
NachoSoto eb2ea68ad8 WeatherSwiftUI: use contentShape to allow tapping on the whole cell (#1082)
Without this, it seems like tapping on the `PackageCellView` sometimes doesn't do anything.
2021-12-15 15:43:18 -08:00
NachoSoto b1a3160537 MagicWeatherSwiftUI: use StoreKit 2 (#1074)
This is a test app, so I think it makes sense to have it use the latest APIs.
2021-12-14 09:55:45 -08:00
NachoSoto e4e49a9bd6 MagicWeatherSwiftUI: fixes for new V4 StoreProduct API (#1072) 2021-12-13 13:21:43 -08:00
NachoSoto d9d8c58858 Updated Package.resolved (#997)
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
2021-11-29 16:55:23 -08:00
aboedo cad10d8769 Storekit 2: update deployment targets (#977)
* 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
2021-11-22 13:04:19 -03:00
c4d43ffdec Storekit 2: milestone 1 (#953)
* 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>
2021-11-22 12:37:33 -03:00
NachoSoto a471353116 Using @unknown default to ensure we handle future cases (#963)
I like to take some credit in this https://twitter.com/NachoSoto/status/943880484978769921?s=20
2021-11-18 09:58:17 -08:00
NachoSoto 3ed96da7bf Updated all uses of "Note" in docs to enhanced format (#966) 2021-11-18 08:24:10 -08:00
NachoSoto 697d5e3b48 Magic Weather SwiftUI: copy RevenueCat.framework (#964) 2021-11-18 08:22:09 -08:00
NachoSoto 25260400ad MagicWeatherSwiftUI: replaced SPM dependency with RevenueCat.xcodeproj (#946)
This allows debugging and changing the SDK code while building the example project.
2021-11-15 16:22:35 -08:00
NachoSoto cf7d3ec665 MagicWeatherSwiftUI: added support for MacCatalyst (#942) 2021-11-15 12:44:20 -08:00
Joshua Liebowitz 271fd11412 Update examples for api updates (#918)
Add deprecations for renamed purchase methods so Xcode can suggest the rename.
Update purchase methods for named completion block instead of _
2021-10-22 15:59:13 -07:00
Joshua Liebowitz f1dd6268c9 Merge branch 'swift_migration' into RCv4
Plus enable integration tests for CI
2021-09-03 10:35:23 -07:00
aboedo e4cf7261ec Update imports (#815)
* import Purchases -> import RevenueCat

* updated Pod name to Purchases

* updated more Pod names
2021-09-03 14:17:37 -03:00
Sundeep Manik 557cc7a7e1 updated sample app READMEs with setup instructions (#710)
* 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
2021-08-04 14:16:32 -07:00
b760f2a21e Swift migration: merge changes from main (#665)
* 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>
2021-07-21 13:14:33 -03:00
aboedo 0b890a7e31 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
2021-07-15 11:26:31 -03:00
Joshua Liebowitz 79008f5674 Switch to Swift Package Manager (#527)
* 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
2021-06-11 15:21:30 -07:00
Joshua Liebowitz ef1dd6ae86 Use main branch for all the things instead of develop (#521) 2021-06-09 10:33:38 -07:00
aboedo d0ac5b9b42 Fix: CI automations with pre-release versions (#514)
* update fastlane

* fixed issues with the automations when reading pre-release version numbers
2021-06-03 18:08:44 -03:00
Cody Kerns 1047ae67f2 comment formatting 2021-02-05 10:30:28 -05:00
Cody Kerns b3285d2b77 Uses UserViewModel property for entitlement check.
Clarifies how PurchaserInfo is fetched/cached.
2021-02-04 09:54:38 -05:00