ہر بلڈ پر 70+ iOS پیکیجز کو دوبارہ کمپائل کرنے سے بچیں

React Native ڈویلپرز کو ایک عام مسئلے کا سامنا کرنا پڑتا ہے۔ ہر کلین iOS بلڈ آپ کے پورے dependency tree کو دوبارہ کمپائل کرتا ہے۔ آپ کو ہر بار React Native core، Expo modules، اور third-party libraries کے دوبارہ ری بلڈ ہونے کا انتظار کرنا پڑتا ہے۔

Expo SDK 56 اس مسئلے کو حل کرتا ہے۔ یہ Expo modules کو precompiled XCFrameworks کے طور پر فراہم کرتا ہے۔ آپ کی ایپ ان binaries کو براہ راست لنک کرتی ہے۔ اب آپ کو انہیں source سے دوبارہ ری بلڈ کرنے کی ضرورت نہیں ہے۔

یہ تبدیلی کلین بلڈز کو تیز تر بناتی ہے۔ یہ ecosystem کو CocoaPods سے Swift Package Manager پر منتقل بھی کرتی ہے۔ یہ dependencies کے لیے ایپل کا جدید ترین سسٹم ہے۔

آپ کے لیے فوائد:

  • کم کمپلیشن مراحل
  • تیز تر لوکل ڈویلپمنٹ
  • تیز تر EAS builds
  • زیادہ قابلِ پیش گوئی بلڈ ماحول

آپ کو مائیگریٹ کرنے کی ضرورت نہیں ہے۔ یہ آپ کی موجودہ ایپس میں خود بخود کام کرتا ہے۔

XCFrameworks کیا ہیں؟ یہ precompiled native libraries کے لیے ایپل کا فارمیٹ ہے۔ اپنی مشین پر source code کو کمپائل کرنے کے بجائے، آپ iOS ڈیوائسز اور سیمولیٹرز کے لیے پہلے سے بنے ہوئے binary files استعمال کرتے ہیں۔

Apple M4 Max پر کارکردگی میں اضافہ: • React Native core prebuilt: بلڈ ٹائم میں ~44% کمی۔ • Expo modules prebuilt: source کے مقابلے میں ~50% کمی۔ • Third-party libraries prebuilt: source کے مقابلے میں ~65% کمی۔

بڑے پروجیکٹس کو اس سے سب سے زیادہ فائدہ ہوتا ہے۔ جیسے جیسے آپ کی ایپ بڑھتی ہے، عام طور پر native build times میں اضافہ ہوتا ہے۔ یہ آپ کی CI اور EAS Build کی رفتار کو متاثر کرتا ہے۔ Precompiled XCFrameworks اس کام کو پائپ لائن میں پہلے مرحلے پر لے آتے ہیں۔ ہم frameworks کو ایک بار کمپائل کرتے ہیں اور انہیں دوبارہ استعمال کرتے ہیں۔

یہ منتقلی انفراسٹرکچر میں ایک بڑی تبدیلی ہے۔ ہمیں کئی تکنیکی رکاوٹوں کو حل کرنا پڑا:

  • dependencies کو الگ کرنے کے لیے public interfaces کی ری فیکٹرنگ (Refactoring) کرنا۔
  • Objective-C اور Swift کے درمیان cyclic dependencies کو ٹھیک کرنا۔
  • Swift Package Manager کے قواعد کو پورا کرنے کے لیے عارضی source structures بنانا۔
  • legacy header layouts کو سپورٹ کرنے کے لیے Clang Virtual File System overlays کا استعمال کرنا۔

SDK 56 بقا (coexistence) پر توجہ مرکوز کرتا ہے۔ آپ اب بھی CocoaPods استعمال کر سکتے ہیں۔ اگر آپ کو precompiled modules کو بند کرنے کی ضرورت ہو، تو یہ سیٹنگ استعمال کریں: EXPO_USE_PRECOMPILED_MODULES=0

یہ قدم Expo کو ایپل کے جدید ڈویلپمنٹ ecosystem کے قریب لاتا ہے۔ اس کا مطلب ہے مستقبل کے لیے تیز تر بلڈز اور بہتر (cleaner) آرکیٹیکچر۔

Source: https://dev.to/expo/skip-recompiling-70-ios-packages-on-every-build-27a6