# إعداد InboxKit باستخدام CocoaPods

*متوفر منذ iOS SDK [7.0.40](https://github.com/Pushwoosh/pushwoosh-ios-sdk/releases/tag/7.0.40).*

يتم شحن InboxKit كـ subspec اختياري لـ pod `PushwooshXCFramework` الشامل. يجب أن تكون SDK الرئيسية مدمجة بالفعل؛ إذا كنت تبدأ من الصفر، اتبع [دليل التكامل الأساسي](/ar/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk-7-0/basic-integration-guide/) أولاً.

## إضافة pod الخاص بـ InboxKit

1. افتح ملف `Podfile` الخاص بك وأضف subspec الخاص بـ InboxKit إلى هدف تطبيقك:

```ruby
target 'MyApp' do
  use_frameworks!

  pod 'PushwooshXCFramework'
  pod 'PushwooshXCFramework/PushwooshInboxKit'
end
```

2. قم بتشغيل `pod install` من دليل مشروعك:

```bash
pod install
```

3. افتح ملف `.xcworkspace` الذي تم إنشاؤه. تم الآن ربط 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، استخدم setters المتوافقة مع `@objc` على وحدة التحكم — `PushwooshInboxKitAttributes` هي struct في 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` struct جميع الألوان والخطوط وأنصاف أقطار الزوايا ومنسق التاريخ الذي تستخدمه الخلايا الافتراضادية. كل قيمة هي لون دلالي من 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;">خلية مع تسمية توضيحية مع تطبيق سمة مخصصة من خلال <code>PushwooshInboxKitAttributes.Style</code>.</p>

## التعامل مع النقرات والتحديثات

امتثل لـ `PushwooshInboxKitDelegate` للتفاعل مع إجراءات المستخدم وأحداث التحديث. كل دالة لها تنفيذ افتراضي، لذا يمكنك فقط تجاوز ما تحتاجه:

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

تشحن SDK العمليات المجمعة كدوال `@objc` على وحدة التحكم، لذا يمكنك ربطها مباشرة بـ `UIBarButtonItem`:

<Tabs syncKey="code-example">
<TabItem label="Swift">
```swift
let markAll = UIBarButtonItem(
    image: UIImage(systemName: "checkmark.circle"),
    style: .plain,
    target: inboxVC,
    action: #selector(PushwooshInboxKitViewController.markAllAsRead)
)
let clearRead = UIBarButtonItem(
    image: UIImage(systemName: "trash"),
    style: .plain,
    target: inboxVC,
    action: #selector(PushwooshInboxKitViewController.clearReadMessages)
)
inboxVC.navigationItem.rightBarButtonItems = [clearRead, markAll]
```
</TabItem>
</Tabs>

<Aside type="note" title="الاستمرارية">
يتم الاحتفاظ بحالات التحديد كمقروء، وتحديد الكل كمقروء، والحذف، ومسح المقروء في مساحة تخزين صندوق الوارد المحلية لـ Pushwoosh قبل إرسال طلب الشبكة. تبقى الحالة بعد إعادة تشغيل العملية حتى لو لم تعترف الواجهة الخلفية بالتغيير بعد.
</Aside>

## الخطوات التالية

<LinkCard
  title="مرجع واجهة برمجة التطبيقات (API) لـ PushwooshInboxKit"
  description="توثيق DocC تم إنشاؤه لكل نوع عام."
  href="https://pushwoosh.github.io/pushwoosh-ios-sdk/PushwooshInboxKit/documentation/pushwooshinboxkit/"
/>