# Swift Package Manager로 InboxKit 설정하기

*iOS SDK [7.0.40](https://github.com/Pushwoosh/pushwoosh-ios-sdk/releases/tag/7.0.40)부터 사용 가능합니다.*

InboxKit은 `Pushwoosh-XCFramework` Swift 패키지 내의 별도 라이브러리 제품으로 제공됩니다. 메인 SDK가 이미 통합되어 있어야 합니다. 처음부터 시작하는 경우, 먼저 [기본 통합 가이드](/ko/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk-7-0/basic-integration-guide/)를 따르세요.

## InboxKit 패키지 제품 추가하기

1. Xcode에서 프로젝트를 열고 프로젝트 설정 → **Package Dependencies**로 이동한 다음 **+** 버튼을 누릅니다.

2. 다음 Package URL을 입력합니다:

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

3. **Dependency Rule**을 최신 안정 버전으로 **Up to Next Major Version**으로 설정한 다음, **Add Package**를 클릭합니다.

4. 패키지 선택 화면에서 최소한 다음 제품을 선택하고 메인 앱 타겟에 추가합니다:

- **PushwooshFramework** (필수)
- **PushwooshCore** (필수)
- **PushwooshBridge** (필수)
- **PushwooshInboxKit** (새 모듈)

<img src="/setting-up-pushwoosh-inboxkit-ios-spm-products.webp" alt="MyApp 타겟에 PushwooshBridge, PushwooshCore, PushwooshFramework, PushwooshInboxKit이 추가된 Xcode 패키지 제품 선택 대화상자" width="640" style="display: block; margin: 0 auto;"/>

<p style="text-align: center; opacity: 0.7; font-size: 0.875rem; margin-top: 0.5rem;">강조 표시된 네 가지 제품을 메인 앱 타겟에 추가하세요.</p>

5. 메인 앱 타겟을 열고 **Frameworks, Libraries, and Embedded Content** 아래에 `PushwooshInboxKit.xcframework`가 목록에 있고 임베드되었는지 확인합니다.

이것으로 끝입니다 — 이제 InboxKit이 메인 SDK와 함께 연결되었습니다.

## 인박스 표시하기

인박스 컨트롤러를 모든 내비게이션 플로우에 추가하세요. 기본 설정만으로도 세 가지 표준 셀 유형이 있는 작동하는 인박스를 얻을 수 있습니다:

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

## 인박스 사용자 정의하기

Swift에서는 `PushwooshInboxKitAttributes` 값 유형을 통해 컨트롤러를 구성합니다. Objective-C에서는 컨트롤러의 `@objc` 친화적인 세터를 사용합니다 — `PushwooshInboxKitAttributes`는 Swift 구조체이며 브리지되지 않습니다.

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

`Style` 구조체는 기본 셀에서 사용하는 모든 색상, 글꼴, 모서리 반경 및 날짜 포맷터를 노출합니다. 모든 값은 기본적으로 Apple 시맨틱 색상이므로 인박스는 시스템 다크 모드에 자동으로 반응합니다.

<img src="/setting-up-pushwoosh-inboxkit-ios-custom.webp" alt="제목과 읽지 않음 표시기에 브랜드 색상이 적용된 사용자 정의 스타일의 InboxKit 피드" width="280" style="display: block; margin: 0 auto;"/>

<p style="text-align: center; opacity: 0.7; font-size: 0.875rem; margin-top: 0.5rem;">`PushwooshInboxKitAttributes.Style`을 통해 사용자 정의 테마가 적용된 캡션 셀.</p>

## 탭 및 새로고침 처리하기

`PushwooshInboxKitDelegate`를 준수하여 사용자 작업 및 새로고침 이벤트에 반응합니다. 모든 메서드에는 기본 구현이 있으므로 필요한 것만 재정의하면 됩니다:

<Tabs syncKey="code-example">
<TabItem label="Swift">
```swift
final class InboxCoordinator: NSObject, PushwooshInboxKitDelegate {
    func inboxKit(_ vc: PushwooshInboxKitViewController,
                  didSelect message: PWInboxMessageProtocol) -> Bool {
        // SDK가 메시지 URL이나 리치미디어를 열도록 하려면 true를 반환합니다.
        // 탭을 완전히 처리한 경우(예: 사용자 정의 화면으로 라우팅) false를 반환합니다.
        return true
    }

    func inboxKit(_ vc: PushwooshInboxKitViewController,
                  didRefreshWith messages: [PWInboxMessageProtocol],
                  error: Error?) {
        // 필요한 경우 여기에 자신만의 비어 있거나 오류 상태를 표시합니다.
    }
}

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

<Aside type="note" title="지속성">
읽음으로 표시, 모두 읽음으로 표시, 삭제, 읽은 항목 지우기는 모두 네트워크 요청이 전송되기 전에 로컬 Pushwoosh 인박스 저장소에 유지됩니다. 상태는 백엔드가 아직 변경 사항을 인지하지 못한 경우에도 프로세스 재시작 후에도 유지됩니다.
</Aside>

## 다음 단계

<LinkCard
  title="PushwooshInboxKit API 참조"
  description="모든 공개 유형에 대해 생성된 DocC 문서입니다."
  href="https://pushwoosh.github.io/pushwoosh-ios-sdk/PushwooshInboxKit/documentation/pushwooshinboxkit/"
/>