CI/CD لمشاريع Swift: إعداد GitHub Actions

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

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

ابدأ الدورة

مقدمة إلى CI/CD لمشاريع Swift

تطوير التطبيقات الحديثة للهواتف المحمولة وأجهزة الكمبيوتر المكتبية باستخدام Swift لا يتطلب فقط كودًا عالي الجودة، بل أيضًا عملية موثوقة للتكامل والتسليم. CI/CD (Continuous Integration / Continuous Deployment) هي ممارسة تتيح أتمتة بناء التطبيقات واختبارها ونشرها. بالنسبة لمشاريع Swift، خاصة تحت iOS و macOS، يُعد GitHub Actions واحدًا من أكثر الأدوات ملاءمة وشيوعًا.

في هذه المقالة، سنشرح كيفية إعداد خط أنابيب CI/CD كامل لمشاريع Swift باستخدام GitHub Actions. ستتعلم كيفية أتمتة البناء، تشغيل اختبارات الوحدة، وحتى إرسال التطبيق إلى TestFlight أو Mac App Store.



لماذا GitHub Actions لـ Swift؟

يوفر GitHub Actions إمكانيات مدمجة للعمل مع نظام Apple البيئي. على عكس الخدمات الخارجية، فهو متكامل تمامًا مع المستودع ولا يتطلب إعداد إضافي للإضافات. المزايا الرئيسية:

  • دقائق مجانية للمستودعات العامة (حتى 2000 دقيقة شهريًا)
  • إجراءات جاهزة لـ Xcode و SwiftLint و CocoaPods و SPM
  • دعم مشغلات macOS مع Xcode المثبت مسبقًا
  • إعداد مرن عبر ملفات YAML


الإعداد الأساسي لـ CI لمشروع Swift

لنبدأ بخط أنابيب بسيط يقوم ببناء المشروع وتشغيل الاختبارات عند كل دفع إلى فرع main أو عند إنشاء Pull Request.

أنشئ ملف .github/workflows/swift-ci.yml في جذر المستودع:

name: Swift CI

on: push: branches: [ main ] pull_request: branches: [ main ]

jobs: build-and-test: runs-on: macos-latest steps: - uses: actions/checkout@v4 - name: Select Xcode version run: sudo xcode-select -s /Applications/Xcode_15.2.app - name: Build run: xcodebuild build -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' | xcpretty - name: Run tests run: xcodebuild test -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' | xcpretty

يقوم هذا الـ workflow بتنفيذ خطوتين رئيسيتين: بناء المشروع وتشغيل الاختبارات. لاحظ استخدام xcpretty — وهي أداة تقوم بتنسيق مخرجات Xcodebuild إلى شكل قابل للقراءة.



فحص إضافي لجودة الكود

دعنا نضيف تحليلًا ثابتًا باستخدام SwiftLint. سيساعد هذا في الحفاظ على نمط موحد للكود داخل الفريق:

jobs:  lint:    runs-on: ubuntu-latest    steps:    - uses: actions/checkout@v4    - name: SwiftLint      uses: norio-nomura/action-swiftlint@3.2.1      with:        args: --strict

الآن، عند كل commit، سيتم التحقق من امتثال الكود لقواعد SwiftLint. إذا تم العثور على مخالفات، سينتهي الـ workflow بخطأ.



CI/CD متقدم: الاختبار والنشر

بعد الإعداد الأساسي، يمكننا الانتقال إلى سيناريوهات أكثر تعقيدًا. دعنا ننظر إلى خط أنابيب يتضمن:

  • البناء لعدة محاكيات
  • الاختبار مع تغطية الكود
  • النشر التلقائي إلى TestFlight (لـ iOS) أو Mac App Store


البناء والاختبار مع التغطية

لجمع بيانات تغطية الاختبارات، استخدم العلم -enableCodeCoverage YES:

jobs:  test-coverage:    runs-on: macos-latest    steps:    - uses: actions/checkout@v4        - name: Test with coverage      run: |        xcodebuild test \          -scheme MyApp \          -sdk iphonesimulator \          -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' \          -enableCodeCoverage YES \          -derivedDataPath Build/DerivedData | xcpretty        - name: Upload coverage to Codecov      uses: codecov/cod                

المدونات

توصيات الكتب