Repository navigation
Full Changelog: https://github.com/jaywcjlove/StoreKitHelper/commits/v2.9.0
Bug Fixes
Paid upgrades stay unlocked when the local cache is empty
Transaction.currentEntitlements reads the on-device cache. On a second Mac that cache is often empty at launch, so a purchase that already went through (such as a $3.99 upgrade) was marked not purchased.
StoreKitHelper now also checks Transaction.latest(for:), retries 2s, 6s, and 15s after launch, and refreshes again when the app becomes active. A newer entitlement scan can no longer overwrite a purchase that was just verified. Restore Purchases keeps a purchase already verified in this session when the cache has not caught up yet, then keeps retrying if nothing was found. Restore shows an error, or "No purchases to restore", instead of failing silently.
Entitlements are revoked when the transaction leaves the cache
If a product was already seen in the local cache and later disappears, access is removed in the same session. That covers signing out of the Apple ID, and a record that StoreKit has dropped. Refunds, expired subscriptions, and subscriptions replaced by an upgrade are still removed as soon as StoreKit reports them. Subscriptions in a billing grace period stay unlocked. Consumable products are no longer left in purchasedProductIDs after a single purchase.
The transaction listener no longer retains StoreContext, so a store that is released also removes its foreground refresh.