जवाबों:
बिटकॉइन कोड के प्रकार को संदर्भित करता है: "एलएलवीएम बिटकोड" जो आईट्यून्स कनेक्ट को भेजा जाता है। यह ऐप्पल को ऐप्स को फिर से ऑप्टिमाइज़ करने के लिए कुछ गणनाओं का उपयोग करने की अनुमति देता है (जैसे: संभवतः निष्पादन योग्य आकार को कम करता है)। यदि Apple को आपके निष्पादन योग्य को बदलने की आवश्यकता है, तो वे एक नए बिल्ड को अपलोड किए बिना ऐसा कर सकते हैं।
यह इससे अलग है: स्लाइसिंग जो ऐप्पल की प्रक्रिया है जो डिवाइस के रिज़ॉल्यूशन और आर्किटेक्चर के आधार पर उपयोगकर्ता के डिवाइस के लिए आपके ऐप को अनुकूलित करता है। Slicing के लिए Bitcode की आवश्यकता नहीं होती है। (पूर्व: केवल 5s पर @ 2x चित्र सहित)
ऐप थिनिंग स्लाइसिंग, बिटकोड और ऑन-डिमांड संसाधनों का संयोजन है
बिटकोड एक संकलित कार्यक्रम का एक मध्यवर्ती प्रतिनिधित्व है। जिन ऐप्प को आप iTunes से अपलोड करते हैं, उनमें बिटकोड सम्मिलित किया जाएगा और ऐप स्टोर पर लिंक किया जाएगा। बिटकॉइन सहित ऐप्पल भविष्य में आपके ऐप के बाइनरी को स्टोर में अपने ऐप के नए संस्करण को प्रस्तुत करने की आवश्यकता के बिना फिर से ऑप्टिमाइज़ करने की अनुमति देगा।
डॉक्स के अनुसार :
बिटकोड एक संकलित कार्यक्रम का एक मध्यवर्ती प्रतिनिधित्व है। जिन ऐप्प को आप iTunes से अपलोड करते हैं, उनमें बिटकोड सम्मिलित किया जाएगा और ऐप स्टोर पर लिंक किया जाएगा। बिटकॉइन सहित ऐप्पल भविष्य में आपके ऐप के बाइनरी को स्टोर में अपने ऐप के नए संस्करण को प्रस्तुत करने की आवश्यकता के बिना फिर से ऑप्टिमाइज़ करने की अनुमति देगा।
अपडेट: में यह वाक्यांश "नई विशेषताएं Xcode 7 में" एक लंबे समय के लिए सोचने के लिए मुझे बनाया Bitcode के लिए आवश्यक है स्लाइसिंग एप्लिकेशन आकार को कम करने:
जब आप ऐप स्टोर में जमा करने के लिए संग्रह करते हैं, तो Xcode आपके ऐप को एक मध्यवर्ती प्रतिनिधित्व में संकलित करेगा। ऐप स्टोर फिर बिटकॉइन को 64 या 32 बिट निष्पादन योग्य के रूप में आवश्यक रूप से संकलित करेगा।
हालांकि सच नहीं है कि, Bitcode और स्लाइसिंग काम स्वतंत्र रूप से: स्लाइसिंग एप्लिकेशन आकार को कम करने और एप्लिकेशन बंडल पैदा वेरिएंट के बारे में है, और Bitcode कुछ द्विआधारी अनुकूलन के बारे में है। मैंने यह जाँच कर लिया है कि गैर-बिटकोड ऐप्स के निष्पादन में शामिल आर्किटेक्चर की जाँच करके यह पाया जाए कि वे केवल आवश्यक लोगों को ही शामिल करते हैं।
Bitcode अन्य की अनुमति देता है अनुप्रयोग Thinning घटक कहा जाता स्लाइसिंग एप्लिकेशन बंडल उत्पन्न करने के लिए विशेष रूप से आर्किटेक्चर के लिए विशेष रूप से निष्पादनयोग्य साथ वेरिएंट, जैसे iPhone 5 एस संस्करण, iPad मिनी ARMv7 और इतने पर ही निष्पादन arm64 शामिल होंगे।
IOS ऐप्स के लिए, बिटकोड डिफ़ॉल्ट है, लेकिन वैकल्पिक है। यदि आप बिटकोड प्रदान करते हैं, तो ऐप बंडल में सभी ऐप और फ़्रेमवर्क को बिटकोड को शामिल करना होगा। वॉचओएस और टीवीओएस ऐप के लिए, बिटकोड की आवश्यकता है।
Xcode 7 संदर्भ से:
इस सेटिंग को सक्रिय करना इंगित करता है कि लक्ष्य या परियोजना को प्लेटफार्मों और आर्किटेक्चर के लिए संकलन के दौरान बिटकोड उत्पन्न करना चाहिए जो इसका समर्थन करते हैं। आर्काइव बिल्ड के लिए, बिटकॉइन को ऐप स्टोर में जमा करने के लिए लिंक किए गए बाइनरी में उत्पन्न किया जाएगा। अन्य बिल्ड के लिए, कंपाइलर और लिंकर यह जांच करेगा कि कोड बिटकॉइन पीढ़ी के लिए आवश्यकताओं का अनुपालन करता है, लेकिन वास्तविक कोडकोड उत्पन्न नहीं करेगा।
यहां कुछ लिंक दिए गए हैं जो बिटकोड की गहरी समझ में मदद करेंगे :
चूँकि सटीक सवाल है "बिटकॉइन को सक्षम क्या करता है", मैं कुछ पतले तकनीकी विवरण देना चाहूंगा जिन्हें मैंने इस प्रकार समझ लिया है। जब तक Apple इस संकलक के लिए स्रोत कोड जारी नहीं करता है, तब तक अधिकांश का 100% निश्चितता के साथ पता लगाना असंभव है
सबसे पहले, Apple का बिटकोड एलएलवीएम बायटेकोड के समान नहीं दिखता है। कम से कम, मैं उन दोनों के बीच किसी भी समानता का पता लगाने में सक्षम नहीं हूं। ऐसा प्रतीत होता है कि एक स्वामित्व शीर्षक (हमेशा "xar!" से शुरू होता है) और शायद कुछ लिंक-टाइम संदर्भ जादू है जो डेटा दोहराव को रोकता है। यदि आप एक हार्डकोड स्ट्रिंग लिखते हैं, तो यह स्ट्रिंग केवल एक बार डेटा में डाली जाएगी, बल्कि दो बार की अपेक्षा की जाएगी यदि यह सामान्य एलएलवीएम बायटेकोड था।
दूसरा, बिटकॉइन को बाइनरी आर्काइव में एक अलग आर्किटेक्चर के रूप में वास्तव में शिप नहीं किया गया है जैसा कि उम्मीद की जा सकती है। इसे उसी तरह से शिप नहीं किया गया है जैसे कि x86 और ARM को एक बाइनरी (FAT आर्काइव) में रखा गया है। इसके बजाय, वे "__LLVM" नामक आर्किटेक्चर विशिष्ट माच बाइनरी में एक विशेष खंड का उपयोग करते हैं, जिसे समर्थित हर वास्तुकला (यानी, डुप्लिकेटेड) के साथ भेज दिया जाता है। मुझे लगता है कि यह उनके संकलक प्रणाली के साथ आने वाला एक छोटा समय है और भविष्य में नकल से बचने के लिए इसे ठीक किया जा सकता है।
सी कोड (साथ संकलित clang -fembed-bitcode hi.c -S -emit-llvm
):
#include <stdio.h>
int main() {
printf("hi there!");
return 0;
}
LLVM IR आउटपुट:
; ModuleID = '/var/folders/rd/sv6v2_f50nzbrn4f64gnd4gh0000gq/T/hi-a8c16c.bc'
target datalayout = "e-m: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)"}
IR में मौजूद डेटा ऐरे भी क्लैंग के ऑप्टिमाइज़ेशन और अन्य कोड जनरेशन सेटिंग्स के आधार पर बदल जाता है। यह मेरे लिए पूरी तरह से अज्ञात है कि यह किस प्रारूप या किसी भी चीज़ में है।
संपादित करें:
ट्विटर पर संकेत के बाद, मैंने इस पर फिर से विचार करने और इसकी पुष्टि करने का फैसला किया। मैंने इस ब्लॉग पोस्ट का अनुसरण किया और माचो निष्पादन योग्य से Apple आर्काइव बाइनरी को प्राप्त करने के लिए अपने बिटकोड एक्सट्रैक्टर टूल का उपयोग किया। और एक्सएआर उपयोगिता के साथ ऐप्पल आर्काइव को निकालने के बाद, मुझे यह मिला (एलएलएम-डिस के साथ पाठ में परिवर्तित)
; ModuleID = '1'
target datalayout = "e-m: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 आदि छीन लिए गए हैं।
मैंने यह भी पुष्टि की कि बाइनरी में एम्बेडेड बिटकोड अनुकूलन के बाद उत्पन्न होता है। यदि आप -O3 के साथ संकलन करते हैं और बिटकॉइन निकालते हैं, तो यह -O0 के साथ संकलित करने से अलग होगा।
और बस अतिरिक्त क्रेडिट प्राप्त करने के लिए, मैंने यह भी पुष्टि की है कि जब आप iOS 9 ऐप डाउनलोड करते हैं तो ऐप्पल डिवाइस पर बिटकॉइन शिप नहीं करता है। वे कई अन्य अजीब वर्गों को शामिल करते हैं जिन्हें मैं __LINKEDIT की तरह मान्यता नहीं देता हूं, लेकिन वे __LLVM .__ बंडल को शामिल नहीं करते हैं, और इस प्रकार एक डिवाइस पर चलने वाले अंतिम बाइनरी में बिटकोड को शामिल नहीं करते हैं। विचित्र रूप से पर्याप्त है, Apple अभी भी वसा बायनेरीज़ को अलग-अलग 32 / 64bit कोड के साथ iOS 8 उपकरणों के साथ शिप करता है।
xar!
Apple का संग्रह फ़ाइल स्वरूप है।
बिटकोड (iOS, watchOS)
बिटकोड एक संकलित कार्यक्रम का एक मध्यवर्ती प्रतिनिधित्व है। जिन ऐप्प को आप iTunes से अपलोड करते हैं, उनमें बिटकोड सम्मिलित किया जाएगा और ऐप स्टोर पर लिंक किया जाएगा। बिटकॉइन सहित ऐप्पल भविष्य में आपके ऐप के बाइनरी को स्टोर में अपने ऐप के नए संस्करण को प्रस्तुत करने की आवश्यकता के बिना फिर से ऑप्टिमाइज़ करने की अनुमति देगा।
मूल रूप से यह अवधारणा कुछ हद तक जावा के समान है जहां बाइट कोड को अलग-अलग JVM पर चलाया जाता है और इस मामले में बिटकॉइन को iTune स्टोर पर रखा जाता है और इसके बजाय मध्यवर्ती कोड को विभिन्न प्लेटफार्मों (उपकरणों) पर देने के बजाय यह संकलित कोड प्रदान करता है जिसकी आवश्यकता है किसी भी वर्चुअल मशीन को चलाने के लिए।
इस प्रकार हमें एक बार बिटकोड बनाने की आवश्यकता है और यह मौजूदा या आने वाले उपकरणों के लिए उपलब्ध होगा। यह Apple के सिरदर्द को संकलित करने के लिए है, जो प्रत्येक प्लेटफॉर्म के साथ संगत है।
देवताओं को नए प्लेटफ़ॉर्म का समर्थन करने के लिए परिवर्तन करने और ऐप को फिर से सबमिट करने की आवश्यकता नहीं है।
आइए iPhone 5s का उदाहरण लेते हैं जब सेब ने इसमें x64
चिप पेश की । हालाँकि x86
एप्लिकेशन x64
आर्किटेक्चर के साथ पूरी तरह से अनुकूल थे, लेकिन x64
प्लेटफ़ॉर्म का पूरी तरह से उपयोग करने के लिए डेवलपर को आर्किटेक्चर या कुछ कोड को बदलना होगा। एक बार s / वह कर चुका है, ऐप को समीक्षा के लिए ऐप स्टोर में सबमिट किया गया है।
यदि इस बिटकॉइन अवधारणा को पहले लॉन्च किया गया था, तो हम डेवलपर्स को x64
बिट आर्किटेक्चर का समर्थन करने के लिए कोई भी बदलाव करने की आवश्यकता नहीं है ।
अपडेट करें
Apple ने स्पष्ट किया है कि स्लाटिंग बिटकॉइन को सक्षम करने से स्वतंत्र होता है। मैंने इसे व्यवहार में देखा है, जहां एक गैर-बिटकोड सक्षम ऐप केवल लक्ष्य डिवाइस के लिए उपयुक्त आर्किटेक्चर के रूप में डाउनलोड किया जाएगा।
मूल
Bitcode। एक मध्यवर्ती प्रतिनिधित्व में ऐप स्टोर में प्रस्तुत करने के लिए अपने ऐप को संग्रहित करें, जिसे वितरित किए जाने पर लक्ष्य उपकरणों के लिए 64- या 32-बिट निष्पादन योग्य में संकलित किया गया है।
टुकड़ा करने की क्रिया। आर्टवर्क को एसेट कैटलॉग में शामिल किया गया है और एक प्लेटफॉर्म के लिए टैग किया गया है जो ऐप स्टोर को केवल वही वितरित करने की अनुमति देता है जो स्थापना के लिए आवश्यक है।
जिस तरह से मैंने इसे पढ़ा है, यदि आप बिटकोड का समर्थन करते हैं, तो आपके ऐप के डाउनलोडर्स को केवल अपने स्वयं के डिवाइस के लिए आवश्यक संकलित आर्किटेक्चर मिलेगा।