XCFramework — iOS, macOS, tvOS va watchOS uchun kutubxonalarni bitta paketda birlashtiruvchi Apple binar formati. .framework ni almashtirish va simulyator va qurilmaning turli arxitekturalari ostida yig'ishda fat binary muammolarini bartaraf etish uchun ishlab chiqilgan. Apple WWDC 2019 ma'lumotlariga ko'ra, XCFramework bir nechta platformalarni qo'llab-quvvatlovchi SDK larni yetkazib berish uchun majburiy formatga aylandi va universal binar fayllar bilan eskirgan yondashuvni butunlay almashtirdi.
Asosiy fikrlar
XCFramework — Apple tomonidan WWDC 2019 da taqdim etilgan binar kutubxonalar va freymvorklarni qadoqlash formati. Asosiy maqsad kutubxonaning barcha maqsadli platformalar va arxitekturalar uchun kompilyatsiya qilingan versiyalarini o'z ichiga olgan bitta bundle yaratishdir.
XCFramework paydo bo'lishidan oldin dasturchilar lipo yordamida bir nechta arxitekturalarni birlashtiruvchi fat binary bilan .framework dan foydalanardilar. Bu yondashuv muammolar keltirib chiqardi: simulyator uchun loyihani yig'ishda fat binary ham simulyator, ham qurilma arxitekturasini o'z ichiga olardi, bu esa App Store ga yig'ilmani yuborishda xatolarga olib kelardi. Dasturchilar keraksiz arxitekturalarni olib tashlash uchun Run Script fazalarini yozishlari kerak edi.
Apple Developer Documentation (2024) ma'lumotlariga ko'ra, XCFramework Apple ekotizimining barcha platformalarini qo'llab-quvvatlaydi: iOS, iPadOS, macOS, tvOS, watchOS, visionOS va katalizator ilovalari. Har bir platforma paket ichida alohida qatlam oladi, bu arxitektura ziddiyatlarini bartaraf etadi va SDK tarqatishni soddalashtiradi.
XCFramework uchta asosiy stsenariyda qo'llaniladi: yopiq SDK larni uchinchi tomon dasturchilariga yetkazib berish, Flutter va React Native uchun mahalliy modullarni tarqatish va oldindan kompilyatsiya talab qiladigan kutubxonalarni nashr etish. Format Apple ekotizimida nashr etiladigan barcha yangi SDK lar uchun majburiydir.
Dasturchilar manba kodi oshkor etilmaydigan, kutubxona mulkiy algoritmlardan foydalanadigan yoki litsenziya himoyasi talab qilinadigan hollarda XCFramework ni tanlaydilar. Manba kodi bilan ishlaydigan Swift Package Manager dan farqli o'laroq, XCFramework allaqachon kompilyatsiya qilingan binar fayllarni yetkazib beradi.
Fat binary muammosi shundan iborat ediki, universal binar fayl bitta Mach-O faylida bir nechta arxitekturalarni o'z ichiga olardi. Simulyator uchun ilovani yig'ishda Xcode binar faylga qurilmaning arm64 arxitekturasini va simulyatorning x86_64 arxitekturasini kiritardi — App Store faqat qurilma arxitekturasini qabul qilardi.
An'anaviy yechim yakuniy yig'ilishdan simulyator arxitekturalarini olib tashlash uchun lipo chaqiruvi bilan Run Script fazasini qo'shishni o'z ichiga olardi. Bu yondashuv mo'rt edi va Xcode yangilanishlarida yoki yangi arxitekturalar qo'shilganda (masalan, Apple Silicon da simulyator uchun arm64) buzilardi.
Swift.org (2023) ma'lumotlariga ko'ra, Swift Package Manager jamoasi dastlab binar bog'liqliklarni qo'llab-quvvatlashga urinishda bu muammoga duch keldi. XCFramework uni format darajasida hal qildi: har bir qatlam maqsadli platforma va arxitektura tasvirlangan Info.plist bilan alohida papkadir. Xcode yig'ish paytida avtomatik ravishda mos qatlamni tanlaydi, keyingi ishlov berishni talab qilmaydi.
XCFramework dagi har bir qatlam faqat bitta platforma va arxitektura kombinatsiyasini o'z ichiga oladi. Masalan, ios-arm64 faqat iOS qurilmalari uchun binar faylni, ios-x86_64-simulator esa faqat Intel Mac simulyatori uchun binar faylni o'z ichiga oladi. Xcode avtomatik ravishda to'g'ri qatlamni tanlaydi, arxitekturalarni olib tashlash skriptlariga ehtiyojni bartaraf etadi va yig'ish xatolar xavfini kamaytiradi.
ios-arm64-x86_64-simulator qatlami Apple Silicon Mac ni qo'llab-quvvatlash uchun paydo bo'ldi. Ilgari simulyator uchun arm64 (Apple Silicon) va x86_64 (Intel) uchun alohida binar fayl talab qilinardi. XCFramework simulyator uchun bitta qatlam ichida fat binary ga ruxsat beradi — bu fat binary oqlanadigan yagona istisnodir.
XCFramework paketi .xcframework kengaytmali, yuqori darajada Info.plist va binar qatlamlar bilan papkalarni o'z ichiga olgan katalogdir. Har bir qatlam ma'lum bir platforma uchun .framework yoki .a kutubxonasini o'z ichiga oladi.
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
Paketning Info.plist fayli har bir qatlam uchun LibraryIdentifier, LibraryPath va SupportedPlatform identifikatorlarini sanab o'tuvchi AvailableLibraries kalitini o'z ichiga oladi. Xcode loyihaga XCFramework qo'shganda bu faylni o'qiydi va qidiruv yo'llari va Embed Frameworks fazasini avtomatik konfiguratsiya qiladi.
Har bir qatlam o'z Info.plist bilan to'liq huquqli .framework yoki statik kutubxonadir. Bu XCFramework ga aralash turlarni qo'llab-quvvatlash imkonini beradi: ba'zi platformalar uchun statik kutubxonalar va boshqalar uchun dinamik freymvorklar, garchi amalda barcha qatlamlar uchun bir tur ko'proq ishlatiladi.
XCFramework yaratish xcodebuild -create-xcframework orqali amalga oshiriladi. Buyruq har bir platforma uchun allaqachon kompilyatsiya qilingan .framework yoki .a kutubxonalarini qabul qiladi va ularni yagona paketga birlashtiradi.
Jarayon ikki bosqichdan iborat: avval har bir maqsadli platforma uchun binar fayllar kompilyatsiya qilinadi, so'ngra ular XCFramework ga qadoqlanadi. Kompilyatsiya uchun standart Xcode destination bayroqlari ishlatiladi.
# 1-qadam: har bir platforma uchun freymvorklarni quring
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"
# 2-qadam: XCFramework yarating
xcodebuild -create-xcframework -framework ./iOS/MyLibrary.framework -framework ./iOSSim/MyLibrary.framework -framework ./macOS/MyLibrary.framework -output ./MyLibrary.xcframework
-create-xcframework bayrog'i Xcode 11 da paydo bo'ldi. Buyruq avtomatik ravishda to'g'ri katalog tuzilmasini yaratadi va barcha platformalar tavsifi bilan Info.plist generatsiya qiladi. Agar .framework lardan biri shikastlangan yoki noto'g'ri arxitektura bilan kompilyatsiya qilingan bo'lsa, xcodebuild validatsiya bosqichida xato chiqaradi.
CI/CD uchun barcha platformalar ostida yig'ishni va XCFramework yaratishni avtomatlashtiruvchi shell skripti ishlatiladi. Ommabop yondashuv scheme va output path parametrlashtirish bilan Makefile yoki Fastlane leyen ko'rinishidagi o'ramdir.
# build_xcframework.sh — avtomatlashtirish skripti
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"
Bunday skript testlardan so'ng CI pipeline da (GitHub Actions, Bitrise, Jenkins) bajariladi. Natijaviy XCFramework arxivlanadi va reliz artefakti sifatida yuklanadi yoki pod spec yordamida CocoaPods kabi bog'liqlik menejeri orqali nashr etiladi.
XCFramework ni Xcode loyihasiga ulash qidiruv yo'llarini qo'lda konfiguratsiya qilishni talab qilmaydi. Target sozlamalarida General bo'limidagi Frameworks, Libraries, and Embedded Content qismiga .xcframework ni sudrab tashlash kifoya.
.framework dan farqli o'laroq, XCFramework simulyator arxitekturalarini olib tashlash uchun Run Script fazasini qo'shishni talab qilmaydi. Xcode mavjud qatlamlarni avtomatik aniqlaydi va faqat joriy yig'ish sxemasi uchun keraklilarini kiritadi. Fizik qurilma uchun ios-arm64 qatlami, simulyator uchun — ios-arm64-x86_64-simulator yoki ios-x86_64-simulator ishlatiladi.
import MyLibrary
func processData() {
// XCFramework yig'ish paytida to'g'ri qatlamni hal qiladi
let processor = DataProcessor()
let result = processor.analyze(input: "sample")
print(result)
}
CocoaPods uchun integratsiya vendored_frameworks va qo'llab-quvvatlanadigan platformalar ro'yxatini ko'rsatuvchi podspec orqali amalga oshiriladi. Bog'liqlik menejeri loyiha uchun qaysi qatlamlar kerakligini avtomatik aniqlaydi. Ko'plab tijorat SDK lari — Firebase, Adjust, AppsFlyer — o'rnatishni soddalashtirish uchun XCFramework ga o'tgan.
Swift Package Manager va XCFramework raqobatlashmaydi, balki bir-birini to'ldiradi. SPM manba kodi bilan ishlaydi va loyihaning har bir yig'ilishida bog'liqliklarni kompilyatsiya qiladi. XCFramework iste'molchi tomonida kompilyatsiya talab qilmasdan tayyor binar fayllarni taqdim etadi.
Swift Package Manager 5.3 chiqarilishi bilan Apple binar bog'liqliklarni qo'llab-quvvatlashni qo'shdi — endi SPM XCFramework ni uzoq bog'liqlik sifatida yuklashi mumkin. Package.swift binar artefaktning URL va tekshirish uchun uning checksum ni ko'rsatadi.
Swift Package Manager documentation (2024) ma'lumotlariga ko'ra, binar bog'liqliklar manba kodini oshkor etmaydigan SDK lar yoki kompilyatsiyasi nomutanosib ravishda uzoq vaqt oladigan kutubxonalar uchun tavsiya etiladi. Open-source loyihalar uchun SPM orqali manba kodi bilan yetkazib berish afzal.
| Mezon | XCFramework | Swift Package Manager |
|---|---|---|
| Format | Binar (.xcframework) | Manba kodi |
| Kod himoyasi | To'liq | Yo'q |
| Yig'ish vaqti | Minimal (nusxalash) | Kod hajmiga bog'liq |
| Platforma moslashuvchanligi | Barcha Apple platformalari | Package.swift ga bog'liq |
| Integratsiya | Drag-and-drop yoki SPM | Package.swift |
Tez-tez so'raladigan savollar
.framework — qurilma va simulyator arxitekturalari bilan fat binary ni o'z ichiga olgan eskirgan format. XCFramework har bir qatlamni alohida saqlaydi, yig'ish paytida arxitektura ziddiyatlarini bartaraf etadi. Apple barcha yangi loyihalar va mavjud migratsiyalar uchun XCFramework ni tavsiya qiladi.
CocoaPods XCFramework ni 1.9 versiyasidan boshlab qo'llab-quvvatlaydi. Podspec da spec.vendored_frameworks va spec.static_framework ko'rsatish kifoya. Menejer loyiha platformasi uchun mavjud qatlamlarni hisobga olgan holda bog'liqliklarni avtomatik hal qiladi.
Apple .framework qo'llab-quvvatlashni olib tashlamaydi, lekin yangi SDK lar uchun faqat XCFramework ni tavsiya qiladi. Eski formatda fat binary bilan App Store ga ilova yuborishda simulyator arxitekturalari sababli Invalid Bundle xatosi mumkin, bu XCFramework ni amaliy zaruratga aylantiradi.
Swift 5.3 dan boshlab, SPM dagi binar bog'liqliklar XCFramework dan foydalanadi. Package.swift binar paketning url va checksum ni ko'rsatadi. SPM yuklaydi, yaxlitligini tekshiradi va manba kodini kompilyatsiya qilmasdan XCFramework ni tizim bog'liqligi sifatida ulaydi.
visionOS XCFramework da Xcode 15 dan boshlab qo'llab-quvvatlanadi. WWDC 2023 da Apple format Apple Vision Pro uchun kengaytirilganligini tasdiqladi. visionOS uchun qatlam SupportedPlatform = xros bilan va arm64 arxitekturasini o'z ichiga oladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.