الترحيل من Cocoapods إلى Swift Package Manager



يعتبر Cocoapods مدير التبعية الأكثر شعبية لنظام iOS. في السنوات الأخيرة ، عملت Apple على تطوير مدير تبعية Swift Package Manager (SPM) الأصلي.

في البداية ، كان استخدامه ممكنًا فقط لتطبيقات Swift أو الطرفية من جانب الخادم. تم تشغيل SPM وتعديله على مثل هذه التطبيقات ، وتعرف المجتمع على عمله ، واستقبل فريق Apple مختبرين بيتا.

مع إصدار Xcode 11 ، بدأت SPM في دخول عالم التطوير لنظام iOS. الآن هي بالفعل أداة كاملة يمكن استخدامها ، ولكن حتى الآن مع قيود.

في الإصدار الحالي ، لا يدعم SPM الموارد (نحن في انتظار SE-0271 ). في بلدنا ، كل وحدة هي اعتماد ذري ​​على الاكتفاء الذاتي يمكن ربطه بالمشروع ، لذلك هناك حاجة إلى الموارد (الأقلمة ، الأصول).

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

لماذا تهاجر من Cocoapods إلى SPM؟


  • المهد والاندماج في النظام البيئي. بالفعل ، تقترح Xcode إنشاء أو إضافة حزمة SPM.
  • على عكس Cocoapods ، لم يعد من الضروري أن يكون لديك مساحة عمل للعمل على مشروع التبعية.
  • بعد إضافة تبعية جديدة ، لا تحتاج إلى تثبيت pod وإعادة بناء المشروع بأكمله.
  • من الملائم استخدام التبعيات المحلية: لا يتغير هيكل المجلد ، تتم إعادة بنائه بشكل أسرع.
  • SPM , Cocoapods, Ruby ( iOS-).
  • Cocoapods Xcode Swift.
  • Example : Xcode Package.swift .
  • abstract_target: SPM .
  • blame , .
  • Ruby, .

?


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

  • يجب ألا يكون هناك تقاطعات بين تبعيات SPM و Cocoapods.
  • يجب دمج الهجرة في عملية تطوير المكون. إذا كان المكون قيد التطوير ، فيجب إجراء ترقية الإصدار لكل من Cocoapods و SPM.
  • لا ينبغي أن يكون هناك أي صعوبات للفريق ، مما يعني أنك بحاجة إلى تنفيذ تثبيت جميع التبعيات من خلال قيادة cli واحدة.
  • يجب تضمين الترحيل في القرص المضغوط CI. يجب بناء المشروع محليًا وعلى وكلاء CI ، في جميع التكوينات.

من أين نبدأ؟


بادئ ذي بدء ، نجمع قائمة كاملة من تبعياتك - يتم تقديمها في Podfile.lock. يمكنك استخدام أدوات مساعدة مثل SPMReady .



بعد ذلك ، نجمعها حسب العلاقة. على سبيل المثال ، تعتمد جميع المكونات تقريبًا على SMENetwork ، مما يعني أننا لن نتمكن من ترحيلها إلى SPM حتى يتم ترحيل SMENetwork نفسها.

ثم نختار وحدة واحدة تعتمد عليها معظم الوحدات - SMENetwork.
أخيرًا ، انتقل إلى مستودع هذه الوحدة ، وتحقق منها في مجلد وقم بإنشاء وحدة نمطية في جذر هذا المجلد.

git clone ssh://.../smenetwork.git Developer/SMENetwork
cd Developer/SMENetwork
swift package init
Creating library package: SMENetwork
Creating Package.swift
Creating Sources/
Creating Sources/SMENetwork/SMENetwork.swift
Creating Tests/
Creating Tests/LinuxMain.swift
Creating Tests/SMENetworkTests/
Creating Tests/SMENetworkTests/SMENetworkTests.swift
Creating Tests/SMENetworkTests/XCTestManifests.swift

ونتيجة لذلك ، نحصل على ملف Package.swift الرئيسي ومجلد المصادر والاختبارات. إذا كان لديك بالفعل ، فلن تطحن. تم إنشاء الملفات SMENetwork.swift و SMENetworkTests.swift و XCTestManifests.swift و LinuxMain.swift لمثال عملية الحزمة ، ويمكن حذفها.

يبدو ملف Package.swift كما يلي:



الآن دعونا نلقي نظرة على ملف SMENetwork.podspec:



كما ترى ، المصادر والاختبارات في مجلدات أخرى. انقل الملفات واختبر مشروع Cocoapods Example.



نضيف منصة التطوير إلى Package.swift وننقل التبعيات من ملف podspec هنا. نتأكد من أنها تدعم SPM: فقط تحقق من وجود ملف Package.swift في Github. إذا لم يكن موجودًا ولم يكن هناك حتى علاقات عامة معه ، فسوف نقوم بعلاقات عامة ونساعد مجتمع المصادر المفتوحة.





بالنسبة لـ SPM ، لا تحتاج إلى إنشاء مشروع مثال: فقط افتح Package.swift في Xcode وسيقوم بتنزيل وتوصيل التبعيات وإنشاء الأهداف وفقًا لمواصفاتنا. يمكننا الركض فقط.



في حالتنا ، عمل كل شيء تقريبًا خارج الصندوق ، باستثناء مكان واحد نسيت فيه مؤسسة الاستيراد: اعتاد مطورو iOS على حقيقة أن UIKit و Foundation اختياريان ، لأنه يعمل بدونهما. حان الوقت لتعلم هذه العادة.



يتم تجميع الحزمة واختبارات الترجمة ، لكنها تفشل.



وهنا نواجه قيودًا على نقص الموارد في Package ، وتستند الاختبارات إلى moks الموجودة في json ، ونحن في انتظار SE-0271 ...

مجموع


يعد التبديل من Cocoapods إلى SPM أمرًا سهلاً. الخطوات واضحة ، لكن التدفق رتيب ويتطلب أتمتة.

بدون جهد كبير ، يمكنك إنشاء حزمة من ملف .podspec وإيداعها في المستودع. والأهم من ذلك - يمكنك الانتقال مع مشروع واحد ، وسيبقى الآخر على Cocoapods. إذا أراد بالطبع.

All Articles