दिलचस्प पोस्ट
क्या कोई प्लेटफार्म है जहां विभिन्न प्रकार के संकेत दिए गए हैं? "टेक्स्ट-संरेखित करें: सही करें;" इनलाइन-ब्लॉक तत्वों को ठीक से? Android लंबी-टच इवेंट स्विफ्ट में एक UIButton प्रोग्राममैटिक करें PHP में, क्या आप एक ऑब्जेक्ट इन्स्तांत कर सकते हैं और उसी लाइन पर एक विधि कॉल कर सकते हैं? स्रोत फ़ाइलों के बीच चर को साझा करने के लिए मैं extern का उपयोग कैसे करूं? HTML5 स्थानीय स्टोरेज सुरक्षा चयन का उपयोग न करने का कारण क्या है? ग्रहण त्रुटि: अप्रत्यक्ष रूप से आवश्यक वर्ग वर्गों से संदर्भित है? यह जांच कैसे करें कि कोई फ़ाइल मान्य UTF-8 है? सी ++ में, क्या यह एक फ़ंक्शन से वेक्टर वापस करने के लिए अभी भी खराब अभ्यास है? getResourceAsStream () हमेशा रिक्त लौट रहा है रेल। जहां बनाम JQuery के साथ ईवेंट हैंडलर्स के लिए बाध्य कार्यों को एक्सेस करना सी में यादृच्छिक संख्या उत्पन्न करना

Xcode 7 में ENABLE_BITCODE क्या करता है?

मुझे एम्बेडेड बिटोड शब्द के साथ समस्या है
एम्बेडेड बिटोड क्या है?
नए Xcode में सक्षम करने के लिए, ENABLE_BITCODE कब?
सक्षम होने पर बाइनरी का क्या होता है, ENABLE_BITCODE 7 में ENABLE_BITCODE ?

वेब के समाधान से एकत्रित समाधान "Xcode 7 में ENABLE_BITCODE क्या करता है?"

बिटकोड कोड के प्रकार को संदर्भित करता है: "एलएलवीएम बिटकोड" जो आइट्यून्स कनेक्ट को भेजा जाता है। यह ऐप्पल को फिर से ऑप्टिमाइज़ करने के लिए कुछ गणनाओं का उपयोग करने की अनुमति देता है (उदाहरण: संभावित रूप से घटाए जाने योग्य आकार)। अगर एप्पल को आपके निष्पादन योग्य को बदलने की जरूरत है तो वे इसे बिना किसी नए बिल्ड अपलोड किए बिना कर सकते हैं।

ये इससे अलग है: स्लाइसिंग जो एप्लीकल की प्रक्रिया है जो डिवाइस के रिज़ॉल्यूशन और आर्किटेक्चर के आधार पर उपयोगकर्ता के डिवाइस के लिए आपके एप को अनुकूलित करता है। स्लाइसिंग को बिट कोड की आवश्यकता नहीं है (पूर्व: केवल 5 एस पर @ 2x छवियों सहित)

ऐप थिंगिंग, टुकड़ा करने की क्रिया, बिटोड, और ऑन-डिमांड संसाधनों का संयोजन है

बिट कोड एक संकलित कार्यक्रम का एक मध्यवर्ती प्रतिनिधित्व है। आपके द्वारा आइट्यून्स से कनेक्ट किए गए एप्लिकेशन कनेक्ट होते हैं जिसमें एप स्टोर पर बिटकोड को संकलित और लिंक किया जाएगा। बिटोड को शामिल करने से एप्लेट स्टोर में अपने ऐप के एक नए संस्करण को प्रस्तुत करने की आवश्यकता के बिना भविष्य में अपने ऐप बाइनरी को फिर से ऑप्टिमाइज़ करने की अनुमति देगा।

ऐप थुइनिंग पर एप्पल दस्तावेज़ीकरण

एम्बेडेड बिटोड क्या है?

डॉक्स के अनुसार:

बिट कोड एक संकलित कार्यक्रम का एक मध्यवर्ती प्रतिनिधित्व है। आपके द्वारा आइट्यून्स से कनेक्ट किए गए एप्लिकेशन कनेक्ट होते हैं जिसमें एप स्टोर पर बिटकोड को संकलित और लिंक किया जाएगा। बिटोड को शामिल करने से एप्लेट स्टोर में अपने ऐप के एक नए संस्करण को प्रस्तुत करने की आवश्यकता के बिना भविष्य में अपने ऐप बाइनरी को फिर से ऑप्टिमाइज़ करने की अनुमति देगा।

अद्यतन: "Xcode 7 में नई सुविधाओं" में यह वाक्यांश ने मुझे लंबे समय से सोचने के लिए बनाया है कि ऐप के आकार को कम करने के लिए बिटकोड की आवश्यकता है:

जब आप ऐप स्टोर में जमा करने के लिए संग्रह करते हैं, तो Xcode आपके ऐप को मध्यवर्ती प्रतिनिधित्व में संकलित करेगा। ऐप स्टोर तब बिटकोड को 64 या 32 बिट निष्पादनयोग्य में आवश्यकतानुसार संकलित करेगा।

हालांकि यह सच नहीं है, बिटकोड और स्लाइसिंग स्वतंत्र रूप से काम करते हैं: स्काइसिंग ऐप के आकार को कम करने और ऐप बंडल के संस्करणों को कम करने के बारे में है, और बिटकोड कुछ निश्चित बायर्न ऑप्टिमाइज़ेशन के बारे में है। मैंने इसे गैर-बिटकोड क्षुधा के निष्पादन योग्यताओं में शामिल आर्किटेक्चर और संस्थापक की जांच करके यह सत्यापित किया है कि वे केवल आवश्यक लोगों को शामिल करते हैं

बिटकोड, अन्य ऐप थिंगिंग घटक को स्लीकिसिंग नामक विशेष आर्किटेक्चर के लिए विशेष निष्पादनयोग्य के साथ ऐप बंडल वेरियंट बनाने के लिए कहता है , उदाहरण के लिए आईफोन 5 एस के संस्करण में केवल आर्म 64 एक्जीक्यूटेबल, आईपैड मिनी आर्मव 7 और इतने पर शामिल होंगे

नए Xcode में ENABLE_BITCODE सक्षम करने के लिए कब?

आईओएस क्षुधा के लिए, बिटकोड डिफ़ॉल्ट है, लेकिन वैकल्पिक है। यदि आप बिटोड प्रदान करते हैं, तो ऐप बंडल के सभी ऐप्स और फ्रेमवर्क में बिटकोड शामिल करना आवश्यक है। घड़ी और टीवीओएस ऐप्स के लिए, बिटकोड की आवश्यकता है।

नए Xcode में ENABLE_BITCODE सक्षम होने पर बाइनरी का क्या होता है?

एक्सकोड 7 संदर्भ से:

इस सेटिंग को सक्रिय करने से पता चलता है कि लक्ष्य या प्रोजेक्ट को प्लेटफार्मों और आर्किटेक्चर के लिए संकलन के दौरान बिटकोड उत्पन्न करना चाहिए जो इसे समर्थन करते हैं। संग्रह के लिए, ऐप स्टोर में प्रस्तुत करने के लिए लिंक्ड बाइनरी में बिटकोड उत्पन्न होगा अन्य निर्माण के लिए, कंपाइलर और लिंकर यह जांच करेगा कि क्या कोड बिटोड पीढ़ी के लिए आवश्यकताओं का अनुपालन करता है, लेकिन वास्तविक बिटोड उत्पन्न नहीं करेगा।

यहां कुछ लिंक हैं जो बिट कोड की गहरी समझ में मदद करेंगे:

  • बिटकोड डिमिसिफाइड
  • क्यों मैं बिट कोड को सक्षम नहीं कर रहा हूँ

जहां तक ​​बिट कोड और बिट कोड को सक्षम करने की बात है, यह समझना आवश्यक है कि पहली चीज़ कहां से शुरू हुई है।

तो, मूलतः अगर मैं ENABLE_BITCODE की बात करता हूं जो आईओएस 9 में पेश किया गया है, तो ऐप थुइनिंग प्रक्रिया का एक हिस्सा है।

और यह समस्या का एक हिस्सा है जो " आईओएस 8 में 1 जीबी के आईओएस 8 के भंडारण के आकार को कम करने के लिए एप्पल ने कैसे प्रबंधित किया है? "

यह 'ऐप थिंगिंग' नामक एक नई तकनीक के कारण है

ऐप थनिंग क्या है?

ऐप थुइन ने आईओएस 9 ओटा अपडेट 4.6 जीबी से 1.3 जीबी, एक 71% आकार में कमी लाया है। भविष्य में न केवल ओटीए अपडेट के साथ ही यह मदद करेगा, लेकिन प्रौद्योगिकी डेवलपर्स के लिए तीसरे पक्ष के क्षुधा द्वारा आवश्यक भंडारण को कम करने के लिए उपलब्ध होगा।

ऐप थिंकिंग में मूल रूप से तीन घटक होते हैं- स्लिसिंग, बीटोड, और ऑन-डिमांड संसाधन।

ऐप स्कीइसिंग : आईओएस एप्स विभिन्न उपकरणों पर चलने के लिए विकसित किए गए हैं, इसलिए वे सभी के समर्थन के लिए कोड के साथ आते हैं, चाहे आपकी विशेष डिवाइस की आवश्यकता है या नहीं ऐप स्लाइसिंग आपके डिवाइस को हमारे डिवाइस द्वारा आवश्यक केवल उन फ़ाइलों को डाउनलोड करने की अनुमति देगा। उदाहरण: यदि आप 4 इंच के मॉडल को चला रहे हैं तो आपको 3x iPhone 6 प्लस संपत्ति की आवश्यकता नहीं है।

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

बिटकोड : यह एक ऐप के "मध्यवर्ती प्रतिनिधित्व" को संदर्भित करता है जो डेवलपर्स पूर्व-संकलित बाइनरी के बजाय ऐप स्टोर पर अपलोड करेंगे। यह ऐप स्कीइसिंग के साथ हाथ में हाथ से काम करता है, जो डाउनलोडिंग डिवाइस के आधार पर बिट कार्ड को 32-बिट या 64-बिट के रूप में संकलित किया जा सकता है। यह डेवलपर्स को अपने ऐप को फिर से जमा करने के बजाय ऐप्पल द्वारा स्वचालित रूप से लागू किए जाने वाले किसी कंपाइलर सुधार की अनुमति देगा।

यहां छवि विवरण दर्ज करें

चूंकि सटीक प्रश्न "बिटोड को सक्षम करता है" है, मैं कुछ पतली तकनीकी विवरण देना चाहूंगा जो मैंने अभी तक सोचा है। जब तक ऐप्पल इस कंपाइलर के लिए स्रोत कोड रिलीज़ नहीं करता तब तक इसमें से अधिकांश 100% निश्चितता के साथ आंकड़ा करना असंभव है

सबसे पहले, ऐप्पल का बीटोड एलएलवीएम बाइटकोड के समान ही दिखाई नहीं देता है। कम से कम, मैं उन दोनों के बीच कोई समानता नहीं समझ पा रहा हूं। ऐसा प्रतीत होता है कि एक मालिकाना शीर्षक (हमेशा "एक्सर!" से शुरू होता है) और शायद कुछ लिंक-टाइम संदर्भ जादू जो डेटा दोहरावों को रोकता है यदि आप एक हार्डकोड स्ट्रिंग लिखते हैं, तो यह स्ट्रिंग केवल एक बार डेटा में डाल दी जाएगी, दो बार के बजाय अपेक्षा की जाएगी अगर यह सामान्य एलएलवीएम बाइटकोड था।

दूसरा, बिटिकोड वास्तव में बाइनरी आर्काइव में एक अलग आर्किटेक्चर के रूप में नहीं भेजा जाता है जैसा कि उम्मीद की जा सकती है इसे उसी तरीके से नहीं भेजा गया है जैसे x86 और एआरएम को एक बाइनरी (FAT संग्रह) में रखा गया है। इसके बजाय, वे "__LLVM" नामक आर्किटेक्चर विशिष्ट Macho बाइनरी में एक विशेष अनुभाग का उपयोग करते हैं जो कि समर्थित प्रत्येक आर्किटेक्चर के साथ भेज दिया जाता है (यानी, डुप्लिकेट)। मुझे लगता है कि यह एक कम अपने कंपाइलर सिस्टम के साथ आ रहा है और दोहराव से बचने के लिए भविष्य में तय किया जा सकता है।

सी कोड ( clang -fembed-bitcode hi.c -S -emit-llvm साथ संकलित clang -fembed-bitcode hi.c -S -emit-llvm ):

 #include <stdio.h> int main() { printf("hi there!"); return 0; } 

एलएलवीएम आईआर आउटपुट:

 ; ModuleID = '/var/folders/rd/sv6v2_f50nzbrn4f64gnd4gh0000gq/T/hi-a8c16c.bc' target datalayout = "em:o-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx10.10.0" @.str = private unnamed_addr constant [10 x i8] c"hi there!\00", align 1 @llvm.embedded.module = appending constant [1600 x i8] c"\DE\C0\17\0B\00\00\00\00\14\00\00\00$\06\00\00\07\00\00\01BC\C0\DE!\0C\00\00\86\01\00\00\0B\82 \00\02\00\00\00\12\00\00\00\07\81#\91A\C8\04I\06\1029\92\01\84\0C%\05\08\19\1E\04\8Bb\80\10E\02B\92\0BB\84\102\148\08\18I\0A2D$H\0A\90!#\C4R\80\0C\19!r$\07\C8\08\11b\A8\A0\A8@\C6\F0\01\00\00\00Q\18\00\00\C7\00\00\00\1Bp$\F8\FF\FF\FF\FF\01\90\00\0D\08\03\82\1D\CAa\1E\E6\A1\0D\E0A\1E\CAa\1C\D2a\1E\CA\A1\0D\CC\01\1E\DA!\1C\C8\010\87p`\87y(\07\80p\87wh\03s\90\87ph\87rh\03xx\87tp\07z(\07yh\83r`\87th\07\80\1E\E4\A1\1E\CA\01\18\DC\E1\1D\DA\C0\1C\E4!\1C\DA\A1\1C\DA\00\1E\DE!\1D\DC\81\1E\CAA\1E\DA\A0\1C\D8!\1D\DA\A1\0D\DC\E1\1D\DC\A1\0D\D8\A1\1C\C2\C1\1C\00\C2\1D\DE\A1\0D\D2\C1\1D\CCa\1E\DA\C0\1C\E0\A1\0D\DA!\1C\E8\01\1D\00s\08\07v\98\87r\00\08wx\876p\87pp\87yh\03s\80\876h\87p\A0\07t\00\CC!\1C\D8a\1E\CA\01 \E6\81\1E\C2a\1C\D6\A1\0D\E0A\1E\DE\81\1E\CAa\1C\E8\E1\1D\E4\A1\0D\C4\A1\1E\CC\C1\1C\CAA\1E\DA`\1E\D2A\1F\CA\01\C0\03\80\A0\87p\90\87s(\07zh\83q\80\87z\00\C6\E1\1D\E4\A1\1C\E4\00 \E8!\1C\E4\E1\1C\CA\81\1E\DA\C0\1C\CA!\1C\E8\A1\1E\E4\A1\1C\E6\01X\83y\98\87y(\879`\835\18\07|\88\03;`\835\98\87y(\076X\83y\98\87r\90\036X\83y\98\87r\98\03\80\A8\07w\98\87p0\87rh\03s\80\876h\87p\A0\07t\00\CC!\1C\D8a\1E\CA\01 \EAa\1E\CA\A1\0D\E6\E1\1D\CC\81\1E\DA\C0\1C\D8\E1\1D\C2\81\1E\00s\08\07v\98\87r\006\C8\88\F0\FF\FF\FF\FF\03\C1\0E\E50\0F\F3\D0\06\F0 \0F\E50\0E\E90\0F\E5\D0\06\E6\00\0F\ED\10\0E\E4\00\98C8\B0\C3<\94\03@\B8\C3;\B4\819\C8C8\B4C9\B4\01<\BCC:\B8\03=\94\83<\B4A9\B0C:\B4\03@\0F\F2P\0F\E5\00\0C\EE\F0\0Em`\0E\F2\10\0E\EDP\0Em\00\0F\EF\90\0E\EE@\0F\E5 \0FmP\0E\EC\90\0E\ED\D0\06\EE\F0\0E\EE\D0\06\ECP\0E\E1`\0E\00\E1\0E\EF\D0\06\E9\E0\0E\E60\0Fm`\0E\F0\D0\06\ED\10\0E\F4\80\0E\809\84\03;\CCC9\00\84;\BCC\1B\B8C8\B8\C3<\B4\819\C0C\1B\B4C8\D0\03:\00\E6\10\0E\EC0\0F\E5\00\10\F3@\0F\E10\0E\EB\D0\06\F0 \0F\EF@\0F\E50\0E\F4\F0\0E\F2\D0\06\E2P\0F\E6`\0E\E5 \0Fm0\0F\E9\A0\0F\E5\00\E0\01@\D0C8\C8\C39\94\03=\B4\C18\C0C=\00\E3\F0\0E\F2P\0Er\00\10\F4\10\0E\F2p\0E\E5@\0Fm`\0E\E5\10\0E\F4P\0F\F2P\0E\F3\00\AC\C1<\CC\C3<\94\C3\1C\B0\C1\1A\8C\03>\C4\81\1D\B0\C1\1A\CC\C3<\94\03\1B\AC\C1<\CCC9\C8\01\1B\AC\C1<\CCC9\CC\01@\D4\83;\CCC8\98C9\B4\819\C0C\1B\B4C8\D0\03:\00\E6\10\0E\EC0\0F\E5\00\10\F50\0F\E5\D0\06\F3\F0\0E\E6@\0Fm`\0E\EC\F0\0E\E1@\0F\809\84\03;\CCC9\00\00I\18\00\00\02\00\00\00\13\82`B \00\00\00\89 \00\00\0D\00\00\002\22\08\09 d\85\04\13\22\A4\84\04\13\22\E3\84\A1\90\14\12L\88\8C\0B\84\84L\100s\04H*\00\C5\1C\01\18\94`\88\08\AA0F7\10@3\02\00\134|\C0\03;\F8\05;\A0\836\08\07x\80\07v(\876h\87p\18\87w\98\07|\88\038p\838\80\037\80\83\0DeP\0Em\D0\0Ez\F0\0Em\90\0Ev@\07z`\07t\D0\06\E6\80\07p\A0\07q \07x\D0\06\EE\80\07z\10\07v\A0\07s \07z`\07t\D0\06\B3\10\07r\80\07:\0FDH #EB\80\1D\8C\10\18I\00\00@\00\00\C0\10\A7\00\00 \00\00\00\00\00\00\00\868\08\10\00\02\00\00\00\00\00\00\90\05\02\00\00\08\00\00\002\1E\98\0C\19\11L\90\8C\09&G\C6\04C\9A\22(\01\0AM\D0i\10\1D]\96\97C\00\00\00y\18\00\00\1C\00\00\00\1A\03L\90F\02\134A\18\08&PIC Level\13\84a\D80\04\C2\C05\08\82\83c+\03ab\B2j\02\B1+\93\9BK{s\03\B9q\81q\81\01A\19c\0Bs;k\B9\81\81q\81q\A9\99q\99I\D9\10\14\8D\D8\D8\EC\DA\5C\DA\DE\C8\EA\D8\CA\5C\CC\D8\C2\CE\E6\A6\04C\1566\BB6\974\B227\BA)A\01\00y\18\00\002\00\00\003\08\80\1C\C4\E1\1Cf\14\01=\88C8\84\C3\8CB\80\07yx\07s\98q\0C\E6\00\0F\ED\10\0E\F4\80\0E3\0CB\1E\C2\C1\1D\CE\A1\1Cf0\05=\88C8\84\83\1B\CC\03=\C8C=\8C\03=\CCx\8Ctp\07{\08\07yH\87pp\07zp\03vx\87p \87\19\CC\11\0E\EC\90\0E\E10\0Fn0\0F\E3\F0\0E\F0P\0E3\10\C4\1D\DE!\1C\D8!\1D\C2a\1Ef0\89;\BC\83;\D0C9\B4\03<\BC\83<\84\03;\CC\F0\14v`\07{h\077h\87rh\077\80\87p\90\87p`\07v(\07v\F8\05vx\87w\80\87_\08\87q\18\87r\98\87y\98\81,\EE\F0\0E\EE\E0\0E\F5\C0\0E\EC\00q \00\00\05\00\00\00&`<\11\D2L\85\05\10\0C\804\06@\F8\D2\14\01\00\00a \00\00\0B\00\00\00\13\04A,\10\00\00\00\03\00\00\004#\00dC\19\020\18\83\01\003\11\CA@\0C\83\11\C1\00\00#\06\04\00\1CB\12\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00", section "__LLVM,__bitcode" @llvm.cmdline = appending constant [67 x i8] c"-triple\00x86_64-apple-macosx10.10.0\00-emit-llvm\00-disable-llvm-optzns\00", section "__LLVM,__cmdline" ; Function Attrs: nounwind ssp uwtable define i32 @main() #0 { %1 = alloca i32, align 4 store i32 0, i32* %1 %2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([10 x i8]* @.str, i32 0, i32 0)) ret i32 0 } declare i32 @printf(i8*, ...) #1 attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "target-features"="+ssse3,+cx16,+sse,+sse2,+sse3" "unsafe-fp-math"="false" "use-soft-float"="false" } attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "target-features"="+ssse3,+cx16,+sse,+sse2,+sse3" "unsafe-fp-math"="false" "use-soft-float"="false" } !llvm.module.flags = !{!0} !llvm.ident = !{!1} !0 = !{i32 1, !"PIC Level", i32 2} !1 = !{!"Apple LLVM version 7.0.0 (clang-700.0.53.3)"} 

डेटा सारणी जो आईआर में है, अनुकूलन और क्लैंग की अन्य कोड पीढ़ी सेटिंग के आधार पर भी बदलती है। यह मेरे लिए पूरी तरह से अज्ञात है कि यह किस रूप में है या कुछ भी है।

संपादित करें:

चहचहाना पर संकेत के बाद, मैंने इसे फिर से आना और इसे पुष्टि करने का निर्णय लिया। मैंने इस ब्लॉग पोस्ट का अनुसरण किया और अपने बीटोड एक्सट्रैक्टर टूल का प्रयोग किया, जो कि Macho निष्पादन योग्य से बाहर एप्पल आर्काइव बाइनरी प्राप्त करने के लिए था। और एक्सर आर्काइव को एक्सर उपयोगिता के साथ निकालने के बाद, मुझे यह मिल गया (लिवम-डि कोर्स के साथ पाठ में परिवर्तित)

 ; ModuleID = '1' target datalayout = "em:o-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx10.10.0" @.str = private unnamed_addr constant [10 x i8] c"hi there!\00", align 1 ; Function Attrs: nounwind ssp uwtable define i32 @main() #0 { %1 = alloca i32, align 4 store i32 0, i32* %1 %2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0)) ret i32 0 } declare i32 @printf(i8*, ...) #1 attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "target-features"="+ssse3,+cx16,+sse,+sse2,+sse3" "unsafe-fp-math"="false" "use-soft-float"="false" } attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "target-features"="+ssse3,+cx16,+sse,+sse2,+sse3" "unsafe-fp-math"="false" "use-soft-float"="false" } !llvm.module.flags = !{!0} !llvm.ident = !{!1} !0 = !{i32 1, !"PIC Level", i32 2} !1 = !{!"Apple LLVM version 7.0.0 (clang-700.1.76)"} 

गैर-बिटोड आईआर और बिटोड आईआर के बीच वास्तव में केवल उल्लेखनीय अंतर यह है कि प्रत्येक आर्किटेक्चर के लिए केवल 1, 2, आदि में फ़ाइल नाम छीन लिया गया है।

मैंने यह भी पुष्टि की है कि ऑप्टिमाइज़ेशन के बाद एक बाइनरी में एम्बेडेड बिटकोड उत्पन्न होता है। यदि आप- ओ 3 से संकलित करते हैं और बिटोड निकालते हैं, तो यह आपके कंप्यूटर से संकलित होगा I

और सिर्फ अतिरिक्त क्रेडिट प्राप्त करने के लिए, मैंने यह भी पुष्टि की है कि जब आप एक आईओएस 9 एप डाउनलोड करते हैं तो एपल उपकरणों को बिटकोड नहीं करता है। इसमें कई अन्य अजीब वर्ग शामिल हैं जिन्हें मैं __LINKEDIT की तरह मान्यता नहीं देता है, लेकिन वे __LLVM .__ बंडल को शामिल नहीं करते हैं, और इस प्रकार डिवाइस पर चलने वाले अंतिम बाइनरी में बिटकोड को शामिल नहीं करते हैं। अजीब तरह से, एप्पल अभी भी आईओएस 8 उपकरणों के लिए अलग 32 / 64bit कोड के साथ वसा बाइनरी जहाज हालांकि।

बिट कोड (आईओएस, घड़ीओएस)

बिट कोड एक संकलित कार्यक्रम का एक मध्यवर्ती प्रतिनिधित्व है। आपके द्वारा आइट्यून्स से कनेक्ट किए गए एप्लिकेशन कनेक्ट होते हैं जिसमें एप स्टोर पर बिटकोड को संकलित और लिंक किया जाएगा। बिटोड को शामिल करने से एप्लेट स्टोर में अपने ऐप के एक नए संस्करण को प्रस्तुत करने की आवश्यकता के बिना भविष्य में अपने ऐप बाइनरी को फिर से ऑप्टिमाइज़ करने की अनुमति देगा।

मूल रूप से यह अवधारणा जावा के समान है, जहां बाइट कोड अलग-अलग जेवीएम पर चलाया जाता है और इस मामले में बीटोड को iTune स्टोर पर रखा गया है और विभिन्न प्लेटफॉर्म्स (डिवाइस) को इंटरमीडिएट कोड देने की बजाय यह संकलित कोड प्रदान करता है जिसे ज़रूरत नहीं है चलाने के लिए कोई भी आभासी मशीन

इस प्रकार हमें एक बार बिटकोड बनाने की आवश्यकता है और यह मौजूदा या आने वाले डिवाइस के लिए उपलब्ध होगा। यह संकलित करने के लिए एप्पल का सिरदर्द है जो इसे प्रत्येक प्लेटफॉर्म के साथ संगत करता है।

नए प्लेटफार्मों को समर्थन देने के लिए देवों को फिर से परिवर्तन करने और एप सबमिट करने की ज़रूरत नहीं है

चलो iPhone 5s का उदाहरण लेते हैं जब सेब ने इसमें x64 चिप पेश किया था हालांकि x86 ऐप्स पूरी तरह से x64 आर्किटेक्चर के साथ संगत थे लेकिन x86 x64 प्लेटफॉर्म का पूर्ण उपयोग करने के लिए डेवलपर को आर्किटेक्चर या कुछ कोड को बदलना होगा। एक बार वह / उसने किया है एप्लिकेशन को समीक्षा के लिए ऐप स्टोर में सबमिट किया जाता है।

अगर इस बिटकोड अवधारणा को पहले लॉन्च किया गया था तो हम डेवलपर्स को x64 बिट आर्किटेक्चर के समर्थन में कोई बदलाव नहीं करना है।

अद्यतन करें

ऐप्पल ने स्पष्ट किया है कि टुकड़ा करने की क्रिया को बिटोड को सक्षम करने से स्वतंत्र होता है मैंने इसे इस अभ्यास में भी देखा है जहां एक गैर-बिट कोड सक्षम ऐप केवल लक्ष्य डिवाइस के लिए उपयुक्त वास्तुकला के रूप में डाउनलोड किया जाएगा।

मूल

अधिक विशेष रूप से :

Bitcode। मध्यवर्ती प्रतिनिधित्व में ऐप स्टोर में प्रस्तुत करने के लिए अपना ऐप संग्रहित करें, जो वितरित किए जाने वाले लक्ष्य उपकरणों के लिए 64- या 32-बिट निष्पादनयोग्य में संकलित किया गया है।

टुकड़ा करने की क्रिया। आर्टवर्क को एसेट कैटलॉग में शामिल किया गया है और एक प्लेटफॉर्म के लिए टैग किया गया है ऐप स्टोर केवल वही देने की अनुमति देता है जो स्थापना के लिए आवश्यक है।

जिस तरह से मैं इसे पढ़ता हूं, यदि आप बिटोड का समर्थन करते हैं, तो आपके ऐप के डाउनलोड करने वाले केवल अपने स्वयं के डिवाइस के लिए आवश्यक संकलित वास्तुकला प्राप्त करेंगे।