CI/CD لمشاريع Swift: دليل خطوة بخطوة باستخدام GitHub Actions

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

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

ابدأ الدورة

مقدمة: لماذا نحتاج إلى CI/CD لمشاريع Swift؟



يتطلب التطوير لنظامي iOS و macOS مستوى عالٍ من جودة الكود والموثوقية. أي تغيير قد يؤدي إلى كسر البناء أو التسبب في تراجع في الاختبارات. التحقق اليدوي هو عملية بطيئة وغير موثوقة. هنا يأتي دور CI/CD (Continuous Integration / Continuous Deployment) - التكامل والتسليم المستمران.



GitHub Actions هي أداة مدمجة وقوية لأتمتة سير العمل مباشرة في مستودعك. تتيح لك بناء المشروع تلقائيًا، وتشغيل الاختبارات، وتحليل الكود، وحتى نشر التطبيق على App Store أو TestFlight مع كل push أو إنشاء Pull Request.



في هذه المقالة، سنشرح كيفية إعداد خط أنابيب CI/CD كامل لمشروع Swift على GitHub Actions. ستتعلم كيفية إنشاء workflow، وإعداد البناء، وتشغيل الاختبارات، والتحليل اللغوي (linting)، والنشر. جميع أمثلة الكود جاهزة للاستخدام.



الجزء الرئيسي



1. أساسيات GitHub Actions لـ Swift



يعمل GitHub Actions بناءً على ملفات YAML المخزنة في دليل .github/workflows/. يصف كل ملف واحدًا أو أكثر من workflows (سير العمل). لمشروع Swift، سنحتاج إلى runner بنظام macOS، لأن بناء تطبيقات iOS/macOS ممكن فقط على هذه المنصة.



إليك شكل workflow أساسي لمشروع Swift:



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: Build run: swift build

- name: Run tests run: swift test


دعنا نحلل النقاط الرئيسية:

  • on — المشغلات: التشغيل عند push و pull request إلى main.
  • runs-on: macos-latest — نستخدم أحدث إصدار من macOS للـ runner.
  • actions/checkout — action قياسي لاستنساخ المستودع.
  • swift build و swift test — أوامر Swift Package Manager.


يوفر خط الأنابيب الأدنى هذا بالفعل فحصًا أساسيًا. لكن بالنسبة لتطبيق iOS/macOS حقيقي، هذا غير كافٍ - تحتاج إلى إعداد Xcode والمحاكيات والتبعيات.



2. إعداد البناء والاختبارات لتطبيق iOS/macOS



إذا كان مشروعك يستخدم Xcode (مثل .xcworkspace أو .xcodeproj)، فإن الأمر swift build لن يكون مناسبًا. بدلاً من ذلك، نستخدم xcodebuild. تحتاج أيضًا إلى تحديد الـ scheme و destination (على سبيل المثال، محاكي iPhone).



مثال على workflow لتطبيق iOS:



name: iOS CI

on: push: branches: [ "develop", "main" ] pull_request: branches: [ "develop", "main" ]

jobs: test: runs-on: macos-14

steps: - uses: actions/checkout@v4

- name: Select Xcode version run: sudo xcode-select -s /Applications/Xcode_15.2.app

- name: Install CocoaPods (إذا كنت تستخدمه) run: pod install

- name: Build and Test run: | xcodebuild clean test \ -workspace YourApp.xcworkspace \ -scheme "YourApp Scheme" \ -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' \ -resultBundlePath TestResults env: DEVELOPER_DIR: /Applications/Xcode_15.2.app/Contents/Developer

- name: Upload test results if: always() uses: actions/upload-artifact@v4 with: name: test-results path: TestResults.xcresult


تفاصيل مهمة:

  • macos-14 — نستخدم macOS 14 Sonoma مع Xcode 15.2.
  • xcode-select — نحدد إصدار Xcode بوضوح لتجنب عدم التوافق.
  • resultBundlePath — نحفظ نتائج الاختبارات كقطعة أثرية (artifact) للتحليل لاحقًا.
  • Upload test results — نرفع نتائج الاختبارات حتى في حالة فشل الخطوات السابقة.

المدونات

توصيات الكتب