CI/CD لمشاريع Swift: GitHub Actions من الألف إلى الياء

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

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

ابدأ الدورة

المقدمة: لماذا يعتبر CI/CD أمرًا بالغ الأهمية لتطوير Swift

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

GitHub Actions هي أداة CI/CD مدمجة، مثالية لمشاريع Swift المستضافة على GitHub. تتيح لك تشغيل سير العمل في السحابة مجاناً (حتى 2000 دقيقة شهرياً للمستودعات العامة). في هذه المقالة، سنشرح الدورة الكاملة: من الإعداد الأساسي إلى النشر في App Store.

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



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

1.1. هيكل Workflow

يستخدم GitHub Actions ملفات YAML، والتي يتم تخزينها في .github/workflows/. كل ملف هو Workflow منفصل (عملية) يتم تشغيله بواسطة trigger (push، pull request، جدول زمني).

يبدو 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: xcodebuild build -project MyApp.xcodeproj -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' - name: Test run: xcodebuild test -project MyApp.xcodeproj -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2'

النقاط الرئيسية:

  • macos-latest — runner بنظام macOS، ضروري لـ Xcode و Swift.
  • actions/checkout@v4 — استنساخ المستودع.
  • xcodebuild — أمر لبناء واختبار الكود.
  • المعامل destination يحدد المحاكي (استبدله بإصدار iOS الخاص بك).


1.2. التخزين المؤقت للاعتماديات

Swift Package Manager (SPM) هو مدير الاعتماديات القياسي. لتجنب تنزيل الحزم مع كل commit، استخدم التخزين المؤقت:

steps:  - uses: actions/cache@v3    with:      path: ~/Library/Developer/Xcode/DerivedData      key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}      restore-keys: |        ${{ runner.os }}-spm-  - run: swift build

هذا يقلل وقت البناء بنسبة 40-60%.



2. إعداد الاختبار والتحليل البرمجي (Linting)

2.1. اختبارات الوحدة (Unit Tests) واختبارات واجهة المستخدم (UI Tests)

بالنسبة لمشاريع iOS/macOS، من الضروري تشغيل الاختبارات في المحاكي. تأكد من تضمين الاختبارات في مخطط Xcode. مثال لنظام macOS:

jobs:  test_macos:    runs-on: macos-latest    steps:      - uses: actions/checkout@v4      - name: Run macOS tests        run: xcodebuild test -project MyApp.xcodeproj -scheme MyApp -sdk macosx -destination 'platform=macOS,arch=x86_64'

بالنسبة لنظام iOS، أضف -destination 'platform=iOS Simulator,name=iPhone 15'. هام: تتغير أسماء المحاكيات مع إصدارات Xcode — استخدم xcrun simctl list للتحقق من المحاكيات المتاحة.



2.2. التحليل الثابت (SwiftLint)

حافظ على جودة الكود باستخدام SwiftLint. أضف خطوة إلى Workflow:

- name: SwiftLint  run: |    brew install swiftlint    swiftlint --strict

العلم --strict يحول التحذيرات إلى أخطاء — سيفشل Workflow إذا كان الكود لا يتوافق مع القواعد. قم بتكوين ملف .swiftlint.yml في جذر المشروع.



3. البناء والتوقيع للنشر

3.1. إدارة الشهادات والملفات الشخصية (Profiles)

<

المدونات

توصيات الكتب