slashmo/swift-app-store-receipt-validation
This package implements the [validating receipts with the app store](https://developer.apple.com/library/archive/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1) api.
Features:
- [x] Great swift server citizen: Uses
AsyncHTTPClientandSwift-NIOunder the hood. - [x] Automatic retry, if sandbox receipt was send to production.
- [x] Response object is pure swift struct using enums.
- [x] API Erros are translated into corresponding swift errors.
Usage
Add swift-app-store-receipt-validation, async-http-client and swift-nio as dependencies to your project. For this open your Package.swift and add this to your dependencies:
dependencies: [
.package(url: "https://github.com/swift-server/async-http-client", .upToNextMajor(from: "1.1.0")),
.package(url: "https://github.com/apple/swift-nio", .upToNextMajor(from: "2.14.0")),
.package(url: "https://github.com/slashmo/swift-app-store-receipt-validation", .upToNextMajor(from: "0.1.0")),
]Then, add AsyncHTTPClient, SwiftNIO and AppStoreReceiptValidation as target dependencies.
targets: [
.target(name: "Hello", dependencies: [
.product(name: "NIO", package: "swift-nio"),
.product(name: "AsyncHTTPClient", package: "async-http-client"),
.product(name: "AppStoreReceiptValidation", package: "swift-app-store-receipt-validation"),
]
]To verify an AppStore Receipt in your code you need to create an HTTPClient first:
let httpClient = HTTPClient(eventLoopGroupProvider: .createNew)
defer { try? httpClient.syncShutdown() }
let appStoreClient = AppStore.Client(httpClient: httpClient, secret: "abc123")
let base64EncodedReceipt: String = ...
let receipt = try appStoreClient.validateReceipt(base64EncodedReceipt).wait()Package Metadata
Repository: slashmo/swift-app-store-receipt-validation
Default branch: main
README: README.md