مستودع واحد مع Swift: تنظيم الكود للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مستودع واحد مع Swift: تنظيم الكود للمبتدئين



عندما تبدأ في تطوير تطبيقات Swift لنظامي iOS أو macOS، عاجلاً أم آجلاً ستواجه سؤالاً: كيف تنظم الكود بحيث لا يتحول إلى فوضى؟ خاصة إذا كان لديك عدة مشاريع (مثل تطبيق iOS، وإضافة watchOS، وجزء خادم باستخدام Vapor). أحد الأساليب الحديثة هو المستودع الواحد (monorepo). في هذه المقالة، سنشرح ما هو المستودع الواحد، ولماذا هو مفيد في تطوير Swift، وكيفية تنظيمه عملياً.



ما هو المستودع الواحد ولماذا هو مفيد؟



المستودع الواحد (monorepo) هو نهج لإدارة الكود حيث يتم تخزين جميع المشاريع والمكتبات والوحدات في مستودع واحد (مثل Git). على عكس المستودعات المتعددة، حيث يعيش كل مشروع في مستودع منفصل، يجمع المستودع الواحد كل شيء في مكان واحد.



لمطوري Swift، يوفر هذا عدة مزايا:



  • إصدار موحد للتبعيات — تعرف بالضبط أي إصدار من المكتبة يُستخدم في جميع المشاريع.
  • إعادة هيكلة مبسطة — تغيير API في مكتبة واحدة يظهر فوراً في جميع المشاريع التابعة.
  • إعدادات مشتركة — SwiftLint واحد، تكوين CI/CD واحد، قواعد تنسيق واحدة.
  • بحث سهل — كل شيء في مكان واحد، لا حاجة للتبديل بين المستودعات.


ومع ذلك، هناك بعض الفروق الدقيقة: المستودع الواحد يتطلب انضباطاً وهيكلاً صحيحاً، وإلا فإنه يتحول إلى "مكب نفايات". لكن للمبتدئين، هذه طريقة ممتازة لتعلم تنظيم الكود.



هيكل المستودع الواحد لمشاريع Swift



لنفترض أنك تقوم بإنشاء تطبيق iOS مع وحدات مشتركة. قد يبدو الهيكل النموذجي للمستودع الواحد في Swift كالتالي:



MyMonorepo/├── Apps/│   ├── iOSApp/          # تطبيق iOS الرئيسي│   │   ├── Sources/│   │   ├── Resources/│   │   └── Package.swift│   └── macOSApp/        # إصدار macOS│       ├── Sources/│       └── Package.swift├── Packages/│   ├── Core/            # أدوات مساعدة مشتركة (الشبكات، التسجيل)│   │   ├── Sources/│   │   └── Package.swift│   ├── UIComponents/    # مكونات واجهة مستخدم قابلة لإعادة الاستخدام│   │   ├── Sources/│   │   └── Package.swift│   └── Analytics/       # وحدة التحليلات│       ├── Sources/│       └── Package.swift├── Scripts/             # نصوص مساعدة├── .swiftlint.yml       # تكوين مدقق الكود الموحد├── Package.swift        # البيان الجذري (اختياري)└── README.md


لاحظ: هنا يتم استخدام Swift Package Manager (SPM) — الأداة القياسية لإدارة التبعيات في Swift. كل وحدة هي حزمة Swift منفصلة يمكن ربطها بالتطبيقات.



كيفية إنشاء مستودع واحد في Swift: دليل خطوة بخطوة



دعنا ننشئ مستودعاً واحداً بسيطاً بوحدتين وتطبيق واحد. اتبع الخطوات التالية في الطرفية:



الخطوة 1: أنشئ الدليل الجذري وقم بتهيئة Git



mkdir MyMonorepocd MyMonorepogit init


الخطوة 2: أنشئ هيكل المجلدات



mkdir -p Apps/iOSApp/Sourcesmkdir -p Packages/Core/Sourcesmkdir -p Packages/UIComponents/Sources


الخطوة 3: أنشئ ملف Package.swift لوحدة Core



أنشئ ملف Packages/Core/Package.swift:



// swift-tools-version:5.9import PackageDescription

let package = Package( name: "Core", platforms: [ .iOS(.v16), .macOS(.v13) ], products: [ .library( name: "Core", targets: ["Core"]) ], targets: [ .target( name: "Core", path: "Sources") ])


الخطوة 4: اكتب كوداً بسيطاً في وحدة Core



أنشئ Packages/Core/Source

المدونات

توصيات الكتب