v1.1.0
What's New
Fully Automatic Purchase Tracking
Purchases are now tracked automatically — no code changes needed beyond SpendOwl.configure(apiKey:).
The SDK uses three complementary listeners to capture every purchase:
- SKPaymentTransactionObserver — catches the first purchase in the same session
- Transaction.updates — catches renewals, cross-device, Ask to Buy, and offer codes
- Transaction.currentEntitlements — startup safety net for missed purchases
Deduplication is handled atomically via transactionId. The SDK is fully read-only — transaction.finish() is never called, so it works alongside RevenueCat, Adapty, or any other StoreKit integration.
Other Changes
- Thread-safe
EventQueuewithNSLock - Improved pre-commit checks in
CLAUDE.md - New tests for
PurchaseEventoptional fields and transaction ID bounds
Full Changelog: v1.0.0...v1.1.0