# إعداد InboxKit باستخدام Swift Package Manager

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

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

## إضافة منتج حزمة InboxKit

1. افتح مشروعك في Xcode وانتقل إلى إعدادات المشروع ← **Package Dependencies**، ثم اضغط على زر **+**.

2. أدخل عنوان 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="مربع حوار اختيار منتجات الحزمة في Xcode مع إضافة PushwooshBridge و PushwooshCore و PushwooshFramework و PushwooshInboxKit إلى هدف 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;">أضف المنتجات الأربعة المظللة إلى هدف تطبيقك الرئيسي.</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;">خلية مع تسمية توضيحية مع تطبيق سمة مخصصة من خلال <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>

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

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

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