𝗦𝗸𝗶𝗽 𝗥𝗲𝗰𝗼𝗺𝗽𝗶𝗹𝗶𝗻𝗴 𝟳𝟬+ 𝗜𝗢𝗦 𝗣𝗮𝗰𝗸𝗮𝗴𝗲𝘀 𝗼𝗻 𝗘𝘃𝗲𝗿𝘆 𝗕𝘂𝗶𝗹𝗱

React Native ഡെവലപ്പർമാർ നേരിടുന്ന ഒരു പൊതുവായ പ്രശ്നമാണിത്. ഓരോ ക്ലീൻ iOS ബിൽഡിലും നിങ്ങളുടെ മുഴുവൻ ഡിപെൻഡൻസി ട്രീയും (dependency tree) വീണ്ടും കംപൈൽ ചെയ്യേണ്ടി വരുന്നു. React Native core, Expo modules, കൂടാതെ തേർഡ് പാർട്ടി ലൈബ്രറികൾ എന്നിവ വീണ്ടും ബിൽഡ് ചെയ്യാൻ നിങ്ങൾ ഓരോ തവണയും കാത്തിരിക്കേണ്ടി വരുന്നു.

Expo SDK 56 ഇത് പരിഹരിക്കുന്നു. ഇത് Expo modules-നെ പ്രീകംപൈൽ ചെയ്ത (precompiled) XCFrameworks ആയി നൽകുന്നു. നിങ്ങളുടെ ആപ്പ് ഈ ബൈനറികളെ നേരിട്ട് ലിങ്ക് ചെയ്യുന്നു. ഇനി മുതൽ അവ സോഴ്സിൽ നിന്ന് വീണ്ടും ബിൽഡ് ചെയ്യേണ്ടതില്ല.

ഈ മാറ്റം ക്ലീൻ ബിൽഡുകൾ വേഗത്തിലാക്കുന്നു. കൂടാതെ ഇത് ഇക്കോസിസ്റ്റത്തെ CocoaPods-ൽ നിന്ന് Swift Package Manager-ലേക്ക് മാറ്റുകയും ചെയ്യുന്നു. ഡിപെൻഡൻസികൾക്കായി ആപ്പിൾ ഉപയോഗിക്കുന്ന ആധുനിക സംവിധാനമാണിത്.

നിങ്ങൾക്ക് ലഭിക്കുന്ന ഗുണങ്ങൾ:

  • കുറഞ്ഞ കംപൈലേഷൻ ഘട്ടങ്ങൾ
  • വേഗത്തിലുള്ള ലോക്കൽ ഡെവലപ്‌മെന്റ്
  • വേഗത്തിലുള്ള EAS ബിൽഡുകൾ
  • കൂടുതൽ പ്രവചിക്കാവുന്ന (predictable) ബിൽഡ് എൻവയോൺമെന്റുകൾ

നിങ്ങൾക്ക് മൈഗ്രേറ്റ് ചെയ്യേണ്ട ആവശ്യമില്ല. നിലവിലുള്ള ആപ്പുകളിൽ ഇത് സ്വയമേവ പ്രവർത്തിക്കും.

എന്താണ് XCFrameworks? പ്രീകംപൈൽ ചെയ്ത നേറ്റീവ് ലൈബ്രറികൾക്കായി ആപ്പിൾ ഉപയോഗിക്കുന്ന ഫോർമാറ്റാണിത്. നിങ്ങളുടെ മെഷീനിൽ സോഴ്സ് കോഡ് കംപൈൽ ചെയ്യുന്നതിന് പകരം, iOS ഡിവൈസുകൾക്കും സിമുലേറ്ററുകൾക്കുമായി നേരത്തെ തന്നെ ബിൽഡ് ചെയ്ത ബൈനറി ഫയലുകൾ നിങ്ങൾക്ക് ഉപയോഗിക്കാം.

Apple M4 Max-ൽ ലഭിക്കുന്ന പെർഫോമൻസ് വർദ്ധനവ്: • React Native core പ്രീബിൽറ്റ്: ബിൽഡ് സമയത്തിൽ ~44% കുറവ്. • Expo modules പ്രീബിൽറ്റ്: സോഴ്സിനെ അപേക്ഷിച്ച് ~50% കുറവ്. • തേർഡ് പാർട്ടി ലൈബ്രറികൾ പ്രീബിൽറ്റ്: സോഴ്സിനെ അപേക്ഷിച്ച് ~65% കുറവ്.

വലിയ പ്രോജക്റ്റുകൾക്കാണ് ഇതിലൂടെ ഏറ്റവും വലിയ നേട്ടം ലഭിക്കുന്നത്. നിങ്ങളുടെ ആപ്പ് വലുതാകുമ്പോൾ, നേറ്റീവ് ബിൽഡ് സമയവും സാധാരണയായി വർദ്ധിക്കുന്നു. ഇത് നിങ്ങളുടെ CI, EAS Build വേഗതയെ ബാധിക്കുന്നു. പ്രീകംപൈൽ ചെയ്ത XCFrameworks ഈ ജോലി പൈപ്പ്‌ലൈനിന്റെ ആദ്യ ഘട്ടങ്ങളിലേക്ക് മാറ്റുന്നു. ഞങ്ങൾ ഫ്രെയിംവർക്കുകൾ ഒരിക്കൽ മാത്രം കംപൈൽ ചെയ്യുകയും അവ വീണ്ടും ഉപയോഗിക്കുകയും ചെയ്യുന്നു.

ഈ മാറ്റം ഒരു പ്രധാന ഇൻഫ്രാസ്ട്രക്ചർ മാറ്റമാണ്. ഇതിനായി ഞങ്ങൾ നിരവധി സാങ്കേതിക വെല്ലുവിളികൾ പരിഹരിക്കേണ്ടി വന്നു:

  • ഡിപെൻഡൻസികളെ വേർതിരിക്കുന്നതിനായി പബ്ലിക് ഇന്റർഫേസുകൾ റീഫാക്ടർ ചെയ്തു (Refactoring).
  • Objective-C-യും Swift-ഉമി തമ്മിലുള്ള സൈക്ലിക് ഡിപെൻഡൻസികൾ (cyclic dependencies) പരിഹരിച്ചു.
  • Swift Package Manager നിയമങ്ങൾ പാലിക്കുന്നതിനായി താൽക്കാലിക സോഴ്സ് സ്ട്രക്ചറുകൾ നിർമ്മിച്ചു.
  • പഴയ ഹെഡർ ലേഔട്ടുകളെ പിന്തുണയ്ക്കുന്നതിനായി Clang Virtual File System overlays ഉപയോഗിച്ചു.

SDK 56 സഹവർത്തിത്വത്തിന് (coexistence) പ്രാധാന്യം നൽകുന്നു. നിങ്ങൾക്ക് ഇപ്പോഴും CocoaPods ഉപയോഗിക്കാം. പ്രീകംപൈൽ ചെയ്ത മോഡ്യൂളുകൾ ഓഫ് ചെയ്യണമെന്നുണ്ടെങ്കിൽ, ഈ സെറ്റിംഗ് ഉപയോഗിക്കുക: EXPO_USE_PRECOMPILED_MODULES=0

ഈ നീക്കം Expo-യെ ആപ്പിളിന്റെ ആധുനിക ഡെവലപ്‌മെന്റ് ഇക്കോസിസ്റ്റത്തോട് കൂടുതൽ അടുപ്പിക്കുന്നു. ഭാവിയിൽ വേഗത്തിലുള്ള ബിൽഡുകളും കൂടുതൽ മികച്ച ആർക്കിടെക്ചറും ഇതിലൂടെ സാധ്യമാകും.

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