ما هي Carthage، وكيف يمكنها تحسين تطوير التطبيقات؟

Carthage مدير اعتماديات لمشروعات iOS و macOS يتيح للمطورين دمج مكتبات الأطراف الثالثة في تطبيقاتهم بطريقة بسيطة وفعالة. وعلى خلاف أدوات أخرى مثل CocoaPods، تركز Carthage على أن تكون بسيطة وغير متدخلة، أي أنها لا تغيّر بنية المشروع ولا تتطلب سوى ملف نصي بسيط، هو Cartfile، يدرج الاعتماديات. وقد جعلها ذلك خيارًا شائعًا بين المطورين الذين يريدون الاحتفاظ بالتحكم في إعداد مشروعاتهم مع الاستفادة من مكتبات الأطراف الثالثة وأطر عملها.

تعمل Carthage ببناء أطر عمل ثنائية، يمكن بعد ذلك دمجها مباشرة في مشروعات Xcode. ويعني هذا النهج أن المطورين يستطيعون الاستفادة من أوقات بناء أسرع وعملية تطوير أكثر انسيابية. ومع Carthage، يمكن إضافة الاعتماديات وتحديثها وإدارتها بسهولة دون ملفات تكوين معقدة أو تغييرات غير مرغوبة في المشروع. وفي المقابل، تُضاف أطر العمل المبنية إلى Xcode يدويًا. وهذا يجعل Carthage أداة جيدة لمن يريدون حلًا بسيطًا لكنه قوي لإدارة الاعتماديات في مشروعات تطوير iOS و macOS.

Carthage مدير اعتماديات لامركزي لمشروعات iOS و macOS. وهي تجلب مكتبات الأطراف الثالثة وتبنيها على هيئة أطر عمل، يضيفها المطور بعد ذلك بنفسه إلى مشروع Xcode، دون أن يتغير ملف المشروع تلقائيًا. وهذا يمنح تحكمًا كاملًا في بنية المشروع وقد يوفر أوقات بناء أسرع، لأن الاعتماديات لا تُبنى إلا عند تحديثها. وتُستخدم Carthage أساسًا بديلًا أبسط لـ CocoaPods، بينما يُعدّ Swift Package Manager الحل المدمج من Apple لإدارة الحزم.

More about Carthage

Carthage مدير اعتماديات لنظامي iOS و macOS يقدم طريقة بسيطة ومرنة لدمج مكتبات الأطراف الثالثة في المشروعات. وعلى خلاف أدوات أخرى تغيّر إعداد المشروع تلقائيًا، تركز Carthage على الحد الأدنى من الإعداد وتمنح المطورين حرية إدارة مشروعاتهم دون قيود غير ضرورية.

من الناحية التقنية، تعمل Carthage ببناء أطر عمل ثنائية من الشيفرة المصدرية، أو تنزيل أطر مبنية مسبقًا، ما يتيح للمطورين تضمين أطر العمل هذه مباشرة في مشروعات Xcode. ويعني ذلك أن Carthage لا تغيّر ملفات المشروع، بل تنشئ مجلد «Carthage/Build» تُخزَّن فيه أطر العمل المترجمة. ويمنح هذا النهج المطورين تحكمًا كاملًا في بنية مشروعاتهم واعتمادياتها.

تدعم Carthage ثلاث وظائف أساسية، تقدم كل منها طريقة مختلفة للتعامل مع الاعتماديات:

  1. بناء الاعتماديات: تستطيع Carthage أن تبني تلقائيًا جميع الاعتماديات المحددة في «Cartfile». وهذا يتيح للمطورين التركيز على شيفرتهم الخاصة بينما تتولى Carthage ترجمة المكتبات الخارجية. وهذه الوظيفة مثالية للمشروعات التي تتطلب عدة مكتبات من أطراف ثالثة.

  2. تحديث الاعتماديات: بأمر واحد، تستطيع Carthage تحديث جميع الاعتماديات إلى أحدث الإصدارات التي تستوفي متطلبات الإصدارات في Cartfile. وهذا يسهّل إبقاء المكتبات محدّثة، بما في ذلك الإصلاحات الأمنية، وهو أمر مهم للحفاظ على التوافق والأمان.

  3. دمج أطر العمل: تنشئ Carthage أطر عمل يضيفها المطور بنفسه إلى مشروع Xcode، عادةً ضمن «Frameworks, Libraries, and Embedded Content». ويتطلب ذلك خطوة يدوية لكنه يمنح رؤية كاملة لما هي المكتبات التي تشكل جزءًا من المشروع بالضبط، ويسهّل الاستفادة من الميزات والتحسينات الجديدة في مكتبات الأطراف الثالثة.

ومن أكبر نقاط قوة Carthage بساطتها ومرونتها. فبتجنب التغييرات المؤتمتة في المشروع، تتيح Carthage للمطورين الاحتفاظ بالتحكم في مشروعاتهم. وهذا يقلل خطر التعارضات في ملف المشروع ويسهّل دمج اعتماديات جديدة دون الإخلال ببنى المشروع القائمة.

كما يوفر نهج Carthage في إدارة الاعتماديات الوقت في العمل اليومي. فبعدم بناء الاعتماديات إلا عند إضافتها أو تحديثها، وتجنب التغييرات غير الضرورية في المشروع، تقلل Carthage الوقت والموارد اللازمة لصيانة المشروع. وهذا يجعلها أداة جيدة للمطورين الذين يريدون تحسين سير عملهم والتركيز على تقديم برمجيات عالية الجودة.

عمليًا، كان لـ Carthage أثر كبير في طريقة إدارة المطورين للاعتماديات في مشروعات iOS و macOS. فقد استخدمتها فرق تطوير صغيرة وكبيرة لإبقاء مشروعاتها محدّثة وآمنة وسهلة الصيانة. غير أن تطوير Carthage تباطأ اليوم بشكل كبير، وباتت معظم المكتبات تستهدف Swift Package Manager أولًا.

خلاصة القول، Carthage أداة تجمع بين البساطة والمرونة والكفاءة في حل يجعل إدارة الاعتماديات أكثر شفافية للمطورين الأفراد والفرق الكبيرة على حد سواء. وقد جعلها إعدادها البسيط وتدخلها الأدنى في بنية المشروع أداة مفيدة في تطوير التطبيقات، حيث تُعدّ عمليات الدمج السريعة والآمنة ضرورية.

Frequently asked questions about Carthage

ما هي Carthage، وكيف تعمل عمليًا؟

Carthage مدير اعتماديات لامركزي لمشروعات iOS و macOS و tvOS و watchOS المكتوبة بـ Swift و Objective-C. ولا يوجد سجل مركزي للحزم، بل تشير كل اعتمادية مباشرة إلى مستودع Git، عادةً على GitHub.

تُحدَّد الاعتماديات في ملف نصي اسمه Cartfile في المجلد الجذر للمشروع. وعند تشغيل الأمر carthage update، تعثر Carthage على إصدارات مناسبة، وتجلب الشيفرة المصدرية إلى مجلد Carthage/Checkouts، وتبني كل مكتبة بأدوات البناء الخاصة بـ Xcode. وتوضع أطر العمل الجاهزة في Carthage/Build.

لا تغيّر Carthage ملف مشروع Xcode. فالمطور يضيف أطر العمل المبنية ضمن Frameworks, Libraries, and Embedded Content في الهدف المعني. وهذا يمنح تحكمًا كاملًا في إعداد المشروع لكنه يتطلب عملًا يدويًا أكثر قليلًا من الأدوات التي تدمج تلقائيًا.

كيف تُثبَّت Carthage، وكيف تُضاف مكتبة؟

تُثبَّت Carthage غالبًا بـ Homebrew باستخدام الأمر brew install carthage. وبدلًا من ذلك، يمكن تنزيل حزمة مثبّت من إصدارات المشروع على GitHub.

تُضاف المكتبة عادةً في أربع خطوات:

  • يُنشأ الملف Cartfile في المجلد الجذر للمشروع بسطر مثل github "Alamofire/Alamofire" ~> 5.0.
  • يجلب الأمر carthage update --use-xcframeworks --platform iOS المكتبة ويبنيها.
  • يُسحب ملف .xcframework الجاهز من Carthage/Build إلى Frameworks, Libraries, and Embedded Content في هدف التطبيق.
  • بالنسبة إلى أطر العمل الديناميكية، يُختار Embed & Sign.

يعني العامل ~> قبول الإصدارات الأحدث ما دام الإصدار الرئيسي ثابتًا. ويمكن بعد ذلك استخدام المكتبة في الشيفرة بـ import Alamofire.

ما الفرق بين Cartfile و Cartfile.resolved؟

يصف Cartfile الاعتماديات التي يحتاجها المشروع ومتطلبات الإصدارات التي يجب أن تستوفيها، مثل ~> 5.0 أو >= 2.1 أو فرع محدد. ويُعدَّل الملف يدويًا ويعبّر عن النية.

أما Cartfile.resolved فيُنشأ تلقائيًا ويحتوي على الإصدارات أو الإيداعات الدقيقة التي اختيرت فعلًا، بما في ذلك اعتماديات الاعتماديات نفسها. ويعمل الملف قفلًا، بحيث يحصل كل فرد في الفريق وكل خادم بناء على الشيفرة نفسها تمامًا.

ويظهر الفرق في الأوامر:

  • يعثر carthage update على أحدث الإصدارات المطابقة لـ Cartfile ويكتب النتيجة في Cartfile.resolved.
  • يجلب carthage bootstrap الإصدارات المدرجة في Cartfile.resolved بالضبط ويبنيها.

لذلك ينبغي الاحتفاظ بالملفين كليهما في نظام التحكم في الإصدارات. ويمكن وضع الاعتماديات المستخدمة أثناء التطوير فقط، مثل مكتبات الاختبار، في Cartfile.private.

كيف تبني Carthage حزم XCFrameworks، ولماذا يهم ذلك؟

في السابق، كانت Carthage تبني ما يسمى أطر العمل المدمجة، التي تُجمع فيها شيفرة الأجهزة الفعلية والمحاكي في ملف واحد بأداة lipo. وتوقف ذلك عن العمل مع Xcode 12، لأن الأجهزة والمحاكيات على Apple Silicon تستخدم كلاهما معمارية arm64، ولا يمكن أن تظهر المعمارية نفسها مرتين في إطار عمل مدمج واحد.

والحل هو XCFrameworks، التي قدمتها Apple مع Xcode 11. وتُعدّ XCFramework حزمة تحتوي على ملف ثنائي منفصل لكل منصة ونسخة، مثل جهاز iOS ومحاكي iOS. واعتبارًا من Carthage 0.37، تُبنى XCFrameworks بالخيار --use-xcframeworks، مثل carthage bootstrap --use-xcframeworks.

توضع النتيجة على هيئة مجلدات .xcframework في Carthage/Build. وتُضاف مباشرة إلى هدف التطبيق، ولم تعد مرحلة البناء السابقة بـ carthage copy-frameworks لازمة.

ما الفرق بين Carthage و CocoaPods و Swift Package Manager؟

تحل الأدوات الثلاث المهمة نفسها، لكن بطرق مختلفة:

  • Carthage لامركزية وتجلب الاعتماديات مباشرة من مستودعات Git المحددة في Cartfile. وتُبنى المكتبات على هيئة أطر عمل ثنائية، ولا يتغير مشروع Xcode. ويتم الدمج يدويًا.
  • CocoaPods تستخدم سجلًا مركزيًا للمكتبات و Podfile. وينشئ الأمر pod install مساحة عمل ويغيّر إعداد المشروع، فيحدث الدمج تلقائيًا لكنه أقل شفافية. وتمر CocoaPods الآن بوضع الصيانة.
  • Swift Package Manager (SPM) أداة Apple الخاصة وهي مدمجة في Xcode. وتُضاف الحزم مباشرة في Xcode أو توصف في Package.swift، ولا يلزم أي تثبيت إضافي.

تكون Carthage مفيدة عندما يُراد تحكم كامل في ملف المشروع وأوقات بناء أقصر، لأن الاعتماديات لا تُبنى إلا عند تحديثها. أما للمشروعات الجديدة، فقد أصبحت SPM الخيار الأوسع استخدامًا، إذ تدعمها معظم المكتبات.

كيف يمكن إبقاء أوقات البناء مع Carthage منخفضة؟

لأن Carthage تبني الاعتماديات من الشيفرة المصدرية افتراضيًا، قد تستغرق عملية البناء الأولى وقتًا طويلًا. ويمكن لعدة خيارات تقليل الوقت:

  • يقصر --platform iOS البناء على المنصات التي يستخدمها المشروع فعلًا.
  • يتخطى --cache-builds الاعتماديات التي بُنيت بالفعل بالإصدار نفسه، بحيث لا يُعاد بناء سوى المكتبات المتغيرة.
  • يمكن تحديث اعتماديات منفردة كلٌّ على حدة، مثلًا بـ carthage update Alamofire، بدلًا من تحديثها جميعًا.
  • توفر مكتبات كثيرة أطر عمل مبنية مسبقًا في إصداراتها على GitHub، تنزّلها Carthage تلقائيًا. ويمكن تحديد حزم SDK مغلقة المصدر بـ binary ورابط إلى مواصفات JSON.

وعلى خوادم البناء، يمكن أيضًا تخزين مجلد Carthage/Build مؤقتًا بين عمليات التشغيل. وتُبقي فرق كثيرة هذا المجلد خارج Git عبر .gitignore وتعيد إنشاءه بـ carthage bootstrap.

Carthage for dummies

Carthage أداة تساعد على تنظيم وإدارة اللبنات الصغيرة التي تتكون منها التطبيقات، والتي تسمى «الاعتماديات». تخيّلوا أنكم تبنون تطبيقًا يحتاج إلى بعض الأجزاء الجاهزة التي صنعها آخرون بالفعل ليعمل بشكل أفضل. تساعد Carthage على جلب هذه الأجزاء وتتبعها، بحيث لا يلزم صنعها من الصفر. وهي تعمل قليلًا مثل أمين مكتبة يتابع كل الكتب اللازمة لمشروع ما، حتى يتمكن الكاتب من التركيز على قصته الخاصة. وهي تجعل تطوير التطبيقات أسهل وأسرع، لأنه يمكن إعادة استخدام عمل الآخرين مع التأكد من أن كل شيء يتلاءم معًا.

أضف تعليق