📦 Carthage لـ Swift: مدير التبعيات اللامركزي
Carthage هو مدير تبعيات لامركزي لمنصة Apple (iOS, macOS, tvOS, watchOS). على عكس CocoaPods، لا يقوم Carthage بتعديل مشروعك تلقائيًا - بل يقوم ببناء الأطر (Frameworks) وتترك لك مهمة ربطها يدويًا في Xcode. هذا يمنحك تحكمًا كاملاً في عملية البناء ويقلل من "السحر" غير المرغوب فيه.
تعمل المكتبة من خلال ملف Cartfile - وهو ملف تعريفي تُدرج فيه التبعيات. يقوم Carthage باستنساخ المستودعات، وبنائها باستخدام xcodebuild، ثم وضع الأطر الجاهزة .framework في مجلد Carthage/Build. بعد ذلك، تقوم أنت بإضافتها يدويًا إلى مشروعك.
لماذا تحتاج Carthage؟ إذا كنت تُقدّر الشفافية، وتريد تجنب تعارض الإصدارات، ولا تُحب أن تقوم الأدوات بتعديل مشروعك تلقائيًا. إنه مثالي للفرق التي يفضل فيها كل مطور التحكم في كيفية ربط التبعيات، وللمشاريع ذات متطلبات الأمان الصارمة.
1. تثبيت Carthage
يمكن تثبيت Carthage عبر Homebrew (الموصى به) أو تحميل ملف .pkg من GitHub.
# التثبيت عبر Homebrew
brew install carthage
# التحقق من الإصدار
carthage version
إذا لم يكن Homebrew مثبتًا، قم بتثبيته أولًا: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
ملاحظة: Carthage لا يدعم Linux أو Windows رسميًا (فقط macOS).
2. البداية السريعة - مثال عملي مصغر
أنشئ مشروع Xcode جديد (مثل Single View App). ثم في جذر المشروع، أنشئ ملفًا باسم Cartfile (بدون امتداد) وأضف التبعية التالية:
# Cartfile
github "Alamofire/Alamofire" ~> 5.8
الآن، نفّذ الأمر التالي في الطرفية (من مجلد المشروع):
carthage update --platform iOS
بعد الانتهاء، ستجد في مجلد Carthage/Build/iOS ملف Alamofire.framework. افتح Xcode، واسحب هذا الإطار إلى قسم Frameworks, Libraries, and Embedded Content الخاص بالهدف (Target). اختر "Embed & Sign".
الآن يمكنك استيراد المكتبة:
import Alamofire
// طلب بسيط
AF.request("https://api.github.com/users/defunkt").response { response in
debugPrint(response)
}
أحسنت! لقد قمت للتو بربط تبعية باستخدام Carthage.
3. الأوامر والوظائف الأساسية لـ Carthage
فيما يلي الأوامر الرئيسية لـ Carthage. معظمها يُستخدم من خلال الطرفية.
🔹 1. carthage update
الصيغة carthage update [--platform PLATFORM] [--configuration CONFIG] [--no-build] [--use-xcframeworks]
الوظيفة: يقوم بتحميل وبناء جميع التبعيات المذكورة في Cartfile.resolved (أو تحديثها إلى أحدث الإصدارات إذا كان الملف غير موجود). يقوم بإنشاء مجلد Carthage/Build.
# تحديث لنظام iOS فقط باستخدام xcframeworks
carthage update --platform iOS --use-xcframeworks
🔹 2. carthage bootstrap
الصيغة carthage bootstrap [--platform PLATFORM] [--configuration CONFIG] [--use-xcframeworks]
الوظيفة: يقوم ببناء التبعيات باستخدام Cartfile.resolved الموجود (بدون تحديث الإصدارات). مثالي لبيئات CI/CD - يضمن تكرارية البناء.
# إعادة بناء كل شيء كما هو محدد في Cartfile.resolved
carthage bootstrap --platform macOS