---
title: "Installer et configurer le SDK iOS"
description: "Guide étape par étape pour installer le SDK Adapty sur iOS pour les applications à abonnement."
---

Le SDK Adapty comprend deux modules clés pour une intégration fluide dans votre application mobile :

- **Core Adapty** : ce SDK essentiel est requis pour qu'Adapty fonctionne correctement dans votre application.
- **AdaptyUI** : ce module optionnel est nécessaire si vous utilisez le [Adapty Paywall Builder](adapty-paywall-builder), un outil no-code convivial pour créer facilement des paywalls multiplateformes.

:::tip
Vous voulez voir un exemple concret d'intégration du SDK Adapty dans une application mobile ? Consultez nos [applications exemples](https://github.com/adaptyteam/AdaptySDK-iOS/tree/master/Examples), qui illustrent la configuration complète, notamment l'affichage des paywalls, les achats et d'autres fonctionnalités de base.
:::

Pour une présentation complète de l'implémentation, vous pouvez également regarder les vidéos :

<Tabs groupId="current-os" queryString>
<TabItem value="swiftui" label="iOS (SwiftUI)" default>

<div style={{ textAlign: 'center' }}>
<iframe width="560" height="315" src="https://www.youtube.com/embed/cSChHc8k2zA?si=KhNFhqXccIzYwTcm" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div>
</TabItem>
<TabItem value="uikit" label="iOS (UIKit)" default>

<div style={{ textAlign: 'center' }}>
<iframe width="560" height="315" src="https://www.youtube.com/embed/WEUnlaAjSI0?si=sjXKVVb56tEHDKzJ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div>
</TabItem>
</Tabs>

## Prérequis \{#requirements\}

Le SDK Adapty pour iOS nécessite iOS 15.0 ou version ultérieure.

:::important
Adapty SDK 3.15.7+ est requis lors de la compilation avec Xcode 26.4 ou version ultérieure.
:::

:::info
L'installation du SDK correspond à l'étape 5 de la configuration d'Adapty. Avant que les achats fonctionnent dans votre app, vous devez également connecter votre app aux stores, puis créer des produits, un paywall et un placement dans l'Adapty Dashboard. Le [guide de démarrage rapide](quickstart) décrit toutes les étapes requises.
:::

## Installer le SDK Adapty \{#install-adapty-sdk\}

[![Release](https://img.shields.io/github/v/release/adaptyteam/AdaptySDK-iOS.svg?style=flat&logo=apple)](https://github.com/adaptyteam/AdaptySDK-iOS/releases)

Le SDK Adapty s'installe via Swift Package Manager. Dans Xcode, allez dans **File** -> **Add Package Dependency...**. Notez que les étapes pour ajouter des dépendances de package peuvent varier selon les versions d'Xcode ; consultez la documentation Xcode si nécessaire.

1. Saisissez l'URL du dépôt :
   ```
   https://github.com/adaptyteam/AdaptySDK-iOS.git
   ```
2. Sélectionnez la version (la dernière version stable est recommandée) et cliquez sur **Add Package**.
3. Dans la fenêtre **Choose Package Products**, sélectionnez les modules dont vous avez besoin :
   - **Adapty** (module principal)
   - **AdaptyUI** (facultatif - uniquement si vous prévoyez d'utiliser Paywall Builder)
   :::note
   Remarque :
     - Pour activer le [Mode Enfants](kids-mode) dans SDK 3.x, sélectionnez **Adapty_KidsMode** à la place de **Adapty**. Dans SDK 4.0 et versions ultérieures, sélectionnez les modules habituels — le Mode Enfants est activé via le trait de package `KidsMode`.
     - Ne sélectionnez pas d'autres packages dans la liste — vous n'en aurez pas besoin.
   :::
4. Cliquez sur **Add Package** pour terminer l'installation.
5. **Vérifiez l'installation :** dans le navigateur de projet, vous devriez voir « Adapty » (et « AdaptyUI » si sélectionné) sous **Package Dependencies**.

## Activer le module Adapty du SDK \{#activate-adapty-module-of-adapty-sdk\}

Activez le SDK dans le code de votre application.

:::note
Le SDK n'a besoin d'être activé qu'une seule fois dans votre application.
:::

Pour obtenir votre **Public SDK Key** :

1. Accédez à l'Adapty Dashboard et naviguez vers [**App settings → General**](https://app.adapty.io/settings/general).
2. Dans la section **Api keys**, copiez la **Public SDK Key** (et NON la Secret Key).
3. Remplacez `"YOUR_PUBLIC_SDK_KEY"` dans le code.

Ou obtenez-la de façon programmatique via l'[Adapty CLI](developer-cli) :

```
npm install -g adapty
adapty auth login
adapty apps list
```

Ou, directement :

```
npx adapty auth login
adapty apps list
```

- Assurez-vous d'utiliser la **Public SDK key** pour l'initialisation d'Adapty — la **Secret key** ne doit être utilisée que pour l'[API côté serveur](getting-started-with-server-side-api).
- Les **SDK keys** sont propres à chaque application, donc si vous avez plusieurs applications, veillez à choisir la bonne.

<Tabs groupId="current-os" queryString>
<TabItem value="swiftui" label="SwiftUI">

```swift showLineNumbers

@main
struct YourApp: App {
  init() {
    // Configure Adapty SDK
    let configurationBuilder = AdaptyConfiguration
      .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY") // Get from Adapty dashboard

   Adapty.logLevel = .verbose // recommended for development and the first production release

    let config = configurationBuilder.build()

    // Activate Adapty SDK asynchronously
    Task {
      do {
        try await Adapty.activate(with: config)
      } catch {
        // Handle error appropriately for your app
        print("Adapty activation failed: ", error)
      }
    }

    var body: some Scene {
      WindowGroup {
        // Your content view
      }
    }
  }
}
```

</TabItem>
<TabItem value="swift" label="UIKit" default>

```swift showLineNumbers
// In your AppDelegate class:
// If you only use an AppDelegate, place the following code in the
// application(_:didFinishLaunchingWithOptions:) method.

// If you use a SceneDelegate, place the following code in the
// scene(_:willConnectTo:options:) method.

Task {
  do {
    let configurationBuilder = AdaptyConfiguration
      .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY") // Get from Adapty dashboard
      .with(logLevel: .verbose) // recommended for development and the first production release

    let config = configurationBuilder.build()
    try await Adapty.activate(with: config)
  } catch {
    // Handle error appropriately for your app
    print("Adapty activation failed: ", error)
  }
}
```

</TabItem>
</Tabs>

:::important
Attendez que `activate` soit résolu avant d'appeler toute autre méthode du SDK Adapty. Consultez [l'ordre des appels dans le SDK iOS](ios-sdk-call-order) pour la séquence complète.
:::

Configurez maintenant les paywalls dans votre application :

- Si vous utilisez [Adapty Paywall Builder](adapty-paywall-builder), commencez par [activer le module AdaptyUI](#activate-adaptyui-module-of-adapty-sdk) ci-dessous, puis suivez le [démarrage rapide avec Paywall Builder](ios-quickstart-paywalls).
- Si vous créez votre propre interface de paywall, consultez le [démarrage rapide pour les paywalls personnalisés](ios-quickstart-manual).

## Activer le module AdaptyUI du SDK Adapty \{#activate-adaptyui-module-of-adapty-sdk\}

Si vous prévoyez d'utiliser le [Paywall Builder](adapty-paywall-builder) et avez [installé le module AdaptyUI](sdk-installation-ios#install-adapty-sdk), vous devez également activer AdaptyUI.

:::important
Dans votre code, vous devez activer le module principal Adapty avant d'activer AdaptyUI.
:::

<Tabs groupId="current-os" queryString>
<TabItem value="swiftui" label="SwiftUI">

```swift showLineNumbers title="Swift"

@main
struct YourApp: App {
  init() {
    // ...ConfigurationBuilder steps

    // Activate Adapty SDK asynchronously
    Task {
      do {
        try await Adapty.activate(with: config)
        try await AdaptyUI.activate()
      } catch {
        // Handle error appropriately for your app
        print("Adapty activation failed: ", error)
      }
    }

    // main body...
  }
}
```
</TabItem>
<TabItem value="uikit" label="UIKit" default>

```swift showLineNumbers title="UIKit"
// If you only use an AppDelegate, place the following code in the
// application(_:didFinishLaunchingWithOptions:) method.

// If you use a SceneDelegate, place the following code in the
// scene(_:willConnectTo:options:) method.

Task {
   do {
      let configurationBuilder = AdaptyConfiguration
         .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY") // Get from Adapty dashboard
         .with(logLevel: .verbose) // recommended for development

   let config = configurationBuilder.build()
   try await Adapty.activate(with: config)
   try await AdaptyUI.activate()
      } catch {
      // Handle error appropriately for your app
      print("Adapty activation failed: ", error)
   }
}
```
</TabItem>
</Tabs>

:::tip
En option, lors de l'activation d'AdaptyUI, vous pouvez [remplacer les paramètres de mise en cache par défaut pour les paywalls](#media-cache-configuration-for-paywalls-in-adaptyui).
:::

## Configuration optionnelle \{#optional-setup\}

### Journalisation \{#logging\}

#### Configurer le système de journalisation \{#set-up-the-logging-system\}

Adapty enregistre les erreurs et autres informations importantes pour vous aider à comprendre ce qui se passe. Les niveaux suivants sont disponibles :

| Level      | Description                                                  |
| ---------- | ------------------------------------------------------------ |
| `error`    | Seules les erreurs seront journalisées                                    |
| `warn`     | Les erreurs et les messages du SDK qui ne causent pas d'erreurs critiques, mais qui méritent attention, seront journalisés |
| `info`     | Les erreurs, avertissements et divers messages d'information seront journalisés |
| `verbose`  | Toute information supplémentaire pouvant être utile lors du débogage, comme les appels de fonctions, les requêtes API, etc. sera journalisée |

```swift showLineNumbers
 let configurationBuilder = AdaptyConfiguration
         .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
         .with(logLevel: .verbose) // recommended for development
```

#### Rediriger les messages du système de journalisation \{#redirect-the-logging-system-messages\}

Si vous avez besoin d'envoyer les messages de log d'Adapty vers votre propre système ou de les sauvegarder dans un fichier, utilisez la méthode `setLogHandler` et implémentez votre logique de journalisation personnalisée à l'intérieur. Ce gestionnaire reçoit des enregistrements de log contenant le contenu du message et son niveau de sévérité.

```swift showLineNumbers title="Swift"
Adapty.setLogHandler { record in
    writeToLocalFile("Adapty \(record.level): \(record.message)")
}
```

### Politiques de données \{#data-policies\}

Adapty ne stocke pas les données personnelles de vos utilisateurs à moins que vous ne les envoyiez explicitement, mais vous pouvez mettre en place des politiques de sécurité des données supplémentaires pour vous conformer aux directives du store ou du pays concerné.

#### Désactiver la collecte et le partage de l'IDFA \{#disable-idfa-collection-and-sharing\}

Lors de l'activation du module Adapty, définissez `idfaCollectionDisabled` sur `true` pour désactiver la collecte et le partage de l'IDFA.

Utilisez ce paramètre pour respecter les directives de l'App Store Review Guidelines ou éviter de déclencher l'invite App Tracking Transparency lorsque l'IDFA n'est pas nécessaire pour votre application. La valeur par défaut est `false`. Pour plus d'informations sur la collecte de l'IDFA, consultez la section [Intégration Analytics](analytics-integration#disable-collection-of-advertising-identifiers).

```swift showLineNumbers
let configurationBuilder =
    AdaptyConfiguration
        .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
        .with(idfaCollectionDisabled: true)
```

#### Désactiver la collecte et le partage de l'adresse IP \{#disable-ip-collection-and-sharing\}

Lors de l'activation du module Adapty, définissez `ipAddressCollectionDisabled` sur `true` pour désactiver la collecte et le partage de l'adresse IP de l'utilisateur. La valeur par défaut est `false`.

Utilisez ce paramètre pour renforcer la confidentialité des utilisateurs, respecter les réglementations régionales de protection des données (comme le RGPD ou le CCPA), ou réduire la collecte de données inutiles lorsque les fonctionnalités basées sur l'IP ne sont pas nécessaires pour votre application.

```swift showLineNumbers
let configurationBuilder =
    AdaptyConfiguration
        .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
        .with(ipAddressCollectionDisabled: true)
```

#### Configuration du cache multimédia pour les paywalls dans AdaptyUI \{#media-cache-configuration-for-paywalls-in-adaptyui\}

Notez que la configuration d'AdaptyUI est optionnelle. Vous pouvez activer le module AdaptyUI sans configuration. Cependant, si vous utilisez la configuration, tous les paramètres sont obligatoires.

```swift showLineNumbers title="Swift"

// Configure AdaptyUI
        let adaptyUIConfiguration = AdaptyUI.Configuration(
            mediaCacheConfiguration: .init(
                memoryStorageTotalCostLimit: 100 * 1024 * 1024,
                memoryStorageCountLimit: .max,
                diskStorageSizeLimit: 100 * 1024 * 1024
            )
        )

        // Activate AdaptyUI
        AdaptyUI.activate(configuration: adaptyUIConfiguration)
```
Paramètres :

| Paramètre                   | Présence | Description                                                  |
| :-------------------------- | :------- | :----------------------------------------------------------- |
| memoryStorageTotalCostLimit | requis   | Limite de coût total du stockage en octets.                  |
| memoryStorageCountLimit     | requis   | Limite du nombre d'éléments dans le stockage en mémoire.     |
| diskStorageSizeLimit        | requis   | Limite de taille de fichier sur le disque en octets. 0 signifie aucune limite. |

### Comportement de finalisation des transactions \{#transaction-finishing-behavior\}

:::info
Cette fonctionnalité est disponible à partir de la version 3.12.0 du SDK.
:::

Par défaut, Adapty finalise automatiquement les transactions après leur validation. Cependant, si vous avez besoin d'une validation avancée (validation côté serveur, détection de fraude ou logique métier personnalisée), vous pouvez configurer le SDK pour utiliser la finalisation manuelle des transactions.

```swift showLineNumbers title="Swift"
let configurationBuilder = AdaptyConfiguration
    .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
    .with(transactionsFinishBehavior: .manual) // .auto is the default
```

Pour plus de détails sur la façon de finaliser les transactions, consultez le [guide](ios-transaction-management).

### Effacer les données lors d'une restauration de sauvegarde \{#clear-data-on-backup-restore\}

Lorsque `clearDataOnBackup` est défini sur `true`, le SDK détecte quand l'application est restaurée depuis une sauvegarde iCloud et supprime toutes les données SDK stockées localement, y compris les informations de profil en cache, les détails des produits et les paywalls. Le SDK s'initialise ensuite dans un état propre. La valeur par défaut est `false`.

:::note
Seul le cache local du SDK est supprimé. L'historique des transactions avec Apple et les données utilisateur sur les serveurs Adapty restent inchangés.
:::

```swift showLineNumbers
let configurationBuilder = AdaptyConfiguration
    .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
    .with(clearDataOnBackup: true) // default – false
```

## Dépannage \{#troubleshooting\}

#### Erreur de concurrence Swift 6 avec Tuist \{#swift-6-concurrency-error-with-tuist\}

Lors d'une compilation avec [Tuist](https://tuist.dev/), vous pouvez rencontrer des erreurs de compilation liées à la concurrence stricte de Swift 6. Les symptômes typiques incluent des incompatibilités d'attribut `@Sendable` dans `AdaptyUIBuilderLogic` ou des erreurs de Sendability similaires entre modules.

Cela se produit parce que Tuist génère des projets Xcode à partir de packages SPM mais ne conserve pas le paramètre `swift-tools-version: 6.0`. En conséquence, certaines cibles Adapty (`Adapty`, `AdaptyUI`, `AdaptyUIBuilder`) compilent avec les règles Swift 5 tandis que d'autres utilisent Swift 6, ce qui crée des incompatibilités `@Sendable` entre modules.

**Correction** : Mettez à niveau vers Adapty SDK **3.15.5** ou une version ultérieure, ce qui résout le problème indépendamment des versions mixtes du langage Swift.

**Solution de contournement** : Si vous ne pouvez pas effectuer la mise à niveau, définissez explicitement Swift 6 pour les trois cibles Adapty dans votre configuration Tuist :

```swift showLineNumbers
targetSettings: [
  "Adapty": .init().swiftVersion("6"),
  "AdaptyUI": .init().swiftVersion("6"),
  "AdaptyUIBuilder": .init().swiftVersion("6"),
]
```