এক্সকোড in তে ENABLE_BITCODE কী করবে?


262

এম্বেড বিটকোড শব্দটি নিয়ে আমার সমস্যা আছে।
এম্বেড বিটকোড কি? নতুন এক্সকোডে
কখন সক্ষম করবেন ENABLE_BITCODE? এক্সকোড 7 এ
সক্রিয় করা অবস্থায় বাইনারিটির কী হবে ENABLE_BITCODE?

উত্তর:


312

বিটকোড কোডের ধরণকে বোঝায়: "এলএলভিএম বিটকোড" যা আইটিউনস কানেক্টে প্রেরিত হয়। এটি অ্যাপ্লিকেশনগুলিকে আরও অনুকূলিতকরণের জন্য নির্দিষ্ট গণনাগুলি ব্যবহার করার অনুমতি দেয় (উদা: সম্ভবত সম্পাদনযোগ্য আকারগুলি হ্রাস করতে পারে)। যদি অ্যাপলকে আপনার নির্বাহযোগ্য পরিবর্তন করতে হয় তবে কোনও নতুন বিল্ড আপলোড না করে তারা এটি করতে পারে।

এটি এর থেকে পৃথক হয়: স্লাইসিং যা অ্যাপলের ডিভাইসের রেজোলিউশন এবং আর্কিটেকচারের ভিত্তিতে কোনও ব্যবহারকারীর ডিভাইসের জন্য আপনার অ্যাপ্লিকেশনটিকে অনুকূলকরণের প্রক্রিয়া। কাটানোর জন্য বিটকোডের দরকার হয় না। (উদা: কেবল 5s এর 2x চিত্র সহ)

অ্যাপ থিনিং হ'ল স্লাইসিং, বিটকোড এবং অন-চাহিদা সংস্থানগুলির সংমিশ্রণ

বিটকোড একটি সংকলিত প্রোগ্রামের মধ্যবর্তী প্রতিনিধিত্ব। বিটকোডযুক্ত আইটিউনস কানেক্টে আপনি যে অ্যাপ্লিকেশনগুলি আপলোড করেন সেগুলি অ্যাপ স্টোরে সংকলন ও লিঙ্ক করা হবে। বিটকোড অন্তর্ভুক্ত অ্যাপলটিকে ভবিষ্যতে আপনার অ্যাপ্লিকেশনটির নতুন সংস্করণ স্টোরটিতে জমা দেওয়ার প্রয়োজন ছাড়াই ভবিষ্যতে আপনার অ্যাপ বাইনারিটিকে পুনরায় অনুকূল করতে দেয়।

অ্যাপ পাতলা উপর অ্যাপল ডকুমেন্টেশন


আপনি যেটুকু উদ্ধৃত করেছেন তাতে কিছুই নেই যে বিটকোড সক্ষম করা ব্যবহারকারীর ডিভাইসে অ্যাপের আকার হ্রাস করে। 3x বা 2x এর মতো সংস্থার সাথে বিটকোডের কোনও সম্পর্ক নেই।
ব্যবহারকারী 102008

1
আবার, কোড সম্পর্কে বিটকোডের সাথে সংস্থানগুলির কোনও যোগসূত্র নেই। কোডের নির্দিষ্ট কিছু আর্কিটেকচার এবং সংস্থার নির্দিষ্ট সংস্করণগুলির ব্যবহারকারীদের দ্বারা ডাউনলোড করা স্লাইসিং, এর বিটকোডের সাথে কোনও সম্পর্ক নেই।
ব্যবহারকারী 102008

7
আমি দ্বিমত পোষণ করছি যে এটি অ্যাপলটিকে আপনার অ্যাপের আকার হ্রাস করতে দেয়। কোথাও এটি বলে না। এটি বলছে "ভবিষ্যতে অ্যাপলটিকে আপনার অ্যাপ্লিকেশনটির নতুন সংস্করণ স্টোরটিতে জমা করার প্রয়োজন ছাড়াই ভবিষ্যতে আপনার অ্যাপ্লিকেশনটিকে বাইনারি পুনরায় অপ্টিমাইজ করার অনুমতি দেবে" যার অর্থ আমি মনে করি এটি অ্যাপলকে নতুন আর্কিটেকচারের জন্য আপনার অ্যাপ্লিকেশনটিকে পুনরায় সংকলন করার অনুমতি দেয় যদি এই আর্কিটেকচারটি অন্তর্ভুক্ত করে কোনও নতুন সংস্করণ জমা দেওয়ার দরকার ছাড়াই একটি নতুন আর্কিটেকচার সহ একটি নতুন ডিভাইস বেরিয়ে আসে।
ব্যবহারকারী 102008

2
না, স্লাইসিং আপনার অ্যাপ্লিকেশন সংস্থানগুলিকে নির্দিষ্ট ডিভাইসের জন্য গ্রুপগুলিতে আলাদা করছে। বিটকোড হ'ল অ্যাপল নির্দিষ্ট আর্কিটেকচারের জন্য নির্বাহযোগ্য উত্পাদন করতে দেয়।
জন শিয়ার

2
@ জোনশিয়ার অ্যাপল বলেছে "স্লাইসিং হ'ল বিভিন্ন লক্ষ্য ডিভাইসের জন্য অ্যাপ্লিকেশন বান্ডিলের রূপগুলি সরবরাহ ও বিতরণ করার প্রক্রিয়া A একটি নির্দিষ্ট ডিভাইসের জন্য।
কেজি

80

এম্বেড বিটকোড কি?

ডক্স অনুসারে :

বিটকোড একটি সংকলিত প্রোগ্রামের মধ্যবর্তী প্রতিনিধিত্ব। বিটকোডযুক্ত আইটিউনস কানেক্টে আপনি যে অ্যাপ্লিকেশনগুলি আপলোড করেন সেগুলি অ্যাপ স্টোরে সংকলন ও লিঙ্ক করা হবে। বিটকোড অন্তর্ভুক্ত অ্যাপলটিকে ভবিষ্যতে আপনার অ্যাপ্লিকেশনটির নতুন সংস্করণ স্টোরটিতে জমা দেওয়ার প্রয়োজন ছাড়াই ভবিষ্যতে আপনার অ্যাপ বাইনারিটিকে পুনরায় অনুকূল করতে দেয়।

আপডেট: " এক্সকোড 7-এ নতুন বৈশিষ্ট্যগুলি" এই বাক্যটি আমাকে দীর্ঘকাল ধরে ভাবতে বাধ্য করেছে যে অ্যাপ্লিকেশনটির আকার হ্রাস করতে স্লাইসিংয়ের জন্য বিটকোডের প্রয়োজন :

আপনি যখন অ্যাপ স্টোরে জমা দেওয়ার জন্য সংরক্ষণাগার সংগ্রহ করেন, এক্সকোড আপনার অ্যাপটিকে একটি মধ্যবর্তী উপস্থাপনায় সংকলন করবে। অ্যাপ স্টোরটি তখন বিটকোডটিকে 64 বা 32 বিট এক্সিকিউটেবলের জন্য প্রয়োজনীয় হিসাবে সংকলন করবে।

তবে এটি সত্য নয়, বিটকোড এবং স্লাইসিং স্বতন্ত্রভাবে কাজ করে: স্লাইসিং অ্যাপের আকার হ্রাস করা এবং অ্যাপ্লিকেশন বান্ডিলের রূপগুলি উত্পন্ন করার বিষয়ে এবং বিটকোড নির্দিষ্ট বাইনারি অপ্টিমাইজেশান সম্পর্কে। আমি নন-বিটকোড অ্যাপ্লিকেশনগুলির এক্সিকিউটেবলের অন্তর্ভুক্ত আর্কিটেকচারগুলি যাচাই করে এবং এটিতে কেবল প্রয়োজনীয়গুলি অন্তর্ভুক্ত করে এটি যাচাই করেছি।

Bitcode অন্যান্য পারবেন অ্যাপ তরলীকরণ উপাদান নামক slicing অ্যাপ্লিকেশন বান্ডিল জেনারেট করতে বিশেষ আর্কিটেকচারের জন্য নির্দিষ্ট এক্সেকিউটেবল সঙ্গে রূপ, যেমন আইফোন 5s বৈকল্পিক, আইপ্যাড মিনি armv7 ইত্যাদি মাত্র এক্সিকিউটেবল arm64 অন্তর্ভুক্ত করা হবে।

কখন নতুন এক্সকোডে ENABLE_BITCODE সক্ষম করবেন?

আইওএস অ্যাপ্লিকেশনগুলির জন্য, বিটকোডটি ডিফল্ট তবে alচ্ছিক। আপনি যদি বিটকোড সরবরাহ করেন তবে অ্যাপ্লিকেশন বান্ডলে সমস্ত অ্যাপস এবং ফ্রেমওয়ার্কগুলিকে বিটকোড অন্তর্ভুক্ত করা দরকার to ওয়াচওএস এবং টিভিএস অ্যাপ্লিকেশনের জন্য, বিটকোড প্রয়োজন।

ENABLE_BITCODE নতুন এক্সকোডে সক্ষম হলে বাইনারিটির কী হবে?

এক্সকোড 7 রেফারেন্স থেকে:

এই সেটিংটি সক্রিয় করা ইঙ্গিত দেয় যে প্ল্যাটফর্ম এবং আর্কিটেকচারের জন্য সংকলনের সময় লক্ষ্য বা প্রকল্পটি বিটকোড তৈরি করা উচিত যা এটি সমর্থন করে। সংরক্ষণাগার বিল্ডগুলির জন্য, অ্যাপ স্টোরে জমা দেওয়ার জন্য লিঙ্কযুক্ত বাইনারে বিটকোড তৈরি করা হবে। অন্যান্য বিল্ডগুলির জন্য, সংকলক এবং লিঙ্কার কোডটি বিটকোড জেনারেশনের প্রয়োজনীয়তার সাথে মেনে চলে কিনা তা খতিয়ে দেখবে, তবে প্রকৃত বিটকোড তৈরি করবে না।

এখানে কয়েকটি লিঙ্ক রয়েছে যা বিটকোডের গভীর বোঝার জন্য সহায়তা করবে :


আমার কাছে ENABLE_BITCODE থাকলে তবে অ্যাপ স্টোরে জমা দেওয়ার আগে "বিটকোড সহ" চেক না করা হলে কী বিটকোড অন্তর্ভুক্ত করা হবে?
এ্যালায়ার

"আইওএস অ্যাপ্লিকেশনগুলির জন্য, বিটকোডটি ডিফল্ট তবে ,চ্ছিক।" হাহ ..? আবার আসবেন..? এটি OR হয় না ptionচ্ছিক ..?
NpC0mpl3t3

উত্তরে বর্ণিত হিসাবে @ এনপিসি0 এমপি 3 টি 3 এটি আইওএস অ্যাপ্লিকেশনগুলির জন্য alচ্ছিক তবে ওয়াচওএস এবং টিভিএস অ্যাপ্লিকেশানের জন্য প্রয়োজনীয়।
ম্যাক্সিম পাভলভ

দুর্দান্ত সাহায্য! এই উত্তরটি এখানে উপর দেখায় কিভাবে নিষ্ক্রিয় bitcode হবে: stackoverflow.com/a/41418824/9190
Guerry

20

যেহেতু সঠিক প্রশ্নটি "বিটকোডটি সক্ষম করে" কী, তাই আমি এখনও পর্যন্ত কিছুটা পাতলা প্রযুক্তিগত বিবরণ দিতে চাই। অ্যাপল এই সংকলকটির উত্স কোড প্রকাশ না করা পর্যন্ত এর বেশিরভাগই 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 বিট কোড সহ চর্বিযুক্ত বাইনারিগুলি পাঠায়।


অ্যাপলের বিটকোডটি কি পচে যেতে পারে? অর্থাৎ অ্যাপল এখন আমাদের উত্স কোডটি দেখতে পাবে?
মালহাল

@ ম্যালকমল যদি এটি এলএলভিএম কোডের সাথে সাদৃশ্য থাকে তবে কেবল কিন্ডা। এলএলভিএম বাইটকোডে টাইপ সম্পর্কিত তথ্য এবং অন্যান্য ইঙ্গিত রয়েছে যা পচন রোধকে আরও সহজ এবং আরও দরকারী করে তুলতে পারে। তবে, আমি জানি না অ্যাপলের বিটকোডে কী আছে। এটি সম্ভবত কমপক্ষে আরও কিছু কার্যকর, তবে এটি কতটা কার্যকর হবে তা এই মুহূর্তে অজানা। যেভাবেই হোক আমি অত্যন্ত সন্দেহ করি এটি তথ্যের মতো শক্তিশালী হবে কীভাবে বলুন। নেট আইএল সি # কোডের প্রায় নিখুঁত
ক্ষয়কে

আপনি কি এলএলভিএমের বিটকোড ফাইল ফর্ম্যাটটি দেখেছেন ? ম্যাজিক নম্বরটি আলাদা, তবে অ্যাপল দৃ strongly়ভাবে ইঙ্গিত দিচ্ছে এটি বিটকোড ফর্ম্যাট।
জেফারি থমাস

"যা প্রতিটি আর্কিটেকচার সমর্থিত (যেমন, সদৃশ) এর সাথে প্রেরণ করা হয়" এটি সদৃশ নয়, কারণ বিটকোড প্রতিটি মাচ-ও স্লাইসের জন্য আলাদা
অ্যালেক্সডেনিসভ

2
টুইটার.com / mistydemeo / status / 644555663373307904 অনুসারে , xar!অ্যাপলের সংরক্ষণাগার ফাইল ফর্ম্যাট।
17:58

14

বিটকোড (আইওএস, ওয়াচওএস)

বিটকোড একটি সংকলিত প্রোগ্রামের মধ্যবর্তী প্রতিনিধিত্ব। বিটকোডযুক্ত আইটিউনস কানেক্টে আপনি যে অ্যাপ্লিকেশনগুলি আপলোড করেন সেগুলি অ্যাপ স্টোরে সংকলন ও লিঙ্ক করা হবে। বিটকোড অন্তর্ভুক্ত অ্যাপলটিকে ভবিষ্যতে আপনার অ্যাপ্লিকেশনটির নতুন সংস্করণ স্টোরটিতে জমা দেওয়ার প্রয়োজন ছাড়াই ভবিষ্যতে আপনার অ্যাপ বাইনারিটিকে পুনরায় অনুকূল করতে দেয়।


মূলত এই ধারণাটি জাভাটির সাথে কিছুটা অনুরূপ যেখানে বাইট কোডটি বিভিন্ন জেভিএম-এর উপর চালিত হয় এবং এই ক্ষেত্রে বিটকোডটি আইটিউন স্টোরে স্থাপন করা হয় এবং বিভিন্ন প্ল্যাটফর্মগুলিতে (ডিভাইস) মধ্যবর্তী কোড দেওয়ার পরিবর্তে এটি সংকলিত কোড সরবরাহ করে যা প্রয়োজন নেই চালানোর জন্য কোনও ভার্চুয়াল মেশিন।

সুতরাং আমাদের একবার বিটকোড তৈরি করতে হবে এবং এটি বিদ্যমান বা আগত ডিভাইসের জন্য উপলব্ধ হবে। এটি তাদের প্রতিটি প্ল্যাটফর্মের সাথে সামঞ্জস্যপূর্ণ করে তুলতে এটি অ্যাপলের মাথা ব্যথা।

নতুন প্ল্যাটফর্মগুলিকে সমর্থন করার জন্য দেবদের পরিবর্তন করতে হবে না এবং অ্যাপটি আবার জমা দিতে হবে না submit

আসুন আইফোন 5 এর উদাহরণটি নেওয়া যাক যখন অ্যাপল এতে x64চিপটি প্রবর্তন করে। যদিও x86অ্যাপ্লিকেশনগুলি x64আর্কিটেকচারের সাথে সম্পূর্ণ সুসংগত ছিল তবে x64প্ল্যাটফর্মটিকে পুরোপুরিভাবে ব্যবহার করতে বিকাশকারীকে স্থাপত্য বা কিছু কোড পরিবর্তন করতে হবে change একবার কাজটি শেষ হয়ে গেলে অ্যাপটি স্টোরটিতে পর্যালোচনার জন্য জমা দেওয়া হয়।

যদি এই বিটকোড ধারণাটি আগেই চালু করা হয়েছিল তবে আমাদের বিকাশকারীদের x64বিট আর্কিটেকচার সমর্থন করার জন্য কোনও পরিবর্তন করতে হবে না ।


@ ব্যবহারকারী 102008 স্লাইসিং বিটকোড
কেজি

@ কেডোগিস্টেবেস্ট: না না তাই না। কোথাও এটি বলে না। এবং আমি কাটানোর বিষয়ে ডাব্লুডাব্লুডিসি ভিডিও দেখেছি এবং এটি বিটকোড সক্ষম করে এমন প্রতিটি উল্লেখই করে না।
ব্যবহারকারী 102008

ইন্দির কুমার রাঠোর যখন এন্টারপ্রাইজ অ্যাপ স্টোর এ আসে তখন এটি কীভাবে পরিচালিত হয়? এন্টারপ্রাইজ অ্যাপ স্টোর কি এই বৈশিষ্ট্যটিকে সমর্থন করে?
দামিথ

@ ডিডিথএইচ এন্টারপ্রাইজ অ্যাপ স্টোর নেই, আমাদের সার্ভারে অ্যাপস রাখতে হবে। অ্যাপ্লিকেশন পাতলা এন্টারপ্রাইজ অ্যাপ্লিকেশনগুলিতে কাজ করবে কিনা তা আমি নিশ্চিত নই। তবে আমার জ্ঞান হিসাবে এটি এন্টারপ্রাইজ অ্যাপ্লিকেশনগুলির জন্য হওয়া উচিত নয়
ইন্দার কুমার রাঠোর

আপনার উত্তরে চিত্র আপডেট করুন, এটি বিটকোডের সাথে সম্পর্কিত নয়।
hsafarya

5

হালনাগাদ

অ্যাপল স্পষ্ট করে জানিয়েছে বিস্কোড সক্ষম করার চেয়ে কাটা আলাদা হয়। আমি এটি বাস্তবে পর্যবেক্ষণ করেছি এবং যেখানে একটি নন-বিটকোড সক্ষম অ্যাপ্লিকেশনটি কেবলমাত্র লক্ষ্য ডিভাইসের জন্য উপযুক্ত আর্কিটেকচার হিসাবে ডাউনলোড করা হবে।

মূল

আরও নির্দিষ্টভাবে :

Bitcode। মধ্যবর্তী উপস্থাপনায় অ্যাপ্লিকেশন স্টোরটিতে জমা দেওয়ার জন্য আপনার অ্যাপ্লিকেশন সংরক্ষণাগারভুক্ত করুন, যা সরবরাহের সময় লক্ষ্য ডিভাইসগুলির জন্য 64৪- or বা 32-বিট এক্সিকিউটেবলের মধ্যে সংকলিত হয়।

Slicing। আর্টওয়ার্ক অ্যাসেট ক্যাটালগের সাথে সংযুক্ত এবং একটি প্ল্যাটফর্মের জন্য ট্যাগ করা অ্যাপ স্টোরটিকে কেবলমাত্র ইনস্টলেশনের জন্য প্রয়োজনীয় যা সরবরাহ করতে দেয়।

আমি যেভাবে এটি পড়েছি, আপনি যদি বিটকোড সমর্থন করেন তবে আপনার অ্যাপের ডাউনলোডাররা কেবল তাদের নিজস্ব ডিভাইসের জন্য প্রয়োজনীয় সংকলিত আর্কিটেকচারটি পাবেন get


অ্যাপ থিনিং গাইডে ( ডেভেলপার.এপ্লে. com/লিবারি / প্রিরিলেস / আইস / ডকুমেন্টেশন / আইডিইএস / ২ ) "স্লাইচিং হ'ল বিভিন্ন টার্গেট ডিভাইসের জন্য অ্যাপ্লিকেশন বান্ডিলের রূপগুলি সরবরাহ ও বিতরণ করার প্রক্রিয়া। একটি রূপটিতে কেবল এক্সিকিউটেবল আর্কিটেকচার থাকে এবং সংস্থান ডিভাইসের জন্য প্রয়োজনীয় সংস্থানসমূহ "। আপনার অ্যাপ্লিকেশনটির ডাউনলোডাররা কেবল তাদের আর্কিটেকচার পাচ্ছেন স্লাইসিংয়ের অংশ।
ব্যবহারকারী 102008
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.