ENcode_BITCODE xcode 7 में क्या करता है?


262

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

जवाबों:


312

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

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

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

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

ऐप थिनिंग पर ऐप्पल डॉक्यूमेंटेशन


आपके द्वारा उद्धृत कुछ भी नहीं कहता है कि बिटकॉइन को सक्षम करने से उपयोगकर्ता के डिवाइस पर ऐप का आकार घट जाता है। Bitcode का 3x या 2x जैसे संसाधनों से कोई लेना-देना नहीं है।
user102008

1
फिर से, संसाधनों का बिटकोड के साथ कोई लेना-देना नहीं है, जो कोड के बारे में है। कोड के कुछ निश्चित आर्किटेक्चर और संसाधनों के कुछ संस्करणों के उपयोगकर्ताओं द्वारा डाउनलोड करना Slicing है, जिसका बिटकोड के साथ कोई लेना-देना नहीं है।
user102008

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

2
नहीं, स्लाइसिंग आपके एप्लिकेशन संसाधनों को विशेष उपकरणों के लिए समूहों में अलग कर रही है। बिटकोड वह है जो Apple को किसी विशेष वास्तुकला के लिए एक निष्पादन योग्य बनाने की अनुमति देता है।
जॉन शियर

2
@JonShier Apple का कहना है कि "स्लाइसिंग विभिन्न लक्ष्य उपकरणों के लिए ऐप बंडल के वेरिएंट बनाने और देने की प्रक्रिया है। एक वेरिएंट में केवल निष्पादन योग्य आर्किटेक्चर और संसाधन शामिल हैं जो लक्ष्य डिवाइस के लिए आवश्यक हैं" इसलिए स्लाइसिंग केवल निष्पादन योग्य कोड और संसाधन होते हैं। एक निश्चित डिवाइस के लिए।
कीजी

80

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

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

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

अपडेट: में यह वाक्यांश "नई विशेषताएं Xcode 7 में" एक लंबे समय के लिए सोचने के लिए मुझे बनाया Bitcode के लिए आवश्यक है स्लाइसिंग एप्लिकेशन आकार को कम करने:

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

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

Bitcode अन्य की अनुमति देता है अनुप्रयोग Thinning घटक कहा जाता स्लाइसिंग एप्लिकेशन बंडल उत्पन्न करने के लिए विशेष रूप से आर्किटेक्चर के लिए विशेष रूप से निष्पादनयोग्य साथ वेरिएंट, जैसे iPhone 5 एस संस्करण, iPad मिनी ARMv7 और इतने पर ही निष्पादन arm64 शामिल होंगे।

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

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

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

Xcode 7 संदर्भ से:

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

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


अगर मेरे पास ENABLE_BITCODE है, तो बिटकोड को शामिल किया जाएगा, लेकिन ऐप स्टोर में सबमिट करने से पहले "बिटकोड सहित" अनचेक करें?
अल्लायार

"IOS ऐप्स के लिए, बिटकोड डिफ़ॉल्ट है, लेकिन वैकल्पिक है।" हुह ..? फिर से आना..? यह वैकल्पिक नहीं है ..?
NpC0mpl3t3

@ NpC0mpl3t3 जैसा कि उत्तर में कहा गया है कि यह iOS ऐप के लिए वैकल्पिक है, लेकिन वॉचओएस और टीवीओएस ऐप के लिए आवश्यक है।
मैक्सिम पावलोव

बहुत बढ़िया मदद! यहाँ पर इसका उत्तर बिटकॉइन को निष्क्रिय करने का तरीका दिखाता है: stackoverflow.com/a/41418824/9190
गुरी

20

चूँकि सटीक सवाल है "बिटकॉइन को सक्षम क्या करता है", मैं कुछ पतले तकनीकी विवरण देना चाहूंगा जिन्हें मैंने इस प्रकार समझ लिया है। जब तक 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 उपकरणों के साथ शिप करता है।


क्या Apple का बिटकॉइन डिकम्पोज हो सकता है? यानी Apple अब हमारा सोर्स कोड देख सकता है?
22

@malcolmhall यदि यह LLVM कोड के समान है, तो केवल थोड़े। एलएलवीएम बायोटेक में टाइप जानकारी और अन्य संकेत हैं जो विघटन को बहुत आसान और अधिक उपयोगी बना सकते हैं। हालाँकि, मुझे नहीं पता कि Apple के बिटकोड में क्या है। यह संभवतः कम से कम कुछ अधिक उपयोगी है, लेकिन यह इस बिंदु पर अज्ञात है कि यह कितना उपयोगी होगा। किसी भी तरह से मुझे अत्यधिक संदेह है कि यह जानकारी के रूप में मजबूत होगा क्योंकि .NET IL C # कोड के लगभग पूर्ण
विघटन की

क्या आपने LLVM के बिटकोड फ़ाइल प्रारूप को देखा है ? मैजिक नंबर अलग है, लेकिन Apple दृढ़ता से संकेत कर रहा है कि यह बिटकोड प्रारूप है।
जेफरी थॉमस

"जो समर्थित हर आर्किटेक्चर के साथ भेज दिया गया है (यानी, डुप्लिकेट)" यह डुप्लिकेट नहीं है, क्योंकि बिटकॉइन प्रत्येक मच-ओ स्लाइस के लिए अलग है
एलेक्सडेनिसोव

2
Twitter.com/mistydemeo/status/644555663373307904 के अनुसार , xar!Apple का संग्रह फ़ाइल स्वरूप है।
रेकिंग

14

बिटकोड (iOS, watchOS)

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


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

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

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

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

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


@ user102008 स्लाइसिंग बिटकोड को सक्षम करने का एक परिणाम है
keji

@kdogisthebest: नहीं, यह नहीं है। कहीं ऐसा नहीं है कि कहते हैं। और मैंने डब्ल्यूडब्ल्यूडीसी वीडियो को स्लाइसिंग पर देखा है, और इसमें बिटकॉइन को सक्षम करने का उल्लेख नहीं है।
user102008

इंद्र कुमार राठौर जब एंटरप्राइज ऐप स्टोर की बात करते हैं तो यह कैसे संभालता है? एंटरप्राइज़ ऐप स्टोर इस सुविधा का समर्थन करता है?
बांधिथ

@ एडमिथ कोई एंटरप्राइज ऐप स्टोर नहीं है, हमें अपने सर्वर पर ऐप रखना होगा। मुझे यकीन नहीं है कि ऐप थिनिंग एंटरप्राइज़ ऐप पर काम करेगा या नहीं। लेकिन जहाँ तक मेरी जानकारी है, यह एंटरप्राइज़ ऐप्स के लिए नहीं होना चाहिए
इंद्र कुमार राठौर

कृपया अपने उत्तर में छवि अपडेट करें, यह बिटकोड से संबंधित नहीं है।
hsafarya

5

अपडेट करें

Apple ने स्पष्ट किया है कि स्लाटिंग बिटकॉइन को सक्षम करने से स्वतंत्र होता है। मैंने इसे व्यवहार में देखा है, जहां एक गैर-बिटकोड सक्षम ऐप केवल लक्ष्य डिवाइस के लिए उपयुक्त आर्किटेक्चर के रूप में डाउनलोड किया जाएगा।

मूल

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

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

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

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


App Thinning गाइड ( developer.apple.com/library/prerelease/ios/documentation/IDEs/… ) "स्लाइसिंग विभिन्न लक्ष्य उपकरणों के लिए ऐप बंडल के वेरिएंट बनाने और वितरित करने की प्रक्रिया है। एक वेरिएंट में केवल निष्पादन योग्य आर्किटेक्चर होता है। और लक्ष्य डिवाइस के लिए आवश्यक संसाधन। " आपके एप्लिकेशन के डाउनलोडर्स केवल उनका आर्किटेक्चर प्राप्त करना स्लाइसिंग का हिस्सा हैं।
user102008
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.