In-app purchases and subscriptions made easy. Support for iOS, watchOS, tvOS, macOS, and visionOS.
MIT License
Bot releases are visible (Hide)
Published by RCGitBot over 1 year ago
DispatchTimeInterval
& Date
: avoid 32-bit overflows, fix watchOS
crashes (#2342) via NachoSoto (@NachoSoto)AppleReceipt.mostRecentActiveSubscription
: performance optimization (#2332) via NachoSoto (@NachoSoto)CI
: also run tests on watchOS
(#2340) via NachoSoto (@NachoSoto)RELEASING.md
: added GitHub rate limiting parameter (#2336) via NachoSoto (@NachoSoto)iff
with if and only if
(#2323) via @aboedoPurchases.restorePurchases
: added docstring about successful results (#2316) via NachoSoto (@NachoSoto)RELEASING.md
: fixed hotfix instructions (#2304) via NachoSoto (@NachoSoto)PurchaseTester
: fixed leak when reconfiguring Purchases
(#2311) via NachoSoto (@NachoSoto)ProductsFetcherSK2
: add underlying error to description (#2281) via Chris Vasselli (@chrisvasselli)Published by RCGitBot over 1 year ago
Bundle: Sendable
conformance (#2301)PurchasesOrchestrator
compilation error on Xcode 14.3 beta 1 (#2292) via NachoSoto (@NachoSoto)Published by RCGitBot over 1 year ago
PurchaseOrchestrator
: always refresh receipt purchasing in sandbox (#2280) via NachoSoto (@NachoSoto)BundleSandboxEnvironmentDetector
: always return true
when running on simulator (#2276) via NachoSoto (@NachoSoto)OfferingsManager
: ensure underlying OfferingsManager.Error.configurationError
is logged (#2266) via NachoSoto (@NachoSoto)UserDefaultsDefaultTests
: fixed flaky failures (#2284) via NachoSoto (@NachoSoto)BaseBackendTest
: improved test failure message (#2285) via NachoSoto (@NachoSoto)HTTPRequest.Path.health
: don't cache using ETagManager
(#2278) via NachoSoto (@NachoSoto)EntitlementInfos.all
: fixed docstring (#2279) via NachoSoto (@NachoSoto)StoreKit2StorefrontListener
: added tests to fix flaky code coverage (#2265) via NachoSoto (@NachoSoto)NetworkError
: added underlying error to description (#2263) via NachoSoto (@NachoSoto)Signing.verify(message:hasValidSignature:with:)
(#2216) via NachoSoto (@NachoSoto)Published by RCGitBot over 1 year ago
738f255
to 9255366
(#2264) via dependabot[bot] (@dependabot[bot])Gemfile.lock
(#2254) via Cesar de la Vega (@vegaro)HTTPClient
: added support for sending X-Nonce
(#2214) via NachoSoto (@NachoSoto)Configuration
: added (internal
for now) API to load public key (#2215) via NachoSoto (@NachoSoto)Any
uses for workaround with Box
(#2250) via NachoSoto (@NachoSoto)HTTPClientTests
: fixed failing test with missing assertions (#2262) via NachoSoto (@NachoSoto)HTTPClientTests
: refactored tests to use waitUntil
(#2257) via NachoSoto (@NachoSoto)StoreKit1WrapperTests
: avoid using Bool.random
to fix flaky code coverage (#2258) via NachoSoto (@NachoSoto)IntroEligibilityCalculator
: changed logic to handle products with no subscription group (#2247) via NachoSoto (@NachoSoto)Published by RCGitBot over 1 year ago
CustomerInfoManager
: improved thread-safety (#2224) via NachoSoto (@NachoSoto)StoreKitIntegrationTests
: replaced XCTSkipIf
with XCTExpectFailure
(#2244) via NachoSoto (@NachoSoto)PurchasesOrchestrator
: changed ReceiptRefreshPolicy.always
to .onlyIfEmpty
after a purchase (#2245) via NachoSoto (@NachoSoto)Published by RCGitBot over 1 year ago
IntroEligibilityCalculator
: fixed logic for subscriptions in same group (#2174) via NachoSoto (@NachoSoto)PurchasesOrchestrator
: finish SK2 transactions from StoreKit.Transaction.updates
after posting receipt (#2243) via NachoSoto (@NachoSoto)Purchases
: fixed documentation warnings (#2241) via NachoSoto (@NachoSoto)TrialOrIntroPriceEligibilityChecker
: use TimingUtil
to log when it takes too long (#2238) via NachoSoto (@NachoSoto)fastlane-plugin-revenuecat_internal
(#2239) via NachoSoto (@NachoSoto)OperationDispatcher.dispatchOnMainActor
(#2236) via NachoSoto (@NachoSoto)PurchaseTester
: added contents of CHANGELOG.latest.md
to TestFlight
changelog (#2233) via NachoSoto (@NachoSoto)SystemInfo.isApplicationBackgrounded
: added overload for @MainActor
(#2230) via NachoSoto (@NachoSoto)Published by RCGitBot over 1 year ago
Purchases
: avoid potential crash when initializing in the background (#2231) via NachoSoto (@NachoSoto)PurchaseTester
: ignore errors when restoring purchases (#2228) via NachoSoto (@NachoSoto)PurchaseTester
: fixed isPurchasing
state when purchasing fails (#2229) via NachoSoto (@NachoSoto)PurchaseTester
: setting changelog
when submitting to TestFlight
(#2232) via NachoSoto (@NachoSoto)SPM
: added APPLICATION_EXTENSION_API_ONLY
flag to RevenueCat
and ReceiptParser
(#2217)" (#2225) via NachoSoto (@NachoSoto)Published by RCGitBot almost 2 years ago
Xcode
version (#2222) via NachoSoto (@NachoSoto)SPM
: added APPLICATION_EXTENSION_API_ONLY
flag to RevenueCat
and ReceiptParser
(#2217) via NachoSoto (@NachoSoto)PurchaseTester
: added section to visualize AppleReceipt
(#2211) via NachoSoto (@NachoSoto)Published by RCGitBot almost 2 years ago
ReceiptParser.fetchAndParseLocalReceipt
(#2204) via NachoSoto (@NachoSoto)PurchasesReceiptParser
: added API to parse receipts from base64
string (#2200) via NachoSoto (@NachoSoto)CustomerInfo
: support parsing schema version 2 to restore SDK v3.x
compatibility (#2213) via NachoSoto (@NachoSoto)JSONDecoder
: added decoding type when logging DecodingError.keyNotFound
(#2212) via NachoSoto (@NachoSoto)ReceiptParserTests
(#2203) via NachoSoto (@NachoSoto)PurchaseTester
for macOS
(#2011) via NachoSoto (@NachoSoto)ReceiptFetcher
: refactored implementation to log error when failing to fetch receipt (#2202) via NachoSoto (@NachoSoto)PostReceiptDataOperation
: replaced receipt base64
with hash
for cache key (#2199) via NachoSoto (@NachoSoto)PurchaseTester
: small refactor to simplify Date
formatting (#2210) via NachoSoto (@NachoSoto)PurchasesReceiptParser
: improved documentation to reference default
(#2197) via NachoSoto (@NachoSoto)CachingTrialOrIntroPriceEligibilityChecker
(#2007) via NachoSoto (@NachoSoto)Published by RCGitBot almost 2 years ago
ReceiptParser
SPM (#2155) via NachoSoto (@NachoSoto)PurchasesReceiptParser
and AppleReceipt
(#2153) via NachoSoto (@NachoSoto)Restore purchases
: post product data when posting receipts (#2178) via NachoSoto (@NachoSoto)Dictionary.merge
(#2190) via NachoSoto (@NachoSoto)CircleCI
: use Xcode 14.2.0 (#2187) via NachoSoto (@NachoSoto)ReceiptParser
: a few documentation improvements (#2189) via NachoSoto (@NachoSoto)Purchase Tester
: fixed TestFlight
deployment (#2188) via NachoSoto (@NachoSoto)Purchase Tester
: display specific IntroEligibilityStatus
(#2184) via NachoSoto (@NachoSoto)Purchase Tester
: fixed SubscriptionPeriod
(#2185) via NachoSoto (@NachoSoto)Published by RCGitBot almost 2 years ago
ErrorUtils.purchasesError(withUntypedError:)
: handle PublicError
s (#2165) via NachoSoto (@NachoSoto)SK1
transactions (#2148) via NachoSoto (@NachoSoto)IntroEligibilityStatus
: added CustomStringConvertible
implementation (#2182) via NachoSoto (@NachoSoto)BundleSandboxEnvironmentDetector
: fixed logic for macOS
(#2176) via NachoSoto (@NachoSoto)AttributionFetcher.adServicesToken
hanging when called in simulator (#2157) via NachoSoto (@NachoSoto)Purchase Tester
: added ability to purchase products directly with StoreKit
(#2172) via NachoSoto (@NachoSoto)DNSChecker
: simplified NetworkError
initialization (#2166) via NachoSoto (@NachoSoto)Purchases
initialization: refactor to avoid multiple concurrent instances in memory (#2180) via NachoSoto (@NachoSoto)Purchase Tester
: added button to clear messages on logger view (#2179) via NachoSoto (@NachoSoto)NetworkOperation
: added assertion to ensure that subclasses call completion (#2138) via NachoSoto (@NachoSoto)CacheableNetworkOperation
: avoid unnecessarily creating operations for cache hits (#2135) via NachoSoto (@NachoSoto)PurchaseTester
: fixed macOS
support (#2175) via NachoSoto (@NachoSoto)IntroEligibilityCalculator
: added log including AppleReceipt
(#2181) via NachoSoto (@NachoSoto)Purchase Tester
: fixed scene manifest (#2170) via NachoSoto (@NachoSoto)HTTPClientTests
: refactored to use waitUntil
(#2168) via NachoSoto (@NachoSoto)Integration Tests
: split up tests in smaller files (#2158) via NachoSoto (@NachoSoto)StoreKitRequestFetcher
: removed unnecessary dispatch (#2152) via NachoSoto (@NachoSoto)Purchase Tester
: added companion watchOS
app (#2140) via NachoSoto (@NachoSoto)StoreKit1Wrapper
: added warning if receiving too many updated transactions (#2117) via NachoSoto (@NachoSoto)StoreKitTestHelpers
: cleaned up unnecessary log (#2177) via NachoSoto (@NachoSoto)TrialOrIntroPriceEligibilityCheckerSK1Tests
: use waitUntilValue
(#2173) via NachoSoto (@NachoSoto)DNSChecker
: added log with resolved host (#2167) via NachoSoto (@NachoSoto)MagicWeatherSwiftUI
: updated README
to point to workspace (#2142) via NachoSoto (@NachoSoto)Purchase Tester
: fixed .storekit
config file reference (#2171) via NachoSoto (@NachoSoto)Purchase Tester
: fixed error alerts (#2169) via NachoSoto (@NachoSoto)CI
: don't make releases until release-checks
pass (#2162) via NachoSoto (@NachoSoto)Fastfile
: changed match
to readonly
(#2161) via NachoSoto (@NachoSoto)Published by RCGitBot almost 2 years ago
ReceiptFetcher
: throttle receipt refreshing to avoid StoreKit
throttle errors (#2146) via NachoSoto (@NachoSoto)ClockType
and TestClock
to be able to mock time (#2145) via NachoSoto (@NachoSoto)asyncWait
to poll async
conditions in tests (#2134) via NachoSoto (@NachoSoto)StoreKitRequestFetcher
: added log when starting/ending requests (#2151) via NachoSoto (@NachoSoto)CI
: fixed PurchaseTester
deployment (#2147) via NachoSoto (@NachoSoto)Published by RCGitBot almost 2 years ago
Purchases.configure(withAPIKey:appUserID:)
and Purchases.configure(withAPIKey:appUserID:observerMode:)
(#2129) via NachoSoto (@NachoSoto)ReceiptFetcherTests
: refactored tests using waitUntilValue
(#2144) via NachoSoto (@NachoSoto)ReceiptParser
(#2124) via NachoSoto (@NachoSoto)CallbackCache
: fixed reference (#2143) via NachoSoto (@NachoSoto)PostReceiptDataOperation
: clarified receipt debug log (#2128) via NachoSoto (@NachoSoto)CallbackCache
: avoid exposing internal mutable cache (#2136) via NachoSoto (@NachoSoto)CallbackCache
: added assertion for tests to ensure we don't leak callbacks (#2137) via NachoSoto (@NachoSoto)NetworkOperation
: made Atomic
references immutable (#2139) via NachoSoto (@NachoSoto)ReceiptParser
: ensure parsing never happens in the main thread (#2123) via NachoSoto (@NachoSoto)PostReceiptDataOperation
: also print receipt data with verbose
logs (#2127) via NachoSoto (@NachoSoto)BasePurchasesTests
: detecting and fixing many DeviceCache
leaks (#2105) via NachoSoto (@NachoSoto)StoreKitIntegrationTests
: added test to check applying a promotional offer during subscription (#1588) via NachoSoto (@NachoSoto)Published by RCGitBot almost 2 years ago
PromotionalOffer
s using StoreKit 2
(#2020) via NachoSoto (@NachoSoto)CircleCI
: cache Homebrew installation (#2103) via NachoSoto (@NachoSoto)Integration Tests
: fixed Purchases
leak through PurchasesDiagnostics
(#2126) via NachoSoto (@NachoSoto)HTTPClient
: replaced X-StoreKit2-Setting
with X-StoreKit2-Enabled
(#2118) via NachoSoto (@NachoSoto)BasePurchasesTests
: added assertion to ensure Purchases
does not leak (#2104) via NachoSoto (@NachoSoto)ReceiptParser.parse
always throws ReceiptParser.Error
(#2099) via NachoSoto (@NachoSoto)Tests
: ensure Purchases
is not configured multiple times (#2100) via NachoSoto (@NachoSoto)LoggerType
(#2098) via NachoSoto (@NachoSoto)Integration Tests
: verify Purchases
does not leak across tests (#2106) via NachoSoto (@NachoSoto)StoreKit2
listeners: set Task
priority
to .utility
(#2070) via NachoSoto (@NachoSoto)Installation Tests
: remove unused code in Fastfile
(#2097) via NachoSoto (@NachoSoto)DeviceCache
: added verbose logs for init
/deinit
(#2101) via NachoSoto (@NachoSoto)StoreKit1Wrapper
: process transactions in a background thread (#2115) via NachoSoto (@NachoSoto)Published by RCGitBot almost 2 years ago
Configuration.with(appUserID:)
: allow passing nil
and added new tests (#2110) via NachoSoto (@NachoSoto)Published by aboedo almost 2 years ago
RCProductInfo
: added SKStoreFront.countryCode
to post store_country
with receiptsPublished by RCGitBot almost 2 years ago
LogLevel.verbose
(#2080) via NachoSoto (@NachoSoto)LogLevel
ordering and added tests (#2102) via NachoSoto (@NachoSoto)TimingUtil
: fixed Xcode 13.2 compilation (#2088) via NachoSoto (@NachoSoto)iOS
instead of macOS
(#2089) via NachoSoto (@NachoSoto)fastlane
(#2090) via NachoSoto (@NachoSoto)docs-deploy
by only installing bundle
dependencies (#2092) via NachoSoto (@NachoSoto)Tests
: replaced toEventually
with new waitUntilValue
to simplify tests (#2071) via NachoSoto (@NachoSoto)CircleCI
: fixed docs-deploy
git credentials (#2087) via NachoSoto (@NachoSoto)verbose
logs for Purchases
and StoreKit1Wrapper
lifetime (#2082) via NachoSoto (@NachoSoto)StoreKit
: added logs when purchasing and product requests are too slow (#2061) via NachoSoto (@NachoSoto)TimingUtil
to measure and log methods that are too slow (#2059) via NachoSoto (@NachoSoto)SKTestSession
: finish all unfinished transactions before starting each test (#2066) via NachoSoto (@NachoSoto)CircleCI
: lowered no_output_timeout
to 5 minutes (#2084) via NachoSoto (@NachoSoto)APITesters.xcworkspace
and created RevenueCat.xcworkspace
(#2075) via NachoSoto (@NachoSoto)Atomic
: added new test to verify each instance gets its own Lock
(#2077) via NachoSoto (@NachoSoto)Logger
: exposed generic log
method (#2058) via NachoSoto (@NachoSoto)Published by RCGitBot almost 2 years ago
UserDefaults
from .standard
to our own Suite (#2046) via NachoSoto (@NachoSoto)Logging
: added log when configuring SDK in observer mode (#2065) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI
: added observer mode setting (#2052) via NachoSoto (@NachoSoto)SystemInfo.observerMode
to simplify code (#2064) via NachoSoto (@NachoSoto)Result.init(catching:)
with async
method (#2060) via NachoSoto (@NachoSoto)PurchasesSubscriberAttributesTests
: simplified tests (#2056) via NachoSoto (@NachoSoto)DeviceCache
: removed fatalError
for users not overriding UserDefaults
(#2079) via NachoSoto (@NachoSoto)DeviceCache
: changed NotificationCenter
observation to be received on posting thread (#2078) via NachoSoto (@NachoSoto)StoreKit1Wrapper
: added instance address when detecting transactions (#2055) via NachoSoto (@NachoSoto)SwiftLint 0.5.0
(#2076) via NachoSoto (@NachoSoto)NSData+RCExtensionsTests
: improved errors (#2043) via NachoSoto (@NachoSoto)APITester
: fixed warning in SubscriptionPeriodAPI
(#2054) via NachoSoto (@NachoSoto)Integration Tests
: always run them in random order locally (#2068) via NachoSoto (@NachoSoto)Published by RCGitBot almost 2 years ago
StoreKit 2
: don't finish transactions in observer mode (#2053) via NachoSoto (@NachoSoto)CircleCI
: added ability to create a release manually (#2067) via NachoSoto (@NachoSoto)HTTPClient
: added log for failed requests (#2048) via NachoSoto (@NachoSoto)ErrorResponse.asBackendError
: serialize attribute errors as NSDictionary
(#2034) via NachoSoto (@NachoSoto)ErrorCode.unknownBackendError
: include original error code (#2032) via NachoSoto (@NachoSoto)CI
: fixed push-pods
job (#2045) via NachoSoto (@NachoSoto)PostReceiptDataOperation
: log Apple error when purchase equals expiration date (#2038) via NachoSoto (@NachoSoto)Published by RCGitBot almost 2 years ago
ISO8601DateFormatter.withMilliseconds
: fixed iOS 11 crash (#2037) via NachoSoto (@NachoSoto)StoreKit2Setting.default
back to .enabledOnlyForOptimizations
(#2022) via NachoSoto (@NachoSoto)Integration Tests
: changed weekly to monthly subscriptions to work around 0-second subscriptions (#2042) via NachoSoto (@NachoSoto)Integration Tests
: fixed testPurchaseWithAskToBuyPostsReceipt
(#2040) via NachoSoto (@NachoSoto)ReceiptRefreshPolicy.retryUntilProductIsFound
: default to returning "invalid" receipt (#2024) via NachoSoto (@NachoSoto)CachingProductsManager
: use partial cached products (#2014) via NachoSoto (@NachoSoto)BackendErrorCode.purchasedProductMissingInAppleReceipt
(#2033) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI
: replaced Purchases
dependency with SPM
(#2027) via NachoSoto (@NachoSoto)Integration Tests
: changed log output to raw
(#2031) via NachoSoto (@NachoSoto)Integration Tests
: run on iOS 16 (#2035) via NachoSoto (@NachoSoto)iOS 14
tests Xcode version (#2030) via NachoSoto (@NachoSoto)Async.call
: added non-throwing overload (#2006) via NachoSoto (@NachoSoto)V4_API_Migration_guide.md
(#2018) via NachoSoto (@NachoSoto)eligiblePromotionalOffers
: don't log error if response is ineligible (#2019) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI
to TestFlight (#2003) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI
: added "logs" screen (#2012) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI
: allow configuring API key at runtime (#1999) via NachoSoto (@NachoSoto)