"No such module": الكابوس المألوف لكل مطور Swift
\n\nتقوم بإضافة إطار عبر SPM أو CocoaPods أو يدويًا، وتراه في Project Navigator، كل شيء يبدو مثاليًا - لكن Xcode يصر على الكتابة: No such module 'Alamofire' (أو أي وحدة أخرى). مألوف؟ إذا كان الأمر كذلك - فأنت لست وحدك. السؤال الأصلي على Stack Overflow جمع عشرات الآلاف من المشاهدات، وتحولت التعليقات عليه إلى مجموعة حقيقية من آلام مطوري iOS.
في هذه المقالة، سنشرح 10 أسباب حقيقية لظهور خطأ No such module، ونعرض كيفية إصلاحها. في النهاية، ستجد قائمة مراجعة ستوفر لك ساعات من التوتر.
لماذا لا يرى Xcode الوحدة؟ أهم 10 أسباب
\n\n1. Derived Data - الجاني الرئيسي
\nيقوم Xcode بتخزين معلومات المشروع مؤقتًا في مجلد Derived Data. إذا كانت ذاكرة التخزين المؤقت قديمة أو تالفة، ينسى المترجم الوحدات المتصلة. هذا هو أول شيء يجب التحقق منه.
\n\nكيفية الإصلاح:
\n- \n
- أغلق Xcode \n
- افتح الطرفية ونفذ:\n
\nrm -rf ~/Library/Developer/Xcode/DerivedData\n - أو يدويًا: Xcode → Preferences → Locations → Derived Data → اضغط على السهم → احذف المجلد \n
- أعد تشغيل Xcode واضغط
Cmd + B\n
2. تكوين Build Phases غير صحيح
\nحتى إذا كان الإطار موجودًا فعليًا في المشروع، قد لا يعرف Xcode أنه بحاجة إلى ربطه. تحقق من Link Binary With Libraries:
\n- \n
- اختر الهدف (target) → Build Phases \n
- وسّع Link Binary With Libraries \n
- تأكد من وجود إطارك هناك \n
- إذا لم يكن موجودًا - اضغط
+وأضفه \n
3. Swift Package Manager: فرع أو إصدار خاطئ
\nSPM أداة مريحة، لكنها حساسة للإصدارات. إذا حددت from: "1.0.0" بينما في المستودع الإصدار 2.0.0، قد لا يجد Xcode وحدة متوافقة.
// مثال Package.swift\ndependencies: [\n .package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.6.0")\n]\n\nماذا تفعل:
\n- \n
- اذهب إلى File → Packages → Update to Latest Package Versions \n
- إذا بقيت المشكلة - احذف الإطار وأضفه مرة أخرى \n
- تحقق من Package Dependencies في المشروع - يجب أن تكون الوحدة باللون الأخضر \n
4. تعارض البنى (Architectures)
\nقد تكون الأطر القديمة مبنية فقط لـ arm64، بينما مشروعك يشمل المحاكي (x86_64). مع ظهور Apple Silicon أصبح هذا سببًا شائعًا.
\n\nالحل: أضف في Build Settings → Excluded Architectures لبناء Debug:
\n- \n
- للمحاكي:
arm64\n - للجهاز:
$(ARCHS_STANDARD)\n
5. مسار البحث غير صحيح (Framework Search Paths)
\nإذا كنت تضيف الإطار يدويًا، يجب أن يعرف Xcode أين يبحث عنه. تحقق من Framework Search Paths:
\n- \n
- Build Settings → Framework Search Paths \n
- تأكد من أن المسار يؤدي إلى المجلد الذي يحتوي على
.frameworkأو.xcframework\n - بالنسبة لـ SPM عادة لا تحتاج لتحديد أي شيء، لكن للأطر اليدوية - ضروري \n
6. الإطار لم يُضف إلى جميع الأهداف
\nقد يحتوي المشروع على عدة أهداف (التطبيق الرئيسي، الأدوات، الإضافات). إذا أضفت الوحدة إلى هدف واحد فقط، فلن تراها الأهداف الأخرى.
\n\nالتحقق: اختر الإطار في Project Navigator → المفتش على اليمين → Target Membership - حدد جميع الأهداف المطلوبة.
\n\n7. مشاكل مع CocoaPods (إذا كنت تستخدمها)
\nCocoaPods كلاسيكية، لكن أحيانًا بعد pod install لا يتم تحميل الإطار