المقدمة: لماذا يعتبر 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 في جذر المشروع.