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 दृष्टिकोण को प्रत्येक प्लेटफ़ॉर्म के लिए अलग-अलग स्लाइस से बदल दिया गया है, जो सिम्युलेटर आर्किटेक्चर के साथ निर्माण समस्याओं को समाप्त करता है
  • निर्माण 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 और कैटलिस्ट अनुप्रयोग। प्रत्येक प्लेटफ़ॉर्म को पैकेज के अंदर एक अलग स्लाइस मिलता है, जो आर्किटेक्चर विरोध को समाप्त करता है और 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 ने इसे प्रारूप स्तर पर हल किया: प्रत्येक स्लाइस लक्ष्य प्लेटफ़ॉर्म और आर्किटेक्चर का वर्णन करने वाले Info.plist के साथ एक अलग फ़ोल्डर है। Xcode बिल्ड के समय स्वचालित रूप से आवश्यक स्लाइस का चयन करता है, जिसमें पोस्ट-प्रोसेसिंग की आवश्यकता नहीं होती।

अलग-अलग स्लाइस दृष्टिकोण के लाभ

XCFramework में प्रत्येक स्लाइस में केवल एक प्लेटफ़ॉर्म-आर्किटेक्चर संयोजन होता है। उदाहरण के लिए, ios-arm64 में केवल iOS उपकरणों के लिए बाइनरी है, और ios-x86_64-simulator में केवल Intel Mac सिम्युलेटर के लिए। Xcode स्वचालित रूप से सही स्लाइस का चयन करता है, आर्किटेक्चर हटाने वाली स्क्रिप्ट की आवश्यकता को समाप्त करता है और बिल्ड त्रुटियों के जोखिम को कम करता है।

ios-arm64-x86_64-simulator स्लाइस Apple Silicon Macs के समर्थन के लिए पेश किया गया था। पहले, सिम्युलेटर के लिए arm64 (Apple Silicon) और x86_64 (Intel) के लिए अलग-अलग बाइनरी की आवश्यकता होती थी। XCFramework एक सिम्युलेटर स्लाइस के अंदर fat binary की अनुमति देता है — यह एकमात्र अपवाद है जहाँ fat binary उचित है।

XCFramework पैकेज संरचना

XCFramework पैकेज .xcframework एक्सटेंशन वाली एक निर्देशिका है, जिसमें शीर्ष स्तर पर Info.plist और बाइनरी स्लाइस वाले फ़ोल्डर होते हैं। प्रत्येक स्लाइस में किसी विशिष्ट प्लेटफ़ॉर्म के लिए .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 कुंजी होती है, जो प्रत्येक स्लाइस के लिए LibraryIdentifier, LibraryPath और SupportedPlatform को सूचीबद्ध करती है। Xcode प्रोजेक्ट में XCFramework जोड़ते समय इस फ़ाइल को पढ़ता है और स्वचालित रूप से खोज पथ और Embed Frameworks चरण कॉन्फ़िगर करता है।

प्रत्येक स्लाइस अपने स्वयं के Info.plist के साथ एक पूर्ण .framework या स्थिर लाइब्रेरी है। यह XCFramework को मिश्रित प्रकारों का समर्थन करने की अनुमति देता है: कुछ प्लेटफ़ॉर्म के लिए स्थिर लाइब्रेरी और दूसरों के लिए गतिशील फ्रेमवर्क, हालाँकि व्यवहार में सभी स्लाइस के लिए एक प्रकार का उपयोग किया जाता है।

कमांड लाइन से 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 बनाने को स्वचालित करने वाला शेल स्क्रिप्ट का उपयोग किया जाता है। लोकप्रिय दृष्टिकोण पैरामीटरयुक्त scheme और आउटपुट पथ के साथ Makefile या Fastlane lane के रूप में एक रैपर है।

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 सेटिंग्स में .xcframework को Frameworks, Libraries, and Embedded Content सेक्शन में खींचना पर्याप्त है।

.framework के विपरीत, XCFramework को सिम्युलेटर आर्किटेक्चर हटाने के लिए Run Script चरण जोड़ने की आवश्यकता नहीं होती। Xcode स्वचालित रूप से उपलब्ध स्लाइस निर्धारित करता है और वर्तमान बिल्ड योजना के लिए केवल आवश्यक स्लाइस शामिल करता है। भौतिक डिवाइस के लिए ios-arm64 स्लाइस का उपयोग किया जाता है, सिम्युलेटर के लिए — 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 के माध्यम से होता है। निर्भरता प्रबंधक स्वचालित रूप से निर्धारित करता है कि प्रोजेक्ट के लिए कौन से स्लाइस आवश्यक हैं। कई वाणिज्यिक SDK — Firebase, Adjust, AppsFlyer — ने इंस्टॉलेशन को सरल बनाने के लिए 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 प्रत्येक स्लाइस को अलग-अलग संग्रहीत करता है, निर्माण के दौरान आर्किटेक्चर विरोध को समाप्त करता है। Apple सभी नए प्रोजेक्ट्स और मौजूदा प्रोजेक्ट्स के माइग्रेशन के लिए XCFramework की सिफारिश करता है।

क्या CocoaPods के साथ XCFramework का उपयोग किया जा सकता है?

CocoaPods संस्करण 1.9 से XCFramework का समर्थन करता है। podspec में spec.vendored_frameworks और spec.static_framework निर्दिष्ट करना पर्याप्त है। प्रबंधक प्रोजेक्ट प्लेटफ़ॉर्म के लिए उपलब्ध स्लाइस को ध्यान में रखते हुए स्वचालित रूप से निर्भरताओं को हल करता है।

क्या .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 के लिए स्लाइस में SupportedPlatform = xros है और इसमें arm64 आर्किटेक्चर शामिल है।

सारांश

  • XCFramework Apple का लाइब्रेरी के बाइनरी वितरण के लिए आधुनिक प्रारूप है, जो .framework को बदलता है और fat binary समस्याओं को हल करता है
  • प्रत्येक प्लेटफ़ॉर्म और आर्किटेक्चर के लिए अलग-अलग स्लाइस निर्माण विरोध और 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें