Summary
SK2's Transaction exposes revocationDate and revocationReason since iOS 15,
but StoreTransaction does not surface these fields. iOS 26.4 also introduces
Transaction.RevocationType.proratedRefund for prorated refunds on subscription
downgrades.
Who needs this
This is not needed for standard RevenueCat usage — entitlement state is
already reflected in CustomerInfo via server-to-server notifications.
It is relevant for:
CustomEntitlementComputation mode — entitlements are computed
client-side, so revocation data must be read directly from the transaction
- Transaction history UI — displaying when/why a specific transaction
was refunded
- Custom analytics — classifying refund events by reason in external pipelines
Proposed Changes
- New
RevocationReason type mirroring Transaction.RevocationType
(following the existing TransactionReason pattern), with proratedRefund
gated at @available(iOS 26.4, ...)
- Add
revocationDate: Date? and revocationReason: RevocationReason? to
StoreTransactionType and expose via @objc public on StoreTransaction
- SK1 returns
nil for both fields (SK1 does not provide revocation data)
- Update Swift and ObjC API testers
Summary
SK2's
TransactionexposesrevocationDateandrevocationReasonsince iOS 15,but
StoreTransactiondoes not surface these fields. iOS 26.4 also introducesTransaction.RevocationType.proratedRefundfor prorated refunds on subscriptiondowngrades.
Who needs this
This is not needed for standard RevenueCat usage — entitlement state is
already reflected in
CustomerInfovia server-to-server notifications.It is relevant for:
CustomEntitlementComputationmode — entitlements are computedclient-side, so revocation data must be read directly from the transaction
was refunded
Proposed Changes
RevocationReasontype mirroringTransaction.RevocationType(following the existing
TransactionReasonpattern), withproratedRefundgated at
@available(iOS 26.4, ...)revocationDate: Date?andrevocationReason: RevocationReason?toStoreTransactionTypeand expose via@objc publiconStoreTransactionnilfor both fields (SK1 does not provide revocation data)