Swift Macros vs Sourcery مقارنة

ماكروهات أصلية وقت الترجمة في Swift 5.9+

VS
Sourcery

أداة توليد كود خارجية لـ Swift (قائمة على Stencil)

8 دقائق للقراءةiOS

مقارنة الدرجات

جارٍ تحميل الرسم البياني...

التقييم التفصيلي

التقييم التفصيلي: Swift Macros و Sourcery — درجات كل فئة من 10
الفئةSwift MacrosSourcery
الأداء
9/10
7/10
سهولة التعلّم
7/10
8/10
النظام البيئي
8/10
8/10
المجتمع
8/10
9/10
سوق العمل
8/10
6/10
الاستدامة المستقبلية
10/10
6/10

الإيجابيات والسلبيات

Swift Macros

الإيجابيات

  • أصلي في مترجم Swift — تكامل مثالي
  • آمن الأنواع، أخطاء الصياغة تظهر وقت الترجمة
  • دعم بيئة التطوير (إكمال تلقائي وتنقل في Xcode)
  • ماكروهات مدمجة مثل @Observable وQuery وPreview#
  • منتشرة في SwiftUI وSwiftData وإطار عمل الاختبار (Testing)
  • آمنة للتزامن (async-safe)، آمنة للخيوط
  • مستقلة عن المنصة (iOS، macOS، Linux)
  • مستقبلية — Apple تروّج لها رسميًا

السلبيات

  • Swift 5.9+ فقط (Xcode 15+)
  • منحنى تعلم يتطلب معرفة بواجهة برمجة تطبيقات SwiftSyntax
  • التصحيح صعب — يتطلب #expand لرؤية توسيع الماكرو
  • يضيف وقتًا للبناء (البناء الأول)

الأنسب لـ

مشاريع Swift 5.9+ الجديدةمشاريع SwiftUI وSwiftDataمطورو المكتبات/أطر العملإنشاء لغات خاصة بمجال (DSL) آمنة الأنواعالنمط الرسمي من Apple (إطار عمل الاختبار)

Sourcery

الإيجابيات

  • متوافقة مع Swift 5.0+ (المشاريع القديمة)
  • مرحلة بناء خارجية — ليست وقت التشغيل
  • قالب Stencil — بديهي
  • تعليقات توضيحية مدمجة مثل AutoMockable وAutoLenses وAutoEquatable
  • مدمجة مع Xcode (سكريبت مرحلة البناء)
  • قوالب مجتمعية واسعة
  • الكود المُولَّد محفوظ في git (قابل للفحص)
  • دعم موسّع للمحاكاة (mocking)

السلبيات

  • تبعية خارجية (الماكروهات أصلية في Swift)
  • تضيف مرحلة بناء — لا تكامل أنظف
  • الملفات المُولَّدة موجودة في المستودع — ضجيج في المراجعة
  • قيود نظام أنواع Swift (أضعف من الماكروهات)

الأنسب لـ

مشاريع Swift القديمة (5.0-5.8)محاكاة موسّعة (مجموعة اختبارات)تقليل الكود المتكرر عبر الفرقأنماط توليد محددة (Lens، Equatable)جسر قبل الترحيل

مقارنة الكود

Swift Macros
@freestanding(expression)
public macro Color(_ hex: String) -> Color = #externalMacro(
    module: "MyMacros",
    type: "ColorFromHexMacro"
)

// الاستخدام:
let primary = #Color("#4A90E2")
// توسيع وقت الترجمة → UIColor(red: 0.29, green: 0.56, ...)
Sourcery
// تعليق توضيحي Sourcery
// sourcery: AutoMockable
protocol UserService {
    func fetchUser(id: String) async throws -> User
    func updateUser(_ user: User) async throws
}

// مُولَّد تلقائيًا — MockUserService.generated.swift:
// class MockUserService: UserService { ... }

الخلاصة

لمشروع Swift 5.9+ جديد → الماكروهات إلزامية (أصلية، مستقبلية). للمشاريع القديمة (5.0-5.8) → Sourcery عملي. الترحيل: أخرِج Sourcery تدريجيًا وانتقل إلى الماكروهات. في 2027 سيصبح استخدام Sourcery نادرًا.

احصل على استشارة مجانية
الأسئلة الشائعة

الأسئلة الشائعة

نعم، الماكروهات كأساسي + Sourcery للمحاكاة (mocking) بنهج هجين. لكن الأمثل استخدام أداة واحدة.

مقالات مدونة ذات صلة

عرض جميع المقالات

مشاريع ذات صلة

عرض جميع المشاريع
جميع المقارنات