উত্তর:
বিটকোড কোডের ধরণকে বোঝায়: "এলএলভিএম বিটকোড" যা আইটিউনস কানেক্টে প্রেরিত হয়। এটি অ্যাপ্লিকেশনগুলিকে আরও অনুকূলিতকরণের জন্য নির্দিষ্ট গণনাগুলি ব্যবহার করার অনুমতি দেয় (উদা: সম্ভবত সম্পাদনযোগ্য আকারগুলি হ্রাস করতে পারে)। যদি অ্যাপলকে আপনার নির্বাহযোগ্য পরিবর্তন করতে হয় তবে কোনও নতুন বিল্ড আপলোড না করে তারা এটি করতে পারে।
এটি এর থেকে পৃথক হয়: স্লাইসিং যা অ্যাপলের ডিভাইসের রেজোলিউশন এবং আর্কিটেকচারের ভিত্তিতে কোনও ব্যবহারকারীর ডিভাইসের জন্য আপনার অ্যাপ্লিকেশনটিকে অনুকূলকরণের প্রক্রিয়া। কাটানোর জন্য বিটকোডের দরকার হয় না। (উদা: কেবল 5s এর 2x চিত্র সহ)
অ্যাপ থিনিং হ'ল স্লাইসিং, বিটকোড এবং অন-চাহিদা সংস্থানগুলির সংমিশ্রণ
বিটকোড একটি সংকলিত প্রোগ্রামের মধ্যবর্তী প্রতিনিধিত্ব। বিটকোডযুক্ত আইটিউনস কানেক্টে আপনি যে অ্যাপ্লিকেশনগুলি আপলোড করেন সেগুলি অ্যাপ স্টোরে সংকলন ও লিঙ্ক করা হবে। বিটকোড অন্তর্ভুক্ত অ্যাপলটিকে ভবিষ্যতে আপনার অ্যাপ্লিকেশনটির নতুন সংস্করণ স্টোরটিতে জমা দেওয়ার প্রয়োজন ছাড়াই ভবিষ্যতে আপনার অ্যাপ বাইনারিটিকে পুনরায় অনুকূল করতে দেয়।
ডক্স অনুসারে :
বিটকোড একটি সংকলিত প্রোগ্রামের মধ্যবর্তী প্রতিনিধিত্ব। বিটকোডযুক্ত আইটিউনস কানেক্টে আপনি যে অ্যাপ্লিকেশনগুলি আপলোড করেন সেগুলি অ্যাপ স্টোরে সংকলন ও লিঙ্ক করা হবে। বিটকোড অন্তর্ভুক্ত অ্যাপলটিকে ভবিষ্যতে আপনার অ্যাপ্লিকেশনটির নতুন সংস্করণ স্টোরটিতে জমা দেওয়ার প্রয়োজন ছাড়াই ভবিষ্যতে আপনার অ্যাপ বাইনারিটিকে পুনরায় অনুকূল করতে দেয়।
আপডেট: " এক্সকোড 7-এ নতুন বৈশিষ্ট্যগুলি" এই বাক্যটি আমাকে দীর্ঘকাল ধরে ভাবতে বাধ্য করেছে যে অ্যাপ্লিকেশনটির আকার হ্রাস করতে স্লাইসিংয়ের জন্য বিটকোডের প্রয়োজন :
আপনি যখন অ্যাপ স্টোরে জমা দেওয়ার জন্য সংরক্ষণাগার সংগ্রহ করেন, এক্সকোড আপনার অ্যাপটিকে একটি মধ্যবর্তী উপস্থাপনায় সংকলন করবে। অ্যাপ স্টোরটি তখন বিটকোডটিকে 64 বা 32 বিট এক্সিকিউটেবলের জন্য প্রয়োজনীয় হিসাবে সংকলন করবে।
তবে এটি সত্য নয়, বিটকোড এবং স্লাইসিং স্বতন্ত্রভাবে কাজ করে: স্লাইসিং অ্যাপের আকার হ্রাস করা এবং অ্যাপ্লিকেশন বান্ডিলের রূপগুলি উত্পন্ন করার বিষয়ে এবং বিটকোড নির্দিষ্ট বাইনারি অপ্টিমাইজেশান সম্পর্কে। আমি নন-বিটকোড অ্যাপ্লিকেশনগুলির এক্সিকিউটেবলের অন্তর্ভুক্ত আর্কিটেকচারগুলি যাচাই করে এবং এটিতে কেবল প্রয়োজনীয়গুলি অন্তর্ভুক্ত করে এটি যাচাই করেছি।
Bitcode অন্যান্য পারবেন অ্যাপ তরলীকরণ উপাদান নামক slicing অ্যাপ্লিকেশন বান্ডিল জেনারেট করতে বিশেষ আর্কিটেকচারের জন্য নির্দিষ্ট এক্সেকিউটেবল সঙ্গে রূপ, যেমন আইফোন 5s বৈকল্পিক, আইপ্যাড মিনি armv7 ইত্যাদি মাত্র এক্সিকিউটেবল arm64 অন্তর্ভুক্ত করা হবে।
আইওএস অ্যাপ্লিকেশনগুলির জন্য, বিটকোডটি ডিফল্ট তবে alচ্ছিক। আপনি যদি বিটকোড সরবরাহ করেন তবে অ্যাপ্লিকেশন বান্ডলে সমস্ত অ্যাপস এবং ফ্রেমওয়ার্কগুলিকে বিটকোড অন্তর্ভুক্ত করা দরকার to ওয়াচওএস এবং টিভিএস অ্যাপ্লিকেশনের জন্য, বিটকোড প্রয়োজন।
এক্সকোড 7 রেফারেন্স থেকে:
এই সেটিংটি সক্রিয় করা ইঙ্গিত দেয় যে প্ল্যাটফর্ম এবং আর্কিটেকচারের জন্য সংকলনের সময় লক্ষ্য বা প্রকল্পটি বিটকোড তৈরি করা উচিত যা এটি সমর্থন করে। সংরক্ষণাগার বিল্ডগুলির জন্য, অ্যাপ স্টোরে জমা দেওয়ার জন্য লিঙ্কযুক্ত বাইনারে বিটকোড তৈরি করা হবে। অন্যান্য বিল্ডগুলির জন্য, সংকলক এবং লিঙ্কার কোডটি বিটকোড জেনারেশনের প্রয়োজনীয়তার সাথে মেনে চলে কিনা তা খতিয়ে দেখবে, তবে প্রকৃত বিটকোড তৈরি করবে না।
এখানে কয়েকটি লিঙ্ক রয়েছে যা বিটকোডের গভীর বোঝার জন্য সহায়তা করবে :
যেহেতু সঠিক প্রশ্নটি "বিটকোডটি সক্ষম করে" কী, তাই আমি এখনও পর্যন্ত কিছুটা পাতলা প্রযুক্তিগত বিবরণ দিতে চাই। অ্যাপল এই সংকলকটির উত্স কোড প্রকাশ না করা পর্যন্ত এর বেশিরভাগই 100% নিশ্চিততার সাথে সন্ধান করা অসম্ভব
প্রথমত, অ্যাপলের বিটকোডটি এলএলভিএম বাইটকোডের মতো একই জিনিস হিসাবে উপস্থিত হবে না। কমপক্ষে, আমি তাদের মধ্যে কোনও সাদৃশ্য বের করতে সক্ষম হইনি। এটিতে মালিকানাধীন শিরোনাম রয়েছে বলে মনে হয় (সর্বদা "xar!" দিয়ে শুরু হয়) এবং সম্ভবত কিছু লিঙ্ক-টাইম রেফারেন্স যাদু যা ডেটা ডুপ্লিকেশনগুলি প্রতিরোধ করে। আপনি যদি হার্ডকোডযুক্ত স্ট্রিংটি লিখে রাখেন তবে এই স্ট্রিংটি কেবলমাত্র ডেটাতে একবারে রাখা হবে, তার চেয়ে দ্বিগুণ প্রত্যাশার চেয়ে যদি এটি স্বাভাবিক এলএলভিএম বাইকোড হয়।
দ্বিতীয়ত, বিটকোডটি বাইনারি সংরক্ষণাগারে কোনও আলাদা আর্কিটেকচার হিসাবে প্রত্যাশিত হিসাবে সত্যই প্রেরণ করা হয় না। এটি x86 এবং এআরএমকে একটি বাইনারি (FAT সংরক্ষণাগার) এ রাখা হিসাবে একইভাবে পাঠানো হয় না। পরিবর্তে, তারা "__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 = "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)"}
আইআর-তে থাকা ডেটা অ্যারেটিও অপটিমাইজেশন এবং জঞ্জালের অন্যান্য কোড জেনারেশন সেটিংসের উপর নির্ভর করে পরিবর্তিত হয়। কোন ফর্ম্যাট বা এটিতে কিছু আছে তা আমার কাছে সম্পূর্ণ অজানা।
সম্পাদনা করুন:
টুইটারে ইঙ্গিতটি অনুসরণ করে, আমি এটি পুনরায় দেখা এবং এটি নিশ্চিত করার সিদ্ধান্ত নিয়েছি। আমি এই ব্লগ পোস্টটি অনুসরণ করেছি এবং অ্যাপল আর্কাইভ বাইনারিটি ম্যাচও এক্সিকিউটেবলের বাইরে আনতে তার বিটকোড এক্সট্র্যাক্টর সরঞ্জামটি ব্যবহার করেছি। এবং এক্সার ইউটিলিটি সহ অ্যাপল সংরক্ষণাগারটি বের করার পরে, আমি এটি পেয়েছি (অবশ্যই llvm-dis সহ পাঠ্যে রূপান্তরিত)
; 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 দিয়ে সংকলন করলে ভিন্ন হবে।
এবং কেবল অতিরিক্ত ক্রেডিট পাওয়ার জন্য, আমি এটিও নিশ্চিত করেছিলাম যে আপনি যখন কোনও আইওএস 9 অ্যাপ্লিকেশন ডাউনলোড করেন তখন অ্যাপল ডিভাইসে বিটকোড পাঠায় না। এগুলিতে এমন অনেকগুলি অদ্ভুত বিভাগ রয়েছে যা আমি __LINKEDIT এর মতো স্বীকৃত নই, তবে সেগুলিতে __LLVM .__ বান্ডিল অন্তর্ভুক্ত নেই এবং এইভাবে কোনও ডিভাইসে চলমান চূড়ান্ত বাইনারিতে বিটকোড অন্তর্ভুক্ত বলে মনে হয় না। অদ্ভুতভাবে যথেষ্ট, অ্যাপল এখনও আইওএস 8 ডিভাইসে পৃথক 32/64 বিট কোড সহ চর্বিযুক্ত বাইনারিগুলি পাঠায়।
xar!
অ্যাপলের সংরক্ষণাগার ফাইল ফর্ম্যাট।
বিটকোড (আইওএস, ওয়াচওএস)
বিটকোড একটি সংকলিত প্রোগ্রামের মধ্যবর্তী প্রতিনিধিত্ব। বিটকোডযুক্ত আইটিউনস কানেক্টে আপনি যে অ্যাপ্লিকেশনগুলি আপলোড করেন সেগুলি অ্যাপ স্টোরে সংকলন ও লিঙ্ক করা হবে। বিটকোড অন্তর্ভুক্ত অ্যাপলটিকে ভবিষ্যতে আপনার অ্যাপ্লিকেশনটির নতুন সংস্করণ স্টোরটিতে জমা দেওয়ার প্রয়োজন ছাড়াই ভবিষ্যতে আপনার অ্যাপ বাইনারিটিকে পুনরায় অনুকূল করতে দেয়।
মূলত এই ধারণাটি জাভাটির সাথে কিছুটা অনুরূপ যেখানে বাইট কোডটি বিভিন্ন জেভিএম-এর উপর চালিত হয় এবং এই ক্ষেত্রে বিটকোডটি আইটিউন স্টোরে স্থাপন করা হয় এবং বিভিন্ন প্ল্যাটফর্মগুলিতে (ডিভাইস) মধ্যবর্তী কোড দেওয়ার পরিবর্তে এটি সংকলিত কোড সরবরাহ করে যা প্রয়োজন নেই চালানোর জন্য কোনও ভার্চুয়াল মেশিন।
সুতরাং আমাদের একবার বিটকোড তৈরি করতে হবে এবং এটি বিদ্যমান বা আগত ডিভাইসের জন্য উপলব্ধ হবে। এটি তাদের প্রতিটি প্ল্যাটফর্মের সাথে সামঞ্জস্যপূর্ণ করে তুলতে এটি অ্যাপলের মাথা ব্যথা।
নতুন প্ল্যাটফর্মগুলিকে সমর্থন করার জন্য দেবদের পরিবর্তন করতে হবে না এবং অ্যাপটি আবার জমা দিতে হবে না submit
আসুন আইফোন 5 এর উদাহরণটি নেওয়া যাক যখন অ্যাপল এতে x64
চিপটি প্রবর্তন করে। যদিও x86
অ্যাপ্লিকেশনগুলি x64
আর্কিটেকচারের সাথে সম্পূর্ণ সুসংগত ছিল তবে x64
প্ল্যাটফর্মটিকে পুরোপুরিভাবে ব্যবহার করতে বিকাশকারীকে স্থাপত্য বা কিছু কোড পরিবর্তন করতে হবে change একবার কাজটি শেষ হয়ে গেলে অ্যাপটি স্টোরটিতে পর্যালোচনার জন্য জমা দেওয়া হয়।
যদি এই বিটকোড ধারণাটি আগেই চালু করা হয়েছিল তবে আমাদের বিকাশকারীদের x64
বিট আর্কিটেকচার সমর্থন করার জন্য কোনও পরিবর্তন করতে হবে না ।
হালনাগাদ
অ্যাপল স্পষ্ট করে জানিয়েছে বিস্কোড সক্ষম করার চেয়ে কাটা আলাদা হয়। আমি এটি বাস্তবে পর্যবেক্ষণ করেছি এবং যেখানে একটি নন-বিটকোড সক্ষম অ্যাপ্লিকেশনটি কেবলমাত্র লক্ষ্য ডিভাইসের জন্য উপযুক্ত আর্কিটেকচার হিসাবে ডাউনলোড করা হবে।
মূল
Bitcode। মধ্যবর্তী উপস্থাপনায় অ্যাপ্লিকেশন স্টোরটিতে জমা দেওয়ার জন্য আপনার অ্যাপ্লিকেশন সংরক্ষণাগারভুক্ত করুন, যা সরবরাহের সময় লক্ষ্য ডিভাইসগুলির জন্য 64৪- or বা 32-বিট এক্সিকিউটেবলের মধ্যে সংকলিত হয়।
Slicing। আর্টওয়ার্ক অ্যাসেট ক্যাটালগের সাথে সংযুক্ত এবং একটি প্ল্যাটফর্মের জন্য ট্যাগ করা অ্যাপ স্টোরটিকে কেবলমাত্র ইনস্টলেশনের জন্য প্রয়োজনীয় যা সরবরাহ করতে দেয়।
আমি যেভাবে এটি পড়েছি, আপনি যদি বিটকোড সমর্থন করেন তবে আপনার অ্যাপের ডাউনলোডাররা কেবল তাদের নিজস্ব ডিভাইসের জন্য প্রয়োজনীয় সংকলিত আর্কিটেকচারটি পাবেন get