از کامپایل مجدد بیش از ۷۰ پکیج iOS در هر Build جلوگیری کنید

توسعه‌دهندگان React Native با یک مشکل رایج روبرو هستند. هر clean iOS build تمام درخت وابستگی‌های (dependency tree) شما را دوباره کامپایل می‌کند. شما هر بار مجبور هستید منتظر بازسازی React Native core، ماژول‌های Expo و کتابخانه‌های شخص ثالث (third-party) بمانید.

Expo SDK 56 این مشکل را حل می‌کند. این نسخه، ماژول‌های Expo را به صورت XCFrameworkهای پیش‌کامپایل‌شده ارائه می‌دهد. اپلیکیشن شما مستقیماً به این باینری‌ها لینک می‌شود و دیگر نیازی به بازسازی آن‌ها از روی سورس‌کد ندارید.

این تغییر باعث سریع‌تر شدن clean buildها می‌شود. همچنین اکوسیستم را از CocoaPods به Swift Package Manager منتقل می‌کند؛ که سیستم مدرن اپل برای مدیریت وابستگی‌ها است.

مزایا برای شما:

  • مراحل کامپایل کمتر
  • توسعه محلی (local development) سریع‌تر
  • Buildهای EAS سریع‌تر
  • محیط‌های Build قابل‌پیش‌بینی‌تر

نیازی به مهاجرت (migrate) ندارید. این قابلیت به‌طور خودکار در اپلیکیشن‌های موجود شما کار می‌کند.

XCFrameworks چیستند؟ آن‌ها فرمت اپل برای کتابخانه‌های native پیش‌کامپایل‌شده هستند. به جای کامپایل کردن سورس‌کد روی سیستم خودتان، از فایل‌های باینری استفاده می‌کنید که از قبل برای دستگاه‌های iOS و شبیه‌سازها (simulators) ساخته شده‌اند.

بهبود عملکرد در Apple M4 Max: • React Native core پیش‌ساخته: حدود ۴۴٪ کاهش در زمان build. • ماژول‌های Expo پیش‌ساخته: حدود ۵۰٪ کاهش نسبت به سورس. • کتابخانه‌های شخص ثالث پیش‌ساخته: حدود ۶۵٪ کاهش نسبت به سورس.

پروژه‌های بزرگ بیشترین سود را می‌برند. با بزرگ‌تر شدن اپلیکیشن شما، زمان buildهای native معمولاً افزایش می‌یابد. این موضوع به سرعت CI و EAS Build شما آسیب می‌زند. XCFrameworkهای پیش‌کامپایل‌شده، این کار را به مراحل ابتدایی‌تر در خط لوله (pipeline) منتقل می‌کنند. ما فریم‌ورک‌ها را یک بار کامپایل می‌کنیم و دوباره از آن‌ها استفاده می‌کنیم.

این انتقال یک تغییر زیرساختی بزرگ است. ما مجبور شدیم چندین مانع فنی را حل کنیم:

  • بازنویسی (Refactoring) رابط‌های عمومی برای جداسازی وابستگی‌ها.
  • رفع وابستگی‌های چرخه‌ای (cyclic dependencies) بین Objective-C و Swift.
  • ایجاد ساختارهای سورس موقت برای رعایت قوانین Swift Package Manager.
  • استفاده از Clang Virtual File System overlays برای پشتیبانی از چیدمان‌های قدیمی هدرها (legacy header layouts).

SDK 56 بر همزیستی (coexistence) تمرکز دارد. شما همچنان می‌توانید از CocoaPods استفاده کنید. اگر نیاز دارید ماژول‌های پیش‌کامپایل‌شده را غیرفعال کنید، از این تنظیم استفاده کنید: EXPO_USE_PRECOMPILED_MODULES=0

این حرکت، Expo را به اکوسیستم توسعه مدرن اپل نزدیک‌تر می‌کند. این به معنای buildهای سریع‌تر و معماری تمیزتر برای آینده است.

منبع: https://dev.to/expo/skip-recompiling-70-ios-packages-on-every-build-27a6