dyld: Library not loaded: @rpath/libswiftCore.dylib: كيفية التغلب على الخطأ

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

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

ابدأ الدورة

«وفجأة — انهار التطبيق»: نتعرف على dyld: Library not loaded: @rpath/libswiftCore.dylib

\n\n

هل سبق لك أن شغّلت تطبيق Swift الخاص بك، ورأيت شاشة البداية الجميلة، ثم — بام! — شاشة سوداء ووحدة تحكم مليئة بالأحرف الحمراء؟ مألوف؟ إذا واجهت مرة واحدة على الأقل الرسالة dyld: Library not loaded: @rpath/libswiftCore.dylib، فأنت تعرف شعور الذعر الخفيف هذا. على Stack Overflow، حصد هذا السؤال آلاف المشاهدات، وليس من دون سبب: الخطأ خادع، لكنه قابل للحل تمامًا.

\n\n

في هذه المقالة، لن نقدم مجرد تعليمات جافة. سنحلل لماذا «تُفقد» مكتبات Swift في وقت التشغيل، وكيفية تجنب ذلك، وماذا تفعل إذا وقعت بالفعل في المشكلة. هيا بنا!

\n\n

ما هو dyld ولماذا يغضب؟

\n\n

dyld (dynamic link editor) هو مُحمّل المكتبات الديناميكية في macOS وiOS. عندما يتم تشغيل تطبيقك، يبحث dyld عن جميع المكتبات الضرورية وفقًا للمسارات المحددة في الملف الثنائي. أحد هذه المسارات هو @rpath (مسار البحث في وقت التشغيل). إذا لم يتم العثور على المكتبة (مثل libswiftCore.dylib) في هذا المسار، يتعطل dyld مع ظهور خطأ.

\n\n

ببساطة: لقد أخبرت التطبيق «خذ الكتاب من الرف @rpath»، ولكن الرف كان فارغًا. هذا هو كل التحقيق.

\n\n

لماذا يحدث هذا تحديدًا مع libswiftCore.dylib؟

\n\n

libswiftCore.dylib هو جوهر بيئة تشغيل Swift. بدونه، لا يعمل أي كود Swift. يظهر الخطأ غالبًا في ثلاث حالات:

\n\n
    \n
  • استخدام Xcode 14+ والمشروع مُهيأ لإصدار قديم من Swift.
  • \n
  • ربط أُطر عمل أو CocoaPods تتطلب إصدارًا معينًا من بيئة تشغيل Swift.
  • نسيان تفعيل «Always Embed Swift Standard Libraries» في إعدادات البناء.
\n\n

5 طرق لإصلاح dyld: Library not loaded: @rpath/libswiftCore.dylib

\n\n

دعنا ننتقل إلى التطبيق العملي. فيما يلي طرق مثبتة، من الأبسط إلى الأكثر تعقيدًا. لكل منها، سأقدم مثالاً على الكود أو الإعدادات.

\n\n

1. تفعيل «Always Embed Swift Standard Libraries»

\n\n

السبب الأكثر شيوعًا. إذا كان تطبيقك لا يضمّن مكتبات Swift في الحزمة، فلن يجدها dyld على الجهاز.

\n\n

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

\n
    \n
  1. افتح المشروع في Xcode.
  2. \n
  3. اختر Target ← Build Settings.
  4. \n
  5. ابحث عن Always Embed Swift Standard Libraries.
  6. \n
  7. اضبط القيمة على Yes.
\n\n

إذا كنت تستخدم CocoaPods، تحقق من عدم وجود سطر في Podfile يعطل هذا السلوك:

\n\n
# سيء (قد يسبب الخطأ)\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    target.build_configurations.each do |config|\n      config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO'\n    end\n  end\nend\n\n# جيد\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    target.build_configurations.each do |config|\n      config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'YES'\n    end\n  end\nend\n
\n\n

2. التحقق من توافق إصدارات Swift

\n\n

إذا قمت بربط إطار عمل تم بناؤه باستخدام Swift 5.7، بينما مشروعك يستخدم Swift 5.5 — مرحبًا بك في الخطأ. بيئة تشغيل Swift ليست متوافقة مع الإصدارات السابقة «بنسبة 100%».

\n\n

الحل: تأكد من أن جميع التبعيات تستخدم نفس إصدار Swift. افتح الطرفية ونفّذ:

\n\n
# معرفة إصدار Swift لإطار عمل معين .framework\nstrings MyFramework.framework/MyFramework | grep "Swift"\n# أو تحقق عبر xcrun\nxcrun swift --version\n
\n\n

إذا تم بناء الإطار بإصدار مختلف — أعد بنائه أو قم بتحديثه.

\n\n

3. مسح Derived Data وإعادة بناء المشروع

\n\n

أحيانًا يخزن Xcode مسارات قديمة للمكتبات. غالبًا ما يحل البناء الكامل المشكلة.

\n\n
# حذف Derived Data يدويًا\nrm -rf ~/Library/Developer/Xcode/DerivedData                

المدونات

توصيات الكتب