# Configurar o InboxKit com o Swift Package Manager

*Disponível desde o SDK do iOS [7.0.40](https://github.com/Pushwoosh/pushwoosh-ios-sdk/releases/tag/7.0.40).*

O InboxKit é fornecido como um produto de biblioteca separado dentro do pacote Swift `Pushwoosh-XCFramework`. Você precisa que o SDK principal já esteja integrado; se estiver começando do zero, siga primeiro o [guia de integração básica](/pt/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk-7-0/basic-integration-guide/).

## Adicionar o produto do pacote InboxKit

1. Abra seu projeto no Xcode e navegue até as configurações do projeto → **Package Dependencies**, em seguida, pressione o botão **+**.

2. Insira a seguinte URL do pacote:

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

3. Configure a **Dependency Rule** para **Up to Next Major Version** com a versão estável mais recente e, em seguida, clique em **Add Package**.

4. Na tela de seleção de pacotes, escolha pelo menos os seguintes produtos e adicione-os ao seu alvo principal do aplicativo:

- **PushwooshFramework** (obrigatório)
- **PushwooshCore** (obrigatório)
- **PushwooshBridge** (obrigatório)
- **PushwooshInboxKit** (o novo módulo)

<img src="/setting-up-pushwoosh-inboxkit-ios-spm-products.webp" alt="Diálogo 'Choose Package Products' do Xcode com PushwooshBridge, PushwooshCore, PushwooshFramework e PushwooshInboxKit adicionados ao alvo 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;">Adicione os quatro produtos destacados ao seu alvo principal do aplicativo.</p>

5. Abra o alvo principal do seu aplicativo e, em **Frameworks, Libraries, and Embedded Content**, confirme que o `PushwooshInboxKit.xcframework` está listado e incorporado.

É isso — o InboxKit agora está vinculado junto com o SDK principal.

## Mostrar a caixa de entrada

Adicione o controlador da caixa de entrada a qualquer fluxo de navegação. A configuração padrão é suficiente para obter uma caixa de entrada funcional com os três tipos de célula padrão:

<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>

## Personalizar a caixa de entrada

Em Swift, configure o controlador através do tipo de valor `PushwooshInboxKitAttributes`. Em Objective-C, use os setters compatíveis com `@objc` no controlador — `PushwooshInboxKitAttributes` é uma struct Swift e não é "bridged".

<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>

A struct `Style` expõe todas as cores, fontes, raios de canto e o formatador de data usados pelas células padrão. Cada valor é uma cor semântica da Apple por padrão, então a caixa de entrada reage ao modo escuro do sistema automaticamente.

<img src="/setting-up-pushwoosh-inboxkit-ios-custom.webp" alt="Feed do InboxKit com estilo personalizado com cores da marca aplicadas ao título e ao indicador de não lido" width="280" style="display: block; margin: 0 auto;"/>

<p style="text-align: center; opacity: 0.7; font-size: 0.875rem; margin-top: 0.5rem;">Célula com legenda com um tema personalizado aplicado através de <code>PushwooshInboxKitAttributes.Style</code>.</p>

## Lidar com toques e atualizações

Conforme-se com `PushwooshInboxKitDelegate` para reagir a ações do usuário e eventos de atualização. Cada método tem uma implementação padrão, então você só substitui o que precisa:

<Tabs syncKey="code-example">
<TabItem label="Swift">
```swift
final class InboxCoordinator: NSObject, PushwooshInboxKitDelegate {
    func inboxKit(_ vc: PushwooshInboxKitViewController,
                  didSelect message: PWInboxMessageProtocol) -> Bool {
        // Return true to let the SDK open the message URL or richmedia.
        // Return false if you handled the tap entirely (e.g. routed to a custom screen).
        return true
    }

    func inboxKit(_ vc: PushwooshInboxKitViewController,
                  didRefreshWith messages: [PWInboxMessageProtocol],
                  error: Error?) {
        // Show your own empty / error state here if needed.
    }
}

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

<Aside type="note" title="Persistência">
Marcar como lido, marcar tudo como lido, excluir e limpar lidos persistem no armazenamento local da caixa de entrada do Pushwoosh antes que a solicitação de rede seja enviada. O estado sobrevive a uma reinicialização do processo, mesmo quando o backend ainda não reconheceu a alteração.
</Aside>

## Próximos passos

<LinkCard
  title="Referência da API PushwooshInboxKit"
  description="Documentação DocC gerada para cada tipo público."
  href="https://pushwoosh.github.io/pushwoosh-ios-sdk/PushwooshInboxKit/documentation/pushwooshinboxkit/"
/>