يعتبر 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. إذا أراد بالطبع.