# Configurer InboxKit avec Swift Package Manager

*Disponible depuis le SDK iOS [7.0.40](https://github.com/Pushwoosh/pushwoosh-ios-sdk/releases/tag/7.0.40).*

InboxKit est fourni comme une bibliothèque distincte au sein du package Swift `Pushwoosh-XCFramework`. Le SDK principal doit déjà être intégré ; si vous partez de zéro, suivez d'abord le [guide d'intégration de base](/fr/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk-7-0/basic-integration-guide/).

## Ajouter le produit du package InboxKit

1. Ouvrez votre projet dans Xcode et accédez aux paramètres du projet → **Package Dependencies**, puis appuyez sur le bouton **+**.

2. Saisissez l'URL de package suivante :

```bash
https://github.com/Pushwoosh/Pushwoosh-XCFramework
```

3. Configurez la **Dependency Rule** sur **Up to Next Major Version** avec la dernière version stable, puis cliquez sur **Add Package**.

4. Sur l'écran de sélection du package, choisissez au moins les produits suivants et ajoutez-les à votre cible d'application principale :

- **PushwooshFramework** (requis)
- **PushwooshCore** (requis)
- **PushwooshBridge** (requis)
- **PushwooshInboxKit** (le nouveau module)

<img src="/setting-up-pushwoosh-inboxkit-ios-spm-products.webp" alt="Boîte de dialogue de Xcode 'Choose Package Products' avec PushwooshBridge, PushwooshCore, PushwooshFramework et PushwooshInboxKit ajoutés à la cible MyApp" width="640" style="display: block; margin: 0 auto;"/>

<p style="text-align: center; opacity: 0.7; font-size: 0.875rem; margin-top: 0.5rem;">Ajoutez les quatre produits surlignés à votre cible d'application principale.</p>

5. Ouvrez votre cible d'application principale et sous **Frameworks, Libraries, and Embedded Content**, confirmez que `PushwooshInboxKit.xcframework` est listé et intégré.

C'est tout — InboxKit est maintenant lié au SDK principal.

## Afficher la boîte de réception

Ajoutez le contrôleur de la boîte de réception à n'importe quel flux de navigation. La configuration par défaut est suffisante pour obtenir une boîte de réception fonctionnelle avec les trois types de cellules standard :

<Tabs syncKey="code-example">
<TabItem label="Swift">
```swift
import PushwooshInboxKit

let inboxVC = PushwooshInboxKitViewController()
navigationController?.pushViewController(inboxVC, animated: true)
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
@import PushwooshInboxKit;

PushwooshInboxKitViewController *inboxVC = [PushwooshInboxKitViewController new];
[self.navigationController pushViewController:inboxVC animated:YES];
```
</TabItem>
</Tabs>

## Personnaliser la boîte de réception

En Swift, configurez le contrôleur via le type de valeur `PushwooshInboxKitAttributes`. En Objective-C, utilisez les setters compatibles `@objc` sur le contrôleur — `PushwooshInboxKitAttributes` est une structure Swift et n'est pas pontée.

<Tabs syncKey="code-example">
<TabItem label="Swift">
```swift
var attributes = PushwooshInboxKitAttributes()
attributes.pullToRefreshEnabled = true
attributes.swipeToDeleteEnabled = true
attributes.pinningEnabled = true
attributes.style.unreadBadgeColor = .systemBlue
attributes.style.titleFont = .systemFont(ofSize: 17, weight: .semibold)

let inboxVC = PushwooshInboxKitViewController(attributes: attributes)
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
PushwooshInboxKitViewController *inboxVC = [PushwooshInboxKitViewController new];
[inboxVC setBackgroundColor:[UIColor systemBackgroundColor]];
[inboxVC setEmptyMessage:@"You have no messages yet"];
```
</TabItem>
</Tabs>

La structure `Style` expose toutes les couleurs, polices, rayons d'angle et le formateur de date utilisés par les cellules par défaut. Chaque valeur est une couleur sémantique Apple par défaut, donc la boîte de réception réagit automatiquement au mode sombre du système.

<img src="/setting-up-pushwoosh-inboxkit-ios-custom.webp" alt="Flux InboxKit personnalisé avec les couleurs de la marque appliquées au titre et à l'indicateur de non-lu" width="280" style="display: block; margin: 0 auto;"/>

<p style="text-align: center; opacity: 0.7; font-size: 0.875rem; margin-top: 0.5rem;">Cellule avec légende et un thème personnalisé appliqué via <code>PushwooshInboxKitAttributes.Style</code>.</p>

## Gérer les appuis et les actualisations

Conformez-vous à `PushwooshInboxKitDelegate` pour réagir aux actions de l'utilisateur et aux événements d'actualisation. Chaque méthode a une implémentation par défaut, vous ne surchargez donc que ce dont vous avez besoin :

<Tabs syncKey="code-example">
<TabItem label="Swift">
```swift
final class InboxCoordinator: NSObject, PushwooshInboxKitDelegate {
    func inboxKit(_ vc: PushwooshInboxKitViewController,
                  didSelect message: PWInboxMessageProtocol) -> Bool {
        // Retournez true pour laisser le SDK ouvrir l'URL du message ou le richmedia.
        // Retournez false si vous avez entièrement géré l'appui (par ex. routé vers un écran personnalisé).
        return true
    }

    func inboxKit(_ vc: PushwooshInboxKitViewController,
                  didRefreshWith messages: [PWInboxMessageProtocol],
                  error: Error?) {
        // Affichez votre propre état vide / d'erreur ici si nécessaire.
    }
}

inboxVC.delegate = inboxCoordinator
```
</TabItem>
</Tabs>

<Aside type="note" title="Persistance">
Les actions marquer comme lu, tout marquer comme lu, supprimer et effacer les lus sont toutes persistées dans le stockage local de la boîte de réception Pushwoosh avant l'envoi de la requête réseau. L'état survit à un redémarrage du processus même si le backend n'a pas encore accusé réception du changement.
</Aside>

## Prochaines étapes

<LinkCard
  title="Référence de l'API PushwooshInboxKit"
  description="Documentation DocC générée pour chaque type public."
  href="https://pushwoosh.github.io/pushwoosh-ios-sdk/PushwooshInboxKit/documentation/pushwooshinboxkit/"
/>