XCFramework: یہ کیا ہے، بائنری تقسیم کا فارمیٹ اور استعمال

مصنف: IT Sectr اشاعت: 2026-06-05 مطالعے کا وقت: 7 منٹ

XCFramework ایک Apple بائنری فارمیٹ ہے جو iOS، macOS، tvOS اور watchOS کے لیے لائبریریوں کو ایک پیکیج میں یکجا کرتا ہے۔ اسے .framework کو تبدیل کرنے اور مختلف سمیلیٹر اور ڈیوائس آرکیٹیکچرز کے لیے تعمیر کرتے وقت fat binaries کے مسائل کو ختم کرنے کے لیے ڈیزائن کیا گیا تھا۔ Apple WWDC 2019 کے مطابق، XCFramework متعدد پلیٹ فارمز کو سپورٹ کرنے والے SDK کی فراہمی کے لیے لازمی فارمیٹ بن گیا اور یونیورسل بائنری کے پرانے طریقہ کار کو مکمل طور پر تبدیل کر دیا۔

اہم نکات

  • XCFramework Apple کا لائبریریوں کی تقسیم کے لیے عالمگیر فارمیٹ ہے، جو ایک بنڈل میں متعدد پلیٹ فارمز اور آرکیٹیکچرز کو سپورٹ کرتا ہے
  • Fat binary طریقہ کار کو ہر پلیٹ فارم کے لیے علیحدہ slice سے تبدیل کر دیا گیا ہے، جو سمیلیٹر آرکیٹیکچرز کے ساتھ تعمیر کے مسائل کو ختم کرتا ہے
  • تخلیق xcodebuild -create-xcframework کے ذریعے کی جاتی ہے جس میں lipo کے ساتھ دستی طور پر بائنری کو ضم کرنے کی ضرورت نہیں
  • انضمام Xcode میں Embed & Sign کے ذریعے ہوتا ہے جس میں سمیلیٹر آرکیٹیکچرز کو ہٹانے کے لیے اضافی اسکرپٹ کی ضرورت نہیں
  • Swift Package Manager XCFramework کو مکمل طور پر تبدیل نہیں کرتا — SPM میں بائنری انحصار بالکل اسی فارمیٹ میں فراہم کیے جاتے ہیں

XCFramework کیا ہے؟

XCFramework بائنری لائبریریوں اور فریم ورکس کے لیے ایک پیکیجنگ فارمیٹ ہے جسے Apple نے WWDC 2019 میں متعارف کرایا تھا۔ بنیادی مقصد ایک ایسا بنڈل بنانا ہے جس میں تمام ہدف پلیٹ فارمز اور آرکیٹیکچرز کے لیے لائبریری کے کمپائل شدہ ورژن شامل ہوں۔

XCFramework سے پہلے، ڈیولپرز lipo یوٹیلیٹی کے ذریعے متعدد آرکیٹیکچرز کو یکجا کرنے والے fat binary کے ساتھ .framework استعمال کرتے تھے۔ اس طریقہ کار نے مسائل پیدا کیے: سمیلیٹر کے لیے پروجیکٹ بناتے وقت، fat binary میں سمیلیٹر اور ڈیوائس دونوں آرکیٹیکچرز شامل ہوتے تھے، جس سے App Store میں بلڈ جمع کرواتے وقت خرابیاں آتی تھیں۔ ڈیولپرز کو غیر ضروری آرکیٹیکچرز ہٹانے کے لیے Run Script مراحل لکھنے پڑتے تھے۔

Apple ڈیولپر دستاویزات (2024) کے مطابق، XCFramework Apple کے ماحولیاتی نظام کے تمام پلیٹ فارمز کو سپورٹ کرتا ہے: iOS، iPadOS، macOS، tvOS، watchOS، visionOS اور Catalyst ایپلی کیشنز۔ ہر پلیٹ فارم کو پیکیج کے اندر ایک علیحدہ slice ملتا ہے، جو آرکیٹیکچر کے تنازعات کو ختم کرتا ہے اور SDK کی تقسیم کو آسان بناتا ہے۔

XCFramework کی کب ضرورت ہے؟

XCFramework تین اہم منظرناموں میں استعمال ہوتا ہے: تیسرے فریق ڈیولپرز کو بند SDK کی تقسیم، Flutter اور React Native کے لیے مقامی ماڈیولز کی تقسیم، اور ان لائبریریوں کی اشاعت جنہیں پہلے سے کمپائلیشن کی ضرورت ہوتی ہے۔ Apple ماحولیاتی نظام میں شائع ہونے والے تمام نئے SDK کے لیے یہ فارمیٹ لازمی ہے۔

ڈیولپرز XCFramework اس وقت منتخب کرتے ہیں جب سورس کوڈ ظاہر نہ کیا جا سکے، جب لائبریری ملکیتی الگورتھم استعمال کرتی ہو، یا جب لائسنس تحفظ کی ضرورت ہو۔ Swift Package Manager کے برعکس، جو سورس کوڈ کے ساتھ کام کرتا ہے، XCFramework پہلے سے کمپائل شدہ بائنری فائلیں فراہم کرتا ہے۔

XCFramework fat binary کے مسئلے کو کیسے حل کرتا ہے؟

Fat binary کا مسئلہ یہ تھا کہ ایک عالمگیر بائنری میں ایک Mach-O فائل میں متعدد آرکیٹیکچرز شامل ہوتے تھے۔ سمیلیٹر کے لیے ایپ بناتے وقت، Xcode ڈیوائس آرکیٹیکچر arm64 اور سمیلیٹر آرکیٹیکچر x86_64 دونوں شامل کرتا تھا — App Store صرف ڈیوائس آرکیٹیکچر قبول کرتا تھا۔

روایتی حل میں حتمی بلڈ سے سمیلیٹر آرکیٹیکچرز کو ہٹانے کے لیے lipo کو کال کرنے والا Run Script مرحلہ شامل کرنا شامل تھا۔ یہ طریقہ کار نازک تھا اور Xcode اپ ڈیٹس یا نئے آرکیٹیکچرز (جیسے Apple Silicon پر سمیلیٹر کے لیے arm64) کے آنے پر ٹوٹ جاتا تھا۔

Swift.org (2023) کے مطابق، Swift Package Manager ٹیم کو ابتدائی طور پر بائنری انحصار کو سپورٹ کرنے کی کوشش کرتے وقت اس مسئلے کا سامنا کرنا پڑا۔ XCFramework نے اسے فارمیٹ کی سطح پر حل کیا: ہر slice ایک علیحدہ فولڈر ہے جس میں Info.plist ہے جو ہدف پلیٹ فارم اور آرکیٹیکچر کو بیان کرتی ہے۔ Xcode بلڈ کے وقت خود بخود مطلوبہ slice کا انتخاب کرتا ہے، جس میں پوسٹ پروسیسنگ کی ضرورت نہیں۔

علیحدہ slice طریقہ کار کے فوائد

XCFramework میں ہر slice میں صرف ایک پلیٹ فارم-آرکیٹیکچر کا مجموعہ ہوتا ہے۔ مثال کے طور پر، ios-arm64 میں صرف iOS ڈیوائسز کے لیے بائنری ہے، اور ios-x86_64-simulator میں صرف Intel Mac سمیلیٹر کے لیے۔ Xcode خود بخود صحیح slice کا انتخاب کرتا ہے، آرکیٹیکچر ہٹانے والی اسکرپٹ کی ضرورت کو ختم کرتا ہے اور بلڈ خرابیوں کے خطرے کو کم کرتا ہے۔

ios-arm64-x86_64-simulator slice Apple Silicon Macs کی مدد کے لیے متعارف کرایا گیا تھا۔ پہلے، سمیلیٹر کو arm64 (Apple Silicon) اور x86_64 (Intel) کے لیے علیحدہ بائنری کی ضرورت ہوتی تھی۔ XCFramework ایک سمیلیٹر slice کے اندر fat binary کی اجازت دیتا ہے — یہ واحد استثنا ہے جہاں fat binary جائز ہے۔

XCFramework پیکیج کی ساخت

XCFramework پیکیج ایک ڈائریکٹری ہے جس کا ایکسٹینشن .xcframework ہے، جس میں اوپری سطح پر Info.plist اور بائنری slices والے فولڈرز ہوتے ہیں۔ ہر slice میں کسی مخصوص پلیٹ فارم کے لیے .framework یا .a لائبریری شامل ہوتی ہے۔

bash
MyLibrary.xcframework/
  Info.plist
  ios-arm64/
    MyLibrary.framework/
      Info.plist
      MyLibrary
  ios-x86_64-simulator/
    MyLibrary.framework/
      Info.plist
      MyLibrary
  macos-arm64-x86_64/
    MyLibrary.framework/
      Info.plist
      MyLibrary

پیکیج کے Info.plist میں AvailableLibraries کلید ہوتی ہے، جو ہر slice کے لیے LibraryIdentifier، LibraryPath اور SupportedPlatform کی فہرست دیتی ہے۔ Xcode پروجیکٹ میں XCFramework شامل کرتے وقت اس فائل کو پڑھتا ہے اور خود بخود تلاش کے راستے اور Embed Frameworks مرحلہ ترتیب دیتا ہے۔

ہر slice اپنے Info.plist کے ساتھ ایک مکمل .framework یا جامد لائبریری ہے۔ یہ XCFramework کو مخلوط اقسام کی حمایت کرنے کی اجازت دیتا ہے: کچھ پلیٹ فارمز کے لیے جامد لائبریریاں اور دوسروں کے لیے متحرک فریم ورک، اگرچہ عملی طور پر تمام slices کے لیے ایک قسم استعمال ہوتی ہے۔

کمانڈ لائن سے XCFramework بنانا

XCFramework کی تخلیق xcodebuild -create-xcframework کے ذریعے کی جاتی ہے۔ کمانڈ ہر پلیٹ فارم کے لیے پہلے سے بنی .framework یا .a لائبریریاں بطور انپٹ لیتی ہے اور انہیں ایک پیکیج میں یکجا کرتی ہے۔

عمل دو مراحل پر مشتمل ہے: پہلے، ہر ہدف پلیٹ فارم کے لیے بائنریز بنائی جاتی ہیں، پھر انہیں XCFramework میں پیکیج کیا جاتا ہے۔ تعمیر کے لیے معیاری Xcode destination جھنڈے استعمال کیے جاتے ہیں۔

bash
# Step 1: build frameworks for each platform
xcodebuild archive -scheme MyLibrary -destination "generic/platform=iOS Simulator"
xcodebuild archive -scheme MyLibrary -destination "generic/platform=iOS"
xcodebuild archive -scheme MyLibrary -destination "generic/platform=macOS"

# Step 2: create XCFramework
xcodebuild -create-xcframework -framework ./iOS/MyLibrary.framework -framework ./iOSSim/MyLibrary.framework -framework ./macOS/MyLibrary.framework -output ./MyLibrary.xcframework

-create-xcframework جھنڈا Xcode 11 میں متعارف کرایا گیا تھا۔ کمانڈ خود بخود درست ڈائریکٹری ڈھانچہ بناتا ہے اور تمام پلیٹ فارمز کی وضاحت کے ساتھ Info.plist تیار کرتا ہے۔ اگر .framework میں سے کوئی خراب ہے یا غلط آرکیٹیکچر کے ساتھ بنایا گیا ہے، تو xcodebuild تصدیق کے مرحلے پر خرابی دیتا ہے۔

بلڈ اسکرپٹس کے ذریعے آٹومیشن

CI/CD کے لیے، ایک شیل اسکرپٹ استعمال کیا جاتا ہے جو تمام پلیٹ فارمز کے لیے تعمیر اور XCFramework بنانے کو خودکار کرتا ہے۔ ایک مقبول طریقہ کار Makefile یا Fastlane lane کی شکل میں لپیٹنے والا ہے جس میں پیرامیٹرائزڈ scheme اور آؤٹ پٹ پاتھ ہوتا ہے۔

bash
# build_xcframework.sh - automation script
set -e
SCHEME="MyLibrary"
OUTPUT="./build"

xcodebuild archive -scheme "$SCHEME" -sdk iphonesimulator -archivePath "$OUTPUT/sim.xcarchive"
xcodebuild archive -scheme "$SCHEME" -sdk iphoneos -archivePath "$OUTPUT/dev.xcarchive"
xcodebuild -create-xcframework -framework "$OUTPUT/dev.xcarchive/Products/Library/Frameworks/MyLibrary.framework" -framework "$OUTPUT/sim.xcarchive/Products/Library/Frameworks/MyLibrary.framework" -output "$OUTPUT/MyLibrary.xcframework"

اس طرح کی اسکرپٹ ٹیسٹ پاس کرنے کے بعد CI پائپ لائن (GitHub Actions، Bitrise، Jenkins) میں چلتی ہے۔ نتیجے میں آنے والا XCFramework آرکائیو کیا جاتا ہے اور ریلیز آرٹیفیکٹ کے طور پر اپ لوڈ کیا جاتا ہے یا pod spec کے ذریعے CocoaPods جیسے انحصار مینیجر کے ذریعے شائع کیا جاتا ہے۔

Xcode پروجیکٹ میں XCFramework ضم کرنا

XCFramework کو Xcode پروجیکٹ میں ضم کرنے کے لیے تلاش کے راستوں کی دستی ترتیب کی ضرورت نہیں۔ target کی General ترتیبات میں Frameworks, Libraries, and Embedded Content سیکشن میں .xcframework کو گھسیٹنا کافی ہے۔

.framework کے برعکس، XCFramework کو سمیلیٹر آرکیٹیکچرز ہٹانے کے لیے Run Script مرحلہ شامل کرنے کی ضرورت نہیں۔ Xcode خود بخود دستیاب slices کا تعین کرتا ہے اور صرف موجودہ بلڈ اسکیم کے لیے ضروری slices شامل کرتا ہے۔ فزیکل ڈیوائس کے لیے ios-arm64 slice استعمال ہوتا ہے، سمیلیٹر کے لیے — ios-arm64-x86_64-simulator یا ios-x86_64-simulator۔

swift
import MyLibrary

func processData() {
    // XCFramework resolves the correct slice at build time
    let processor = DataProcessor()
    let result = processor.analyze(input: "sample")
    print(result)
}

CocoaPods کے لیے، انضمام vendored_frameworks اور سپورٹڈ پلیٹ فارمز کی فہرست کے ساتھ podspec کے ذریعے ہوتا ہے۔ انحصار مینیجر خود بخود تعین کرتا ہے کہ پروجیکٹ کے لیے کون سے slices ضروری ہیں۔ Firebase، Adjust، AppsFlyer جیسے بہت سے تجارتی SDK نے تنصیب کو آسان بنانے کے لیے XCFramework میں منتقلی کی ہے۔

XCFramework اور Swift Package Manager کا موازنہ

Swift Package Manager اور XCFramework مقابلہ نہیں کرتے بلکہ ایک دوسرے کی تکمیل کرتے ہیں۔ SPM سورس کوڈ کے ساتھ کام کرتا ہے اور ہر پروجیکٹ بلڈ پر انحصار بناتا ہے۔ XCFramework صارف کی طرف کمپائلیشن کی ضرورت کے بغیر تیار بائنری فراہم کرتا ہے۔

  • XCFramework — بائنری تقسیم، سورس کوڈ کا تحفظ، ایک پیکیج میں تمام Apple پلیٹ فارمز کی حمایت
  • SPM — اوپن سورس کوڈ کے ساتھ کام، معائنہ کی اہلیت، ہدف پلیٹ فارم کے لیے خودکار تعمیر
  • SPM بائنری انحصار پیکیجنگ فارمیٹ کے طور پر XCFramework استعمال کرتے ہیں، دونوں طریقوں کو یکجا کرتے ہیں

Swift Package Manager 5.3 کی ریلیز کے ساتھ، Apple نے بائنری انحصار کے لیے حمایت شامل کی — اب SPM دور دراز انحصار کے طور پر XCFramework ڈاؤن لوڈ کر سکتا ہے۔ Package.swift بائنری آرٹیفیکٹ کا URL اور تصدیق کے لیے اس کا چیکسم بتاتا ہے۔

Swift Package Manager دستاویزات (2024) کے مطابق، بائنری انحصار ان SDK کے لیے تجویز کیا جاتا ہے جو سورس کوڈ ظاہر نہیں کرتے، یا ان لائبریریوں کے لیے جن کا تعمیر کا وقت غیر متناسب طور پر طویل ہوتا ہے۔ اوپن سورس پروجیکٹس کے لیے، SPM کے ذریعے سورس کوڈ کی تقسیم کو ترجیح دی جاتی ہے۔

معیارXCFrameworkSwift Package Manager
فارمیٹبائنری (.xcframework)سورس کوڈ
کوڈ تحفظمکملنہیں
تعمیر کا وقتکم سے کم (نقل)کوڈ کے حجم پر منحصر
پلیٹ فارم لچکتمام Apple پلیٹ فارمزPackage.swift پر منحصر
انضمامگھسیٹیں اور چھوڑیں یا SPMPackage.swift

اکثر پوچھے جانے والے سوالات

XCFramework اور .framework میں کیا فرق ہے؟

.framework ایک پرانا فارمیٹ ہے جس میں ڈیوائس اور سمیلیٹر آرکیٹیکچرز کے ساتھ fat binary ہوتی ہے۔ XCFramework ہر slice کو علیحدہ محفوظ کرتا ہے، تعمیر کے دوران آرکیٹیکچر تنازعات کو ختم کرتا ہے۔ Apple تمام نئے پروجیکٹس اور موجودہ پروجیکٹس کی منتقلی کے لیے XCFramework کی سفارش کرتا ہے۔

کیا XCFramework CocoaPods کے ساتھ استعمال کیا جا سکتا ہے؟

CocoaPods ورژن 1.9 سے XCFramework کو سپورٹ کرتا ہے۔ podspec میں spec.vendored_frameworks اور spec.static_framework بتانا کافی ہے۔ مینیجر پروجیکٹ پلیٹ فارم کے لیے دستیاب slices کو مدنظر رکھتے ہوئے خود بخود انحصار حل کرتا ہے۔

کیا .framework سے XCFramework میں جانا لازمی ہے؟

Apple .framework کی حمایت ختم نہیں کرتا، لیکن نئے SDK کے لیے خصوصی طور پر XCFramework کی سفارش کرتا ہے۔ پرانے فارمیٹ میں fat binary کے ساتھ App Store میں ایپ جمع کراتے وقت، سمیلیٹر آرکیٹیکچرز کی وجہ سے Invalid Bundle خرابیاں ہو سکتی ہیں، جو XCFramework کو ایک عملی ضرورت بناتی ہیں۔

XCFramework Swift Package Manager کے ساتھ کیسے کام کرتا ہے؟

Swift 5.3 سے شروع کرتے ہوئے، SPM میں بائنری انحصار XCFramework استعمال کرتے ہیں۔ Package.swift بائنری پیکیج کا url اور checksum بتاتا ہے۔ SPM ڈاؤن لوڈ کرتا ہے، سالمیت کی تصدیق کرتا ہے اور سورس کوڈ کمپائل کیے بغیر XCFramework کو سسٹم انحصار کے طور پر جوڑتا ہے۔

کیا XCFramework visionOS پلیٹ فارم کو سپورٹ کرتا ہے؟

visionOS Xcode 15 سے XCFramework میں سپورٹ کیا جاتا ہے۔ WWDC 2023 میں Apple نے تصدیق کی کہ فارمیٹ Apple Vision Pro کے لیے بڑھایا گیا ہے۔ visionOS کے slice میں SupportedPlatform = xros ہے اور arm64 آرکیٹیکچر شامل ہے۔

خلاصہ

  • XCFramework Apple کا لائبریریوں کی بائنری تقسیم کے لیے جدید فارمیٹ ہے، جو .framework کو تبدیل کرتا ہے اور fat binary کے مسائل حل کرتا ہے
  • ہر پلیٹ فارم اور آرکیٹیکچر کے لیے علیحدہ slices تعمیر کے تنازعات اور Run Script مراحل کی ضرورت کو ختم کرتے ہیں
  • xcodebuild -create-xcframework کے ذریعے تخلیق CI/CD میں خودکار ہوتی ہے اور lipo کے ذریعے دستی بائنری ضم کرنے کی ضرورت نہیں
  • Xcode پروجیکٹ میں انضمام تلاش کے راستے ترتیب دیے بغیر .xcframework کو Embedded Binaries سیکشن میں گھسیٹ کر کیا جاتا ہے
  • Swift Package Manager بائنری انحصار کے لیے XCFramework کو سپورٹ کرتا ہے، انتظام کی سہولت کو کوڈ تحفظ کے ساتھ جوڑتا ہے
  • تمام Apple پلیٹ فارمز — iOS، macOS، tvOS، watchOS اور visionOS — ایک پیکیج میں سپورٹ کیے جاتے ہیں
  • تمام نئے SDK اور موجودہ .framework لائبریریوں کی منتقلی کے لیے XCFramework کا استعمال تجویز کیا جاتا ہے

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں