# TPInAppReceipt **Repository Path**: xhea/TPInAppReceipt ## Basic Information - **Project Name**: TPInAppReceipt - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-15 - **Last Updated**: 2026-08-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

# TPInAppReceipt [![Swift Package Manager compatible](https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) [![Platform](https://img.shields.io/cocoapods/p/TPInAppReceipt.svg?style=flat)]() [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/tikhop/TPInAppReceipt/master/LICENSE) TPInAppReceipt is a lightweight, pure-Swift library for reading and validating Apple In App Purchase Receipt locally. ## Installation ### Requirements - Swift 6.0+ / Xcode 16+ - macOS 10.15+ / iOS 13+ / tvOS 13+ / watchOS 6.2+ / visionOS 1+ ### Swift Package Manager ```swift dependencies: [ .package(url: "https://github.com/tikhop/TPInAppReceipt.git", from: "4.0.2") ] ``` ```swift .target( name: "YourTarget", dependencies: ["TPInAppReceipt"] ) ``` ## Usage ### Decoding and Reading ```swift import TPInAppReceipt // Local receipt let receipt = try await AppReceipt.local // From raw data let receipt = try AppReceipt.receipt(from: data) ``` Access receipt fields, query purchases, check subscriptions and introductory offer eligibility. > See [Working with Receipt](Sources/Docs.docc/Working%20with%20Receipt.md) for details. ### Validating Default validation: certificate chain + signature + hash + metadata. ```swift let result = await receipt.validate() switch result { case .valid: break case .invalid(let error): print(error) } ``` Supports custom validators via `@VerifierBuilder`. > See [Validating Receipt](Sources/Docs.docc/Validating%20Receipt.md) for details. ### Blocking API For contexts where async is not available. ```swift @_spi(Blocking) import TPInAppReceipt let receipt = try AppReceipt.local_blocking let result = receipt.validate_blocking() ``` > See [Blocking Mode](Sources/Docs.docc/Blocking%20Mode.md) for details. ## Migrating from v3 See [TPInAppReceipt 4.0 Migration Guide](Sources/Docs.docc/TPInAppReceipt%204.0%20Migration%20Guide.md). ## Essential Reading * [Apple - About Receipt Validation](https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Introduction.html) * [Apple - Receipt Validation Programming Guide](https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html#//apple_ref/doc/uid/TP40010573-CH106-SW1) * [Apple - Validating Receipts Locally](https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateLocally.html) * [fluffy.es - Tutorial: Read and validate in-app purchase receipt locally using TPInAppReceipt](https://fluffy.es/in-app-purchase-receipt-local/) * [Faisal Bin Ahmed - All the wrong ways to persist in-app purchase status in your macOS app](https://medium.com/@Faisalbin/all-the-wrong-ways-to-persist-in-app-purchase-status-in-your-macos-app-ce6eb9bcb0c3) * [objc.io - Receipt Validation](https://www.objc.io/issues/17-security/receipt-validation/) ## License MIT