हर बिल्ड पर 70+ iOS पैकेजों को फिर से कंपाइल करने से बचें
React Native डेवलपर्स एक आम समस्या का सामना करते हैं। हर क्लीन iOS बिल्ड आपके पूरे डिपेंडेंसी ट्री (dependency tree) को फिर से कंपाइल करता है। आपको हर बार React Native core, Expo modules और थर्ड-पार्टी लाइब्रेरीज़ के फिर से बिल्ड होने का इंतज़ार करना पड़ता है।
Expo SDK 56 इसे ठीक करता है। यह Expo modules को प्रीकंपाइल्ड (precompiled) XCFrameworks के रूप में प्रदान करता है। आपका ऐप इन बाइनरीज़ को सीधे लिंक करता है। अब आपको उन्हें सोर्स से फिर से बिल्ड करने की ज़रूरत नहीं है।
यह बदलाव क्लीन बिल्ड्स को तेज़ बनाता है। यह इकोसिस्टम को CocoaPods से Swift Package Manager पर भी ले जाता है। यह डिपेंडेंसीज़ के लिए Apple का आधुनिक सिस्टम है।
आपके लिए इसके लाभ:
- कम कंपाइलेशन स्टेप्स
- तेज़ लोकल डेवलपमेंट
- तेज़ EAS बिल्ड्स
- अधिक प्रेडिक्टेबल (predictable) बिल्ड एनवायरनमेंट
आपको माइग्रेट करने की आवश्यकता नहीं है। यह आपके मौजूदा ऐप्स में स्वचालित रूप से काम करता है।
XCFrameworks क्या हैं? ये प्रीकंपाइल्ड नेटिव लाइब्रेरीज़ के लिए Apple का फॉर्मेट हैं। अपने मशीन पर सोर्स कोड को कंपाइल करने के बजाय, आप iOS डिवाइस और सिम्युलेटर के लिए पहले से बने हुए बाइनरी फ़ाइलों का उपयोग करते हैं।
Apple M4 Max पर परफॉरमेंस में सुधार: • React Native core प्रीबिल्ट: बिल्ड टाइम में ~44% की कमी। • Expo modules प्रीबिल्ट: सोर्स की तुलना में ~50% की कमी। • थर्ड-पार्टी लाइब्रेरीज़ प्रीबिल्ट: सोर्स की तुलना में ~65% की कमी।
बड़े प्रोजेक्ट्स को इससे सबसे ज़्यादा फायदा होता है। जैसे-जैसे आपका ऐप बढ़ता है, नेटिव बिल्ड टाइम आमतौर पर बढ़ जाता है। इससे आपकी CI और EAS Build स्पीड प्रभावित होती है। प्रीकंपाइल्ड XCFrameworks इस काम को पाइपलाइन में पहले ही निपटा देते हैं। हम फ्रेमवर्क्स को एक बार कंपाइल करते हैं और उन्हें दोबारा इस्तेमाल करते हैं।
यह ट्रांज़िशन एक बड़ा इंफ्रास्ट्रक्चर बदलाव है। हमें कई तकनीकी बाधाओं को हल करना पड़ा:
- डिपेंडेंसीज़ को अलग करने के लिए पब्लिक इंटरफेस को रिफैक्टर (refactor) करना।
- Objective-C और Swift के बीच साइक्लिक डिपेंडेंसीज़ (cyclic dependencies) को ठीक करना।
- Swift Package Manager के नियमों को पूरा करने के लिए अस्थायी सोर्स स्ट्रक्चर बनाना।
- लेगेसी हेडर लेआउट को सपोर्ट करने के लिए Clang Virtual File System overlays का उपयोग करना।
SDK 56 सह-अस्तित्व (coexistence) पर केंद्रित है। आप अभी भी CocoaPods का उपयोग कर सकते हैं। यदि आपको प्रीकंपाइल्ड मॉड्यूल को बंद करने की आवश्यकता है, तो इस सेटिंग का उपयोग करें:
EXPO_USE_PRECOMPILED_MODULES=0
यह कदम Expo को Apple के आधुनिक डेवलपमेंट इकोसिस्टम के करीब लाता है। इसका मतलब है भविष्य के लिए तेज़ बिल्ड्स और क्लीनर आर्किटेक्चर।
स्रोत: https://dev.to/expo/skip-recompiling-70-ios-packages-on-every-build-27a6
