Xcode يشكو "No such module" على الرغم من وجود الإطار: ماذا تفعل؟

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

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

ابدأ الدورة

"No such module": الكابوس المألوف لكل مطور Swift

\n\n

تقوم بإضافة إطار عبر SPM أو CocoaPods أو يدويًا، وتراه في Project Navigator، كل شيء يبدو مثاليًا - لكن Xcode يصر على الكتابة: No such module 'Alamofire' (أو أي وحدة أخرى). مألوف؟ إذا كان الأمر كذلك - فأنت لست وحدك. السؤال الأصلي على Stack Overflow جمع عشرات الآلاف من المشاهدات، وتحولت التعليقات عليه إلى مجموعة حقيقية من آلام مطوري iOS.

\n\n

في هذه المقالة، سنشرح 10 أسباب حقيقية لظهور خطأ No such module، ونعرض كيفية إصلاحها. في النهاية، ستجد قائمة مراجعة ستوفر لك ساعات من التوتر.

\n\n

لماذا لا يرى Xcode الوحدة؟ أهم 10 أسباب

\n\n

1. Derived Data - الجاني الرئيسي

\n

يقوم Xcode بتخزين معلومات المشروع مؤقتًا في مجلد Derived Data. إذا كانت ذاكرة التخزين المؤقت قديمة أو تالفة، ينسى المترجم الوحدات المتصلة. هذا هو أول شيء يجب التحقق منه.

\n\n

كيفية الإصلاح:

\n
    \n
  • أغلق Xcode
  • \n
  • افتح الطرفية ونفذ:\n
    rm -rf ~/Library/Developer/Xcode/DerivedData
    \n
  • \n
  • أو يدويًا: Xcode → Preferences → Locations → Derived Data → اضغط على السهم → احذف المجلد
  • \n
  • أعد تشغيل Xcode واضغط Cmd + B
  • \n
\n\n

2. تكوين Build Phases غير صحيح

\n

حتى إذا كان الإطار موجودًا فعليًا في المشروع، قد لا يعرف Xcode أنه بحاجة إلى ربطه. تحقق من Link Binary With Libraries:

\n
    \n
  • اختر الهدف (target) → Build Phases
  • \n
  • وسّع Link Binary With Libraries
  • \n
  • تأكد من وجود إطارك هناك
  • \n
  • إذا لم يكن موجودًا - اضغط + وأضفه
  • \n
\n\n

3. Swift Package Manager: فرع أو إصدار خاطئ

\n

SPM أداة مريحة، لكنها حساسة للإصدارات. إذا حددت from: "1.0.0" بينما في المستودع الإصدار 2.0.0، قد لا يجد Xcode وحدة متوافقة.

\n\n
// مثال 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
\n\n

4. تعارض البنى (Architectures)

\n

قد تكون الأطر القديمة مبنية فقط لـ arm64، بينما مشروعك يشمل المحاكي (x86_64). مع ظهور Apple Silicon أصبح هذا سببًا شائعًا.

\n\n

الحل: أضف في Build Settings → Excluded Architectures لبناء Debug:

\n
    \n
  • للمحاكي: arm64
  • \n
  • للجهاز: $(ARCHS_STANDARD)
  • \n
\n\n

5. مسار البحث غير صحيح (Framework Search Paths)

\n

إذا كنت تضيف الإطار يدويًا، يجب أن يعرف Xcode أين يبحث عنه. تحقق من Framework Search Paths:

\n
    \n
  • Build Settings → Framework Search Paths
  • \n
  • تأكد من أن المسار يؤدي إلى المجلد الذي يحتوي على .framework أو .xcframework
  • \n
  • بالنسبة لـ SPM عادة لا تحتاج لتحديد أي شيء، لكن للأطر اليدوية - ضروري
  • \n
\n\n

6. الإطار لم يُضف إلى جميع الأهداف

\n

قد يحتوي المشروع على عدة أهداف (التطبيق الرئيسي، الأدوات، الإضافات). إذا أضفت الوحدة إلى هدف واحد فقط، فلن تراها الأهداف الأخرى.

\n\n

التحقق: اختر الإطار في Project Navigator → المفتش على اليمين → Target Membership - حدد جميع الأهداف المطلوبة.

\n\n

7. مشاكل مع CocoaPods (إذا كنت تستخدمها)

\n

CocoaPods كلاسيكية، لكن أحيانًا بعد pod install لا يتم تحميل الإطار

المدونات

توصيات الكتب