Bitcode iOS ایپلیکیشن کے کمپائلیشن مرحلے پر پروگرام کی ایک انٹرمیڈیٹ نمائندگی ہے۔ مشین کوڈ کے برعکس، Bitcode کسی مخصوص پروسیسر آرکیٹیکچر سے منسلک نہیں ہوتا۔ Apple Developer Documentation کے مطابق، App Store ہدف آرکیٹیکچر کے لیے Bitcode کو دوبارہ کمپائل کر سکتا ہے، جس سے کارکردگی بہتر ہوتی ہے اور انسٹالیشن فائل کا سائز کم ہوتا ہے۔ ڈیولپر App Store میں Bitcode بھیجتا ہے، اور اسٹور خود ہر ڈیوائس کی قسم کے لیے ایک بہتر بنائی گئی بائنری فائل تیار کرتا ہے۔
اہم نکات
Bitcode LLVM کمپائلر انفراسٹرکچر کے ذریعے پیدا کردہ پروگرام کی ایک انٹرمیڈیٹ نمائندگی (Intermediate Representation, IR) ہے۔ Apple نے Xcode 7 اور iOS 9 سے watchOS ایپلیکیشنز کے لیے لازمی اور iOS و tvOS کے لیے اختیاری شرط کے طور پر Bitcode سپورٹ متعارف کرائی۔ Xcode 14 سے، watchOS کے علاوہ تمام پلیٹ فارمز کے لیے یہ شرط ختم کر دی گئی۔
انٹرمیڈیٹ کوڈ نمائندگی کا تصور 2000 کی دہائی سے LLVM پروجیکٹ کے حصے کے طور پر موجود ہے، جس کی بنیاد کرس لیٹنر نے یونیورسٹی آف الینوائے میں رکھی تھی۔ Apple نے 2011 میں Xcode کے لیے LLVM کو ڈھال لیا، اور 2015 میں Bitcode کو App Store میں دوبارہ جمع کرائے بغیر ایپلیکیشنز کو اپ ڈیٹ کرنے کے طریقے کے طور پر پیش کیا۔ اس ٹیکنالوجی کا اعلان WWDC 2015 میں “What's New in Xcode” سیشن میں کیا گیا تھا۔
مشین کوڈ ایک مخصوص پروسیسر کے لیے بائنری ہدایات پر مشتمل ہوتا ہے: arm64، armv7 یا x86_64۔ Bitcode ہارڈویئر سے آزاد فارمیٹ میں محفوظ ہوتا ہے، جو App Store کو ایک ہی ماخذ نمائندگی سے مختلف آرکیٹیکچرز کے لیے بہتر بنائی گئی بائنری فائلیں تیار کرنے کی اجازت دیتا ہے۔ یہ بنیادی فرق ٹیکنالوجی کے تمام فوائد کی وضاحت کرتا ہے۔
| خصوصیت | Bitcode | مشین کوڈ |
|---|---|---|
| آرکیٹیکچر پر انحصار | آزاد | CPU سے منسلک |
| بائنری فائل کا سائز | کمپیکٹ | بڑا |
| دوبارہ کمپائلیشن کی صلاحیت | ہاں | نہیں |
| App Store سپورٹ | دوبارہ کمپائل ہوتا ہے | جیسے ہے ویسے استعمال |
| ڈیبگنگ | محدود | مکمل سپورٹ |
Bitcode ایک قابل عمل فائل نہیں ہے۔ یہ بائنری فارمیٹ میں LLVM IR ہے جسے ڈیولپر پروجیکٹ میٹا ڈیٹا کے ساتھ App Store کو بھیجتا ہے۔ ایپلیکیشن اسٹور دوبارہ کمپائلیشن کا عمل چلاتا ہے، کوڈ کو ہر ہدف پلیٹ فارم اور آپریٹنگ سسٹم ورژن کے مطابق ڈھالتا ہے۔
Bitcode جنریشن کا عمل کمپائلر فرنٹ اینڈ سے شروع ہوتا ہے، جو Swift یا Objective-C سورس کوڈ کو LLVM IR میں تبدیل کرتا ہے۔ لنکنگ مرحلے پر، Xcode IR کو .bc (Bitcode) فارمیٹ فائلوں میں پیکج کرتا ہے، جو پھر .xcarchive کے ساتھ App Store کو بھیجی جاتی ہیں۔ App Store اپنی طرف سے دوبارہ کمپائلیشن کا عمل چلاتا ہے۔
LLVM انفراسٹرکچر تین حصوں پر مشتمل ہے: فرنٹ اینڈ (C/ObjC کے لیے Clang، Swift کے لیے Swift Frontend)، Middle-End آپٹیمائزر اور بیک اینڈ (مشین کوڈ جنریٹر)۔ Bitcode اسمبلی ہدایات کی تخلیق پر جانے کے بغیر پہلے دو مراحل کا نتیجہ ہے۔ Middle-End پلیٹ فارم سے آزاد اصلاحات انجام دیتا ہے: مردہ کوڈ کا خاتمہ، ان لائننگ اور کانسٹنٹ فولڈنگ۔
// Swift سورس کوڈ کی مثال
func calculateSum(a: Int, b: Int) -> Int {
return a + b
}
// کمپائلیشن کے بعد LLVM IR (آسان)
; define i32 @calculateSum(i32 %a, i32 %b)
; %result = add i32 %a, %b
; ret i32 %result
IR جنریشن کے بعد، کمپائلر نمائندگی کی سطح پر اصلاحات کا ایک سلسلہ انجام دیتا ہے: مردہ کوڈ کا خاتمہ، فنکشن ان لائننگ اور کانسٹنٹ فولڈنگ۔ یہ اصلاحات آرکیٹیکچر سے آزاد ہیں اور Bitcode میں محفوظ رہتی ہیں۔ App Store میں دوبارہ کمپائلیشن کے دوران، آرکیٹیکچر پر منحصر اصلاحات شامل کی جاتی ہیں، جیسے کسی مخصوص پروسیسر کے لیے ہدایات کی ترتیب تبدیل کرنا۔
App Store Connect Bitcode کے ساتھ آرکائیو وصول کرتا ہے اور اپنا کمپائلیشن انفراسٹرکچر چلاتا ہے۔ سسٹم صارف کے ڈیوائس کے ہدف آرکیٹیکچر کا تعین کرتا ہے اور مشین کوڈ تیار کرتا ہے، اسے مخصوص پروسیسر کی خصوصیات کے لیے مزید بہتر بناتا ہے۔ arm64e (A12+ اور M سیریز پروسیسرز) کے لیے، اضافی سیکیورٹی اصلاحات کا اطلاق کیا جاتا ہے۔
اس عمل کو App Thinning کہا جاتا ہے — ایک ٹیکنالوجی جو کسی ڈیوائس کو صرف اس کے آرکیٹیکچر کے لیے ضروری وسائل اور کوڈ پہنچاتی ہے۔ A17 Pro پروسیسر والا iPhone صارف پرانے آرکیٹیکچرز کے لیے غیر ضروری ہدایات کے بغیر، arm64e کے لیے بہتر بنائی گئی بائنری فائل حاصل کرتا ہے۔ اس سے ڈاؤن لوڈ کا وقت کم ہوتا ہے اور ڈیوائس پر جگہ بچتی ہے۔
Bitcode iOS ایپلیکیشن ڈیولپرز کو کئی اہم فوائد فراہم کرتا ہے۔ سب سے اہم فائدہ App Store میں اپ ڈیٹ دوبارہ جمع کرائے بغیر نئے Apple پروسیسرز کے لیے خودکار اصلاح ہے۔ یہ خاص طور پر نئے آرکیٹیکچرز کی طرف منتقلی کے وقت اہم ہے، جیسے armv7 سے arm64 میں منتقلی۔
جب Apple ایک نئے آرکیٹیکچر والا پروسیسر جاری کرتا ہے، Bitcode کے ساتھ بھیجی گئی ایپلیکیشنز خود بخود اس کے لیے دوبارہ کمپائل ہو جاتی ہیں۔ ڈیولپر کو پروجیکٹ دوبارہ بنانے اور اپ ڈیٹ شائع کرنے کی ضرورت نہیں — App Store صارف کے پہلی بار ڈاؤن لوڈ کرنے پر اپنی طرف سے یہ کرتا ہے۔ یہ خاص طور پر طویل مدتی ایپلیکیشنز کے لیے اہم ہے جو سالوں تک برقرار رکھی جاتی ہیں۔
App Thinning Bitcode کے ساتھ مل کر انسٹال شدہ ایپلیکیشن کے سائز کو 15–40% تک کم کر سکتا ہے۔ App Store صرف ایک مخصوص ڈیوائس کے لیے ضروری مشین ہدایات تیار کرتا ہے، دوسرے آرکیٹیکچرز اور مختلف iOS ورژنز کے لیے کوڈ کو ختم کرتا ہے۔ عملی طور پر، اس کا مطلب ہے کہ نئے iPhone والا صارف ایک کمپیکٹ بائنری فائل حاصل کرتا ہے۔
Apple WWDC 2015 Session 102 کے مطابق، Bitcode اور App Thinning کا استعمال تمام آرکیٹیکچرز پر مشتمل یونیورسل بائنری فائل کے مقابلے میں ڈاؤن لوڈ کردہ ایپلیکیشن کے سائز کو اوسطاً 25% کم کر سکتا ہے۔ 100 MB کی ایپلیکیشن کے لیے، صارف کے ڈیوائس پر بچت 40 MB تک ہو سکتی ہے۔
Bitcode کنفیگریشن Xcode کی بلڈ سیٹنگز میں کی جاتی ہے۔ Enable Bitcode پیرامیٹر Build Settings میں واقع ہے اور نئے پروجیکٹس کے لیے بطور ڈیفالٹ فعال ہے، لیکن ڈیولپر ڈیبگنگ یا Bitcode سپورٹ کے بغیر تھرڈ پارٹی لائبریریوں کے استعمال کے وقت اسے غیر فعال کر سکتے ہیں۔
// Build Settings -> Apple Clang - Code Generation
// Enable Bitcode = YES
// یا انفرادی ٹارگٹس کے لیے Info.plist کے ذریعے
@property (nonatomic, assign) BOOL enableBitcode;
- (void)configureBuildSettings {
// کنفیگریشن میں Bitcode کی حیثیت کی جانچ
if (self.enableBitcode) {
NSLog(@"Bitcode is enabled for this target");
} else {
NSLog(@"Bitcode is disabled");
}
}
یہ جانچنے کے لیے کہ آیا آرکائیو میں Bitcode موجود ہے، Xcode Organizer کے ذریعے .xcarchive فائل کھولیں یا ٹرمینل میں otool -l کمانڈ چلائیں۔ بائنری فائل میں __LLVM سیکشن کی موجودگی اس بات کی تصدیق کرتی ہے کہ Bitcode فعال اور درست طریقے سے پیکج کیا گیا ہے۔ اگر سیکشن غائب ہے تو بلڈ کے دوران Bitcode پیدا نہیں ہوا۔
# آرکائیو میں Bitcode کی موجودگی کی جانچ
otool -l YourApp.app/YourApp | grep __LLVM
# آؤٹ پٹ: اگر __LLVM سیکشن ہے — Bitcode موجود ہے
# اگر آؤٹ پٹ خالی ہے — Bitcode فعال نہیں یا پیدا نہیں ہوا
# آپ size کمانڈ استعمال کرکے بھی جانچ سکتے ہیں
size -m -l YourApp.app/YourApp | grep __LLVM
CocoaPods یا SPM کے ذریعے تھرڈ پارٹی لائبریریوں کا استعمال کرتے وقت، یقینی بنائیں کہ تمام انحصاریاں Bitcode کے ساتھ بنائی گئی ہیں۔ اگر کم از کم ایک لائبریری Bitcode کو سپورٹ نہیں کرتی تو Xcode آرکائیونگ کے دوران لنکنگ ایرر پیدا کرے گا۔ CocoaPods کے لیے، سب اسپیکس میں bitcode_enabled پرچم چیک کریں یا enable_bitcode کے ساتھ use_frameworks! استعمال کریں۔
Bitcode تمام اقسام کے iOS پروجیکٹس کے لیے ایک عالمگیر حل نہیں ہے۔ ٹیکنالوجی کی حدود ہیں جنہیں ڈیولپر کو بلڈ کنفیگریشن میں آپشن فعال کرنے سے پہلے مدنظر رکھنا چاہیے۔ ان حدود کو سمجھنا آرکائیونگ اور اشاعت کے دوران مسائل سے بچنے میں مدد کرتا ہے۔
تمام تھرڈ پارٹی لائبریریاں Bitcode سپورٹ کے ساتھ نہیں آتیں۔ اگر کوئی لائبریری صرف Bitcode کے بغیر کمپائل شدہ بائنری فائل کے طور پر تقسیم کی جاتی ہے، تو آپشن فعال والا پروجیکٹ بلڈ نہیں ہوگا۔ اس صورت میں، ڈیولپر کو یا تو Bitcode غیر فعال کرنا ہوگا یا وینڈر سے Bitcode کے ساتھ ورژن کی درخواست کرنی ہوگی۔ یہ خاص طور پر پرانی لائبریریوں کے لیے اہم ہے جو اب اپ ڈیٹ نہیں ہوتیں۔
Bitcode کے ساتھ بنائی گئی ایپلیکیشنز سے کریش رپورٹس اضافی پروسیسنگ کی ضرورت ہوتی ہیں۔ دوبارہ کمپائل شدہ کوڈ کے لیے علامات (dSYM) App Store کے ذریعے پیدا ہوتی ہیں اور Xcode Organizer کے ذریعے ڈاؤن لوڈ کے لیے دستیاب ہوتی ہیں۔ متعلقہ dSYM فائلیں لوڈ کیے بغیر، کریش رپورٹس میں کال اسٹیک ناقابل مطالعہ ہوگا، جس سے مسائل کی تشخیص مشکل ہو جاتی ہے۔
iOS 17 اور Xcode 15 کے مطابق، Apple App Store پر اشاعت کے لیے Bitcode کے لازمی فعال کرنے کی ضرورت نہیں ہے۔ تاہم، watchOS ایپلیکیشنز کے لیے، Bitcode App Store Connect پالیسی کی سطح پر ایک لازمی شرط ہے۔ ڈیولپرز کو نئے پروجیکٹس کے لیے Bitcode فعال کرنے کی سفارش کی جاتی ہے اگر تمام انحصاریاں اسے سپورٹ کرتی ہیں۔
اکثر پوچھے گئے سوالات
iOS اور tvOS ایپلیکیشنز کے لیے، Xcode 14 سے Bitcode لازمی نہیں ہے۔ watchOS کے لیے، Bitcode سپورٹ لازمی ہے۔ Apple نئے پروجیکٹس کے لیے Bitcode فعال کرنے کی سفارش کرتا ہے لیکن اس کے بغیر اشاعت کو مسدود نہیں کرتا۔
Bitcode App Store کو App Thinning لاگو کرنے کی اجازت دیتا ہے — صارف کے ڈیوائس آرکیٹیکچر کے لیے مشین کوڈ تیار کرنا۔ یہ پروجیکٹ میں معاون آرکیٹیکچرز کی تعداد کے لحاظ سے ڈاؤن لوڈ کردہ بائنری فائل کے سائز کو 15–40% کم کرتا ہے۔
ہاں، dSYM فائلیں دوبارہ کمپائل شدہ بائنری فائلوں سے کریش رپورٹس کو علامتی بنانے کے لیے ضروری ہیں۔ App Store آرکائیو پروسیسنگ کے بعد Xcode Organizer کے ذریعے dSYM ڈاؤن لوڈ کرنے کی سہولت فراہم کرتا ہے۔ ان کے بغیر، Crashlytics اور کنسول میں کال اسٹیک میں صرف میموری ایڈریس ہوں گے۔
SPM Bitcode کو سپورٹ کرتا ہے اگر انحصاریاں بائنری فائلوں کے بجائے سورس کوڈ میں تقسیم کی جائیں۔ SPM کے ذریعے بائنری انحصاریوں کو Bitcode کے ساتھ ورژن فراہم کرنا چاہیے، ورنہ آپشن فعال والا پروجیکٹ کمپائل نہیں ہوگا۔
Bitcode ایک ہارڈویئر سے آزاد انٹرمیڈیٹ LLVM IR نمائندگی ہے جسے پروسیسر براہ راست عمل میں نہیں لا سکتا۔ مشین کوڈ ایک مخصوص آرکیٹیکچر (arm64, x86_64) کے لیے تیار ہدایات پر مشتمل ہوتا ہے اور اضافی کمپائلیشن کے بغیر عمل میں لایا جاتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں