𝗦𝗸𝗶𝗽 𝗥𝗲𝗰𝗼𝗺𝗽𝗶𝗹𝗶𝗻𝗴 𝟳𝟬+ 𝗜𝗢𝗦 𝗣𝗮𝗰𝗸𝗮𝗴𝗲𝘀 𝗼𝗻 𝗘𝘃𝗲𝗿𝘆 𝗕𝘂𝗶𝗹𝗱
يواجه مطورو React Native مشكلة شائعة؛ فكل عملية بناء نظيفة (clean build) لنظام iOS تعيد تجميع شجرة التبعيات (dependency tree) بالكامل. تضطر للانتظار في كل مرة حتى يتم إعادة بناء React Native core، وExpo modules، والمكتبات الخارجية (third-party libraries).
يحل Expo SDK 56 هذه المشكلة، حيث يوفر Expo modules كـ XCFrameworks مُجمعة مسبقاً. يقوم تطبيقك بربط هذه الملفات الثنائية (binaries) مباشرة، ولن تضطر بعد الآن لإعادة بنائها من المصدر (source).
يجعل هذا التغيير عمليات البناء النظيفة أسرع، كما ينقل النظام البيئي من CocoaPods إلى Swift Package Manager، وهو نظام Apple الحديث لإدارة التبعيات.
الفوائد التي ستجنيها:
- خطوات تجميع أقل
- تطوير محلي أسرع
- عمليات بناء EAS أسرع
- بيئات بناء أكثر قابلية للتنبؤ
لا تحتاج إلى إجراء عملية ترحيل (migration)؛ فهذا يعمل تلقائياً في تطبيقاتك الحالية.
ما هي XCFrameworks؟ هي التنسيق الذي تعتمده Apple للمكتبات الأصلية (native libraries) المُجمعة مسبقاً. فبدلاً من تجميع الكود المصدري على جهازك، ستستخدم ملفات ثنائية (binary files) تم بناؤها بالفعل لأجهزة iOS والمحاكيات (simulators).
مكاسب الأداء على معالج Apple M4 Max: • React Native core مُجمع مسبقاً: تقليل وقت البناء بنسبة ~44%. • Expo modules مُجمعة مسبقاً: تقليل بنسبة ~50% مقارنة بالمصدر. • المكتبات الخارجية مُجمعة مسبقاً: تقليل بنسبة ~65% مقارنة بالمصدر.
تحقق المشاريع الكبيرة أكبر استفادة. فمع نمو تطبيقك، تزداد عادةً أوقات البناء الأصلية (native build times)، مما يؤثر سلباً على سرعة الـ CI وسرعة EAS Build. تقوم XCFrameworks المُجمعة مسبقاً بنقل العمل إلى مرحلة أبكر في سلسلة العمليات (pipeline)؛ حيث نقوم بتجميع الأطر (frameworks) مرة واحدة ونعيد استخدامها.
يعد هذا الانتقال تحولاً كبيراً في البنية التحتية، وقد توجب علينا حل العديد من العقبات التقنية:
- إعادة هيكلة (Refactoring) الواجهات العامة لعزل التبعيات.
- إصلاح التبعيات الدائرية (cyclic dependencies) بين Objective-C وSwift.
- إنشاء هياكل مصدرية مؤقتة لتلبية قواعد Swift Package Manager.
- استخدام Clang Virtual File System overlays لدعم تخطيطات الرؤوس (header layouts) القديمة.
يركز SDK 56 على التعايش؛ حيث لا يزال بإمكانك استخدام CocoaPods. إذا كنت بحاجة إلى إيقاف تشغيل الوحدات المُجمعة مسبقاً، فاستخدم هذا الإعداد:
EXPO_USE_PRECOMPILED_MODULES=0
تقرب هذه الخطوة Expo من النظام البيئي الحديث للتطوير الخاص بشركة Apple، مما يعني عمليات بناء أسرع وبنية أكثر نظافة للمستقبل.
المصدر: https://dev.to/expo/skip-recompiling-70-ios-packages-on-every-build-27a6
