StoreKit Swift : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que StoreKit et pourquoi l'utiliser ?

StoreKit est le framework natif d'Apple dédié à la gestion des achats intégrés (In-App Purchases) et des abonnements dans les applications iOS, macOS, watchOS et tvOS. Il offre aux développeurs une interface unifiée pour interagir avec l'App Store : demande de produits, traitement des transactions, vérification des droits d'accès et gestion des abonnements.

Les principales fonctionnalités de StoreKit :

  • Monétisation — vente de biens numériques (accès premium, monnaie virtuelle, contenu exclusif).
  • Gestion des abonnements — renouvellements automatiques, statuts, périodes d'essai.
  • Sécurité — traitement des paiements via l'App Store sans transmettre les données bancaires au développeur.
  • Restauration des achats — l'utilisateur peut retrouver ses achats sur un autre appareil.

À noter : StoreKit n'est pas une bibliothèque tierce, mais un framework intégré au SDK Xcode. Il n'est pas nécessaire de l'installer séparément, mais il faut le configurer dans App Store Connect et l'ajouter à votre projet.

Installation et configuration

StoreKit étant un framework système, son installation se résume à l'ajouter à votre projet Xcode :

  1. Ouvrez votre projet dans Xcode.
  2. Sélectionnez votre cible (application) → onglet "General".
  3. Descendez jusqu'à la section "Frameworks, Libraries, and Embedded Content".
  4. Cliquez sur "+" et choisissez StoreKit.framework.
  5. Assurez-vous que le statut "Embed" est défini sur "Do Not Embed".

Importez ensuite le framework dans les fichiers nécessaires :

import StoreKit

Vous devez également configurer vos produits dans App Store Connect :

  • Créez des identifiants de produits (ex. com.example.premium).
  • Définissez le prix, la localisation et le type (consommable / non-consommable / abonnement).
  • Pour les abonnements, configurez les groupes et les périodes d'essai.

Démarrage rapide avec un exemple de code

Un exemple minimal pour demander et acheter un produit :

import StoreKit

class StoreManager: NSObject, SKProductsRequestDelegate, SKPaymentTransactionObserver {
    
    static let shared = StoreManager()
    private var products: [SKProduct] = []
    
    override private init() {
        super.init()
        SKPaymentQueue.default().add(self)
    }
    
    // 1. Demande des produits
    func fetchProducts(productIDs: Set<String>) {
        let request = SKProductsRequest(productIdentifiers: productIDs)
        request.delegate = self
        request.start()
    }
    
    // 2. Délégué de réception des produits
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        self.products = response.products
        for product in products {
            print("Produit trouvé : \(product.localizedTitle) — \(product.price)")
        }
    }
    
    // 3. Achat
    func purchase(product: SKProduct) {
        let payment = SKPayment(product: product)
        SKPaymentQueue.default().add(payment)
    }
    
    // 4. Gestion des transactions
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            switch transaction.transactionState {
            case .purchased:
                // Débloquer le contenu
                print("Achat réussi : \(transaction.payment.productIdentifier)")
                SKPaymentQueue.default().finishTransaction(transaction)
            case .failed:
                if let error = transaction.error {
                    print("Erreur d'achat : \(error.localizedDescription)")
                }
                SKPaymentQueue.default().finishTransaction(transaction)
            case .restored:
                print("Achat restauré")
                SKPaymentQueue.default().finishTransaction(transaction)                    

Recommendations