CocoaPods، جوهرة من Ruby لتطوير iOS
CocoaPods مدير اعتماديات لتطوير iOS مكتوب بلغة Ruby. أردت أن أعرف كيف استفاد CocoaPods من مزايا Ruby ومن مشاريع Ruby القائمة ليصبح جزءًا أساسيًا من سير عمل تطوير iOS.

ما هو CocoaPods؟
CocoaPods مدير اعتماديات (dependency manager) لمشاريع Cocoa وCocoa Touch، ويغطي تطوير تطبيقات macOS وiOS وwatchOS وtvOS. وهو مكتوب بلغة Ruby ويُوزَّع عبر RubyGems.
ما مدى انتشاره؟
بحسب الموقع الرسمي، يضم CocoaPods أكثر من 59 ألف مكتبة ويُستخدم في أكثر من 3 ملايين تطبيق. وقد نُزِّلت الـ gem أكثر من 25 مليون مرة. ورغم أن Swift Package Manager يكتسب زخمًا بوصفه أداة رسمية من Apple، ما زال CocoaPods الطريقة الأكثر شيوعًا لتوزيع كود Swift وObjective-C.
مكتبات CocoaPods الشائعة:
- مكتبة للاتصال بالشبكة عبر HTTP مكتوبة بلغة Swift
- نُزِّلت أكثر من 42 مليون مرة
- تُستخدم في أكثر من 660 ألف تطبيق
- يقول فريق Firebase: "نوصي باستخدام CocoaPods لتثبيت المكتبات."
- نُزِّلت أكثر من 23 مليون مرة
لماذا Ruby؟
عادةً ما يُكتب مدير الحزم باللغة التي يخدمها. فـ NPM مكتوب بلغة JavaScript، وRubyGem بلغة Ruby، وGo modules بلغة Go. لكن CocoaPods، الخيار الأول لمطوّري Swift وObjective-C، مكتوب بلغة Ruby. تساءلت عن سبب بدايته بلغة Ruby، فسألت Eloy، مؤسس المشروع.
بحسب مُنشئ المشروع Eloy Durán:
1. الـ Duck typing والـ monkey patching
تسهّل ميزتا duck typing وmonkey patching في Ruby على المطوّرين تخصيص CocoaPods بما يناسب مشاريعهم. وقد ساعد ذلك كثيرًا في المرحلة المبكرة من تطوير CocoaPods، حين لم يكن قادرًا على تغطية كل الحالات المختلفة. فلو كان CocoaPods مكتوبًا بلغة Swift أو Objective-C ومُترجمًا إلى ملف ثنائي، لكان توسيعه بحرية أمرًا صعبًا جدًا. 2. RubyGems يستخدم CocoaPods أداة bundler لتحليل إصدارات التبعيات، والبنية التحتية لـ RubyGems للتوزيع. 3. خبرة المُنشئ كان Eloy يستخدم Ruby لكتابة تطبيقات Cocoa، لذلك كان مرتاحًا لكتابة كود Ruby يعدّل مشاريع Xcode.
توسيع الحدود
حين بدأ Eloy مشروع CocoaPods، دفعته عوامل كثيرة إلى اختيار Ruby. وأكثرها إثارة لاهتمامي هو إلمامه بلغة Ruby أثناء تطوير تطبيقات macOS، رغم أنهما يبدوان مجالين مختلفين. فقد لاحظ غياب إدارة التبعيات، وحلّ المشكلة بأفضل أداة كانت في يده. ولو حاول بناء CocoaPods بلغة Objective-C، لربما احتاج إلى وقت وجهد أكبر بكثير ليصل إلى الانتشار الذي يحظى به اليوم. وأعتقد أيضًا أن من المهم تخصيص وقت لتعلّم لغات وأطر مختلفة خارج مجال المرء ولغته وتجربتها. فقد تفيد بشكل مباشر أو غير مباشر. على سبيل المثال، المفهوم الأساسي لـ Swift UI لم يُبتكر معه، بل استُلهم من React. ففي عالم تطوير البرمجيات، نتعامل مع مشكلات متشابهة لكن على منصات مختلفة. فلماذا لا ننظر حولنا لنرى كيف يتعامل الآخرون معها؟


