बिटकॉइन का उपयोग करके मैकओएस (x86) में आईओएस (एआरएम) अनुप्रयोगों को स्वचालित रूप से माइग्रेट करें

जब Apple ने बिटकॉइन तकनीक की शुरुआत की और इसे watchOS और TVOS के लिए अनिवार्य कर दिया, तो कंपनी को इस बात पर सवाल उठने लगे कि आखिर इसकी आवश्यकता क्यों है। उसने केवल अस्पष्ट रूप से कहा कि यह बाइनरी फ़ाइलों को अनुकूलित करने में मदद करता है और नवीनतम संकलक सुधार का उपयोग करता है।

तब से, बिटकॉइन ने 64 बिट्स के लिए वॉचओएस के सुचारु परिवर्तन में एक महत्वपूर्ण भूमिका निभाई है, जहां डेवलपर्स को निर्देशिका में अपने अनुप्रयोगों को फिर से स्थापित करने की आवश्यकता नहीं थी। Apple ने स्वतः ही ऐसा किया था: सभी एप्लिकेशन Apple Watch Series 4 पर काम करना शुरू कर चुके थे। आपने शायद यह भी नहीं देखा होगा कि माइग्रेशन हुआ है।

बिटकोड क्या है? ठीक है, छोटे बी के साथ बिटकोड आर्किटेक्चर-विशिष्ट मध्यवर्ती प्रतिनिधित्व है जो एलएलवीएम द्वारा उपयोग किया जाता है, और बड़े बी के साथ बिटकोड उन कार्यों के एक समूह को संदर्भित करता है जो आपको अपने मच-ओ बाइनरी में इस दृश्य को एम्बेड करने की अनुमति देते हैं, और तंत्र जिसके द्वारा आप इस फ़ाइल को प्रस्तुत कर सकते हैं ऐप स्टोर पर।

बिटकॉइन स्रोत कोड जितना लचीला नहीं है, लेकिन यह संकलक के लिए मेटाडेटा और एनोटेशन के साथ एम्बेडेड बाइनरी की तुलना में बहुत अधिक लचीला है। व्यवहार में, आप (या ऐप्पल) आसानी से आवेदन से बिटकोड ब्लॉब्स ले सकते हैं और उन्हें अपने आवेदन की पूरी तरह से कार्यशील प्रतिलिपि में पुनः स्थापित कर सकते हैं। Armv7 से armv7s या arm64 से arm64e पर स्विच करना बहुत अच्छा है और उन डेवलपर्स के लिए समय बचाता है, जिन्हें हर बार ऐप्पल द्वारा एआरएम चिप्स बदलने पर बाइनरी को फिर से जमा करना पड़ता था। Bitcode लंबे समय से Apple द्वारा OpenGL ड्राइवरों में उपयोग किया जाता है, इसलिए ड्राइवर को विभिन्न GPU आर्किटेक्चर के लिए फ्लाई पर अनुकूलित किया जा सकता है।

हमने देखा है कि कैसे Microsoft प्रभावी रूप से Xbox One पर स्थिर पुनर्संयोजन का लाभ उठाता है, जो मूल रूप से Xbox 360 (PowerPC के तहत) के लिए लिखे गए गेम्स की पूरी लाइब्रेरी तक पहुंच प्रदान करता है, पूरी तरह से डेवलपर्स की भागीदारी के बिना या स्रोत कोड तक पहुंच के बिना। और बिटकॉइन जैसे मध्यस्थ के बिना, जो प्रक्रिया को सरल करता है।

बेशक, एआरएम पर macOS का भूत कई वर्षों से घूम रहा है। कई लोग सोचते हैं कि क्या इससे बिटकॉइन का उपयोग करके पोर्ट करना आसान हो जाएगा। नतीजतन, वे एक आम सहमति में आए कि बिटकॉइन इंटेल और एआरएम जैसे मौलिक रूप से विभिन्न आर्किटेक्चर के बीच स्थानांतरित करने के लिए उपयुक्त नहीं है।

यह मुझे विश्वास नहीं था, इसलिए मैंने जांच करने का फैसला किया!

आरंभ करने के लिए, हमें बिटकोड के साथ ऑब्जेक्टिव-सी पर एक सरल परीक्षण एप्लिकेशन की आवश्यकता है; यह आमतौर पर केवल ऐप स्टोर के लिए एक संग्रह बनाते समय शामिल किया जाता है, इसलिए आपको इसे नियमित विधानसभा में शामिल करने के लिए मजबूर करने की आवश्यकता है। आप -fembed-bitcode या कस्टम बिल्ड विकल्प का उपयोग कर सकते हैं:

 BITCODE_GENERATION_MODE = bitcode 

सामान्य रूप से जेनेरिक iOS डिवाइस या कनेक्टेड डिवाइस के लिए एक बाइनरी बनाएं। ऐसा लगता है कि बिटकोड को arm64e असेंबली में नहीं बनाया गया है (उदाहरण के लिए, यदि आपके पास A12 डिवाइस है), तो आप Xcode सेटिंग को "केवल सक्रिय आर्किटेक्चर के लिए संकलित" और सीधे arm64 के लिए संकलित कर सकते हैं।

ईबेकटिल टूल का उपयोग करके , सभी बिटकोड ऑब्जेक्ट आसानी से संकलित बाइनरी से पुनर्प्राप्त किए जाते हैं।

 ebcutil -a arm64 -e path/to/MyApp.app/MyApp 

फिर इंटेल के लिए प्रत्येक बिटकोड ऑब्जेक्ट को फिर से जोड़ें।

 for f in *; do clang -arch x86_64 -c -Xclang -disable-llvm-passes -emit-llvm -x ir -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk $f -o $fo; done 

अब हम संकलित ब्लब्स को बाइनरी फ़ाइल से लिंक करेंगे।

 clang -arch x86_64 -mios-version-min=12.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk *.o -o path/to/MyApp.app/MyApp 

यदि यह काम करता है, तो अब हमारे पास मूल arm64 एप्लिकेशन का x86 संस्करण है! सिद्धांत रूप में, इसे सीधे आईओएस सिम्युलेटर विंडो में स्थापित और लॉन्च किया जा सकता है।

यह एक बहुत ही महत्वपूर्ण तथ्य है: यदि आप बिटकॉइन को शामिल करते हैं, तो आप इंटेल और एआरएम प्लेटफार्मों के बीच द्विआधारी फ़ाइलों को स्थानांतरित कर सकते हैं । यह वास्तव में काम करता है!


अधिक जटिल परियोजनाओं के लिए नुकसान


ऐसा लगता है कि एआरसी बिल्ट-इन असेम्बलर का उपयोग करता है, इसलिए फिलहाल आर्म 64 से x86 तक स्थानांतरण के लिए आपको एआरसी को निष्क्रिय करना होगा।

कुछ प्रकार के ब्लॉक, जैसे कि पूर्ण हैंडलर, अस्वीकार्य निर्देशों के साथ संकलक शुरू करते हैं। यदि आपको X87 त्रुटि मिलती है, तो संभवतः यही समस्या है।

उद्देश्य-सी क्यों है? खैर, स्विफ्ट को एआरसी को ध्यान में रखकर बनाया गया है। मुझे नहीं लगता कि उपरोक्त इनलाइन असेंबलर से बचने का एक तरीका है, इसलिए अब पुनर्मूल्यांकन विफल हो जाएगा।
चलिए एक और कदम उठाते हैं: हम इस Intel iOS एप्लिकेशन को मैक प्रोग्राम में बदलने के लिए marzipanify का उपयोग करते हैं जो Marzipan के साथ काम करता है।



यह आसान था!

सैद्धांतिक रूप से, इसका मतलब है कि ऐप्पल के पास मैक पर ऐप स्टोर से किसी भी आईओएस एप्लिकेशन को चलाने का एक तरीका है, डेवलपर्स को अपने अनुप्रयोगों को अपडेट करने या फिर से खोलने की आवश्यकता के बिना।


क्या होगा अगर मैक इंटेल से एआरएम चिप्स पर स्विच करता है? खैर, जैसा कि आप देख सकते हैं, बिटकॉइन के साथ, यह डेवलपर्स की मदद के बिना सभी बिटकोड-सक्षम अनुप्रयोगों को मैक ऐप स्टोर में स्थानांतरित कर सकता है, इसलिए यह प्रोसेसर को पहले दिन से बदलने के लिए तैयार होगा। इससे Apple को और अधिक स्वतंत्रता मिलती है। अब आपको समय से पहले एक साल में नए प्रोसेसर के लिए संक्रमण की घोषणा करने की आवश्यकता नहीं है, और रोसेटा जैसी तकनीक की अब आवश्यकता नहीं है।

जाहिर है, हम इस बिंदु पर नहीं पहुंचे हैं: आज ऐप्पल ने मैक ऐप स्टोर में अनुप्रयोगों के लिए बिटकॉइन को शामिल नहीं किया है, और आज बिटकॉइन ऐसे वास्तु हस्तांतरण के लिए आदर्श नहीं हो सकता है। Apple के स्थान पर, मैं इन दो कारकों पर ध्यान केंद्रित करूंगा, और निश्चित रूप से, Mac5 10.15 पर सभी Marzipan ऐप्स के लिए Bitcode को सक्षम करूंगा।

Source: https://habr.com/ru/post/hi452734/


All Articles