
Robust In-App Purchases for Swift Applications 🚀
A battle-tested Swift library that simplifies App Store purchases and subscriptions with secure receipt validation through Iaptic's validation service.
Why Iaptic Swift?
🛡️ Secure Validation
- Iaptic server integration
- Fraud-resistant receipt checks
📦 All Product Types
- Consumables & Non-consumables
- Auto-renewable subscriptions
⚡ Offline Support
- Local purchase status tracking
- Graceful network failure handling
🔧 Simplified API
- Purchase, restore, validate in 3 calls
- Unified error handling
🔄 Purchase Flow Architecture
sequenceDiagram
participant App
participant IapticSwift
participant AppStore
participant IapticServer
App->>IapticSwift: Initialize with products
IapticSwift->>AppStore: Fetch product info
App->>IapticSwift: Start purchase
IapticSwift->>AppStore: Process payment
AppStore-->>IapticSwift: Transaction update
IapticSwift->>IapticServer: Validate receipt
IapticServer-->>IapticSwift: Validation result
IapticSwift->>App: Purchase callback
⚡️ Basic Implementation
// 1. Initialize in AppDelegate
InAppPurchase.initialize(
iapProducts: [
IAPProduct(
productIdentifier: "premium_features",
productType: .nonConsumable
)
],
validatorUrlString: "https://validator.iaptic.com/v3/validate?appName=myapp&apiKey=1234"
)
// 2. Purchase handler
func purchasePremiumFeatures() {
InAppPurchase.purchase(productIdentifier: "premium_features") { result in
switch result {
case .success(let transaction):
print("Purchase successful: \(transaction)")
case .failure(let error):
print("Purchase failed: \(error.localizedDescription)")
}
}
}
// 3. Check access
if InAppPurchase.hasActivePurchase(for: "premium_features") {
unlockPremiumFeatures()
}
🚀 Getting Started
Essential Resources:
- Demo Project - Complete implementation example
- API Documentation - Full method reference
- GitHub Repository - GitHub repository