XCFramework: bu nədir, ikili çatdırılma formatı və tətbiqi

Müəllif: IT Sectr Dərc olunub: 2026-06-05 Oxuma vaxtı: 7 dəq

XCFramework — iOS, macOS, tvOS və watchOS üçün kitabxanaları bir paketdə birləşdirən Apple ikili formatı. .framework-i əvəz etmək və simulyator və cihazın müxtəlif arxitekturaları altında qurarkən fat binary problemlərini aradan qaldırmaq üçün hazırlanmışdır. Apple WWDC 2019 məlumatlarına görə, XCFramework bir neçə platformanı dəstəkləyən SDK-ların çatdırılması üçün məcburi format halına gəldi və universal ikili fayllarla köhnəlmiş yanaşmanı tamamilə əvəz etdi.

Əsas məqamlar

  • XCFramework — bir bundle-da bir neçə platforma və arxitekturanı dəstəkləyən kitabxanaların çatdırılması üçün universal Apple formatı
  • Fat binary yanaşması hər platforma üçün ayrı-ayrı dilimlərlə əvəz edildi, bu da simulyator arxitekturaları ilə qurma problemlərini aradan qaldırır
  • Yaradılma xcodebuild -create-xcframework vasitəsilə həyata keçirilir, lipo ilə ikili faylları əl ilə birləşdirməyə ehtiyac yoxdur
  • Qoşulma Xcode-da Embed & Sign vasitəsilə simulyator arxitekturalarını silmək üçün əlavə skriptlər olmadan baş verir
  • Swift Package Manager XCFramework-i tamamilə əvəz etmir — SPM-də ikili asılılıqlar məhz bu formatda çatdırılır

XCFramework nədir?

XCFramework — Apple tərəfindən WWDC 2019-da təqdim edilmiş ikili kitabxanaların və freymvorkların qablaşdırma formatı. Əsas məqsəd kitabxananın bütün hədəf platformalar və arxitekturalar üçün kompilyasiya edilmiş versiyalarını ehtiva edən bir bundle yaratmaqdır.

XCFramework meydana çıxmazdan əvvəl tərtibatçılar lipo vasitəsi ilə bir neçə arxitekturanı birləşdirən fat binary ilə .framework istifadə edirdilər. Bu yanaşma problemlər yaradırdı: simulyator üçün layihə qurarkən fat binary həm simulyator, həm də cihaz arxitekturasını ehtiva edirdi, bu da App Store-a qurma göndərərkən səhvlərə səbəb olurdu. Tərtibatçılar lazımsız arxitekturaları silmək üçün Run Script fazaları yazmalı idilər.

Apple Developer Documentation (2024) məlumatlarına görə, XCFramework Apple ekosisteminin bütün platformalarını dəstəkləyir: iOS, iPadOS, macOS, tvOS, watchOS, visionOS və katalizator tətbiqləri. Hər platforma paket daxilində ayrıca dilim alır ki, bu da arxitektura konfliktlərini aradan qaldırır və SDK-nın yayılmasını sadələşdirir.

XCFramework nə vaxt lazımdır?

XCFramework üç əsas ssenaridə tətbiq olunur: qapalı SDK-ların üçüncü tərəf tərtibatçılarına çatdırılması, Flutter və React Native üçün yerli modulların yayılması və ilkin kompilyasiya tələb edən kitabxanaların nəşri. Format Apple ekosistemində nəşr olunan bütün yeni SDK-lar üçün məcburidir.

Tərtibatçılar mənbə kodu açıqlana bilmədikdə, kitabxana mülkiyyət alqoritmlərindən istifadə etdikdə və ya lisenziya qorunması tələb olunduqda XCFramework-i seçirlər. Mənbə kodu ilə işləyən Swift Package Manager-dən fərqli olaraq, XCFramework artıq kompilyasiya edilmiş ikili faylları çatdırır.

XCFramework fat binary problemini necə həll edir?

Fat binary problemi ondan ibarət idi ki, universal ikili fayl bir Mach-O faylında bir neçə arxitekturanı ehtiva edirdi. Simulyator üçün tətbiq qurarkən Xcode ikili fayla cihazın arm64 arxitekturasını və simulyatorun x86_64 arxitekturasını daxil edirdi — App Store yalnız cihaz arxitekturasını qəbul edirdi.

Ənənəvi həll son qurmadan simulyator arxitekturalarını silmək üçün lipo çağırışı ilə Run Script fazasının əlavə edilməsini əhatə edirdi. Bu yanaşma kövrək idi və Xcode yeniləmələrində və ya yeni arxitekturalar əlavə edildikdə (məsələn, Apple Silicon-da simulyator üçün arm64) sıradan çıxırdı.

Swift.org (2023) məlumatlarına görə, Swift Package Manager komandası ilkin olaraq ikili asılılıqları dəstəkləməyə çalışarkən bu problemlə qarşılaşdı. XCFramework bunu format səviyyəsində həll etdi: hər dilim hədəf platforma və arxitekturanı təsvir edən Info.plist ilə ayrıca qovluqdur. Xcode qurma zamanı avtomatik olaraq uyğun dilimi seçir, post-emal tələb olunmur.

Ayrı dilimlərlə yanaşmanın üstünlükləri

XCFramework-də hər dilim yalnız bir platforma və arxitektura kombinasiyasını ehtiva edir. Məsələn, ios-arm64 yalnız iOS cihazları üçün ikili fayl, ios-x86_64-simulator isə yalnız Intel Mac simulyatoru üçündür. Xcode avtomatik olaraq düzgün dilimi seçir, arxitekturaların silinməsi skriptlərinə ehtiyacı aradan qaldırır və qurma xətaları riskini azaldır.

ios-arm64-x86_64-simulator dilimi Apple Silicon Mac-in dəstəyi üçün meydana çıxdı. Əvvəllər simulyator üçün arm64 (Apple Silicon) və x86_64 (Intel) altında ayrıca ikili fayl tələb olunurdu. XCFramework simulyator üçün bir dilim daxilində fat binary-ə icazə verir — bu, fat binary-nin əsaslandırıldığı yeganə istisnadır.

XCFramework paketinin strukturu

XCFramework paketi .xcframework genişlənməsi olan, yuxarı səviyyədə Info.plist və ikili dilimlərlə qovluqları ehtiva edən kataloqdur. Hər dilim müəyyən platforma üçün .framework və ya .a kitabxanasını ehtiva edir.

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

Paketin Info.plist faylı hər dilim üçün LibraryIdentifier, LibraryPathSupportedPlatform identifikatorlarını sadalayan AvailableLibraries açarını ehtiva edir. Xcode layihəyə XCFramework əlavə edərkən bu faylı oxuyur və axtarış yollarını və Embed Frameworks fazasını avtomatik konfiqurasiya edir.

Hər dilim öz Info.plist ilə tam hüquqlu .framework və ya statik kitabxanadır. Bu, XCFramework-ə qarışıq tipləri dəstəkləməyə imkan verir: bəzi platformalar üçün statik kitabxanalar və digərləri üçün dinamik freymvorklar, baxmayaraq ki, praktikada bütün dilimlər üçün bir tip daha çox istifadə olunur.

Command line-dan XCFramework yaradılması

XCFramework yaradılması xcodebuild -create-xcframework vasitəsilə həyata keçirilir. Əmr hər platforma üçün artıq kompilyasiya edilmiş .framework və ya .a kitabxanalarını qəbul edir və onları vahid paketdə birləşdirir.

Proses iki addımdan ibarətdir: əvvəlcə hər hədəf platforma üçün ikili fayllar kompilyasiya edilir, sonra onlar XCFramework-ə qablaşdırılır. Kompilyasiya üçün standart Xcode destination flagları istifadə olunur.

bash
# Addım 1: hər platforma üçün freymvorklar qurun
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"

# Addım 2: XCFramework yaradın
xcodebuild -create-xcframework -framework ./iOS/MyLibrary.framework -framework ./iOSSim/MyLibrary.framework -framework ./macOS/MyLibrary.framework -output ./MyLibrary.xcframework

-create-xcframework flagı Xcode 11-də meydana çıxdı. Əmr avtomatik olaraq düzgün kataloq strukturu yaradır və bütün platformaların təsviri ilə Info.plist generasiya edir. Əgər .framework-lərdən biri zədələnibsə və ya yanlış arxitektura ilə kompilyasiya edilibsə, xcodebuild validasiya mərhələsində xəta verir.

Qurma skriptləri vasitəsilə avtomatlaşdırma

CI/CD üçün bütün platformalar altında qurmanı və XCFramework yaradılmasını avtomatlaşdıran shell skripti istifadə olunur. Populyar yanaşma scheme və output path parametrləşdirilməsi ilə Makefile və ya Fastlane leyen formasında sarğıdır.

bash
# build_xcframework.sh — avtomatlaşdırma 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"

Belə bir skript testlərdən sonra CI pipeline-da (GitHub Actions, Bitrise, Jenkins) icra olunur. Nəticədə alınan XCFramework arxivləşdirilir və buraxılış artefaktı kimi yüklənir və ya pod spec vasitəsilə CocoaPods kimi asılılıq meneceri vasitəsilə nəşr olunur.

XCFramework-in Xcode layihəsinə qoşulması

XCFramework-in Xcode layihəsinə qoşulması axtarış yollarının əl ilə konfiqurasiyasını tələb etmir. Target parametrlərində General bölməsində Frameworks, Libraries, and Embedded Content hissəsinə .xcframework-i sürükləmək kifayətdir.

.framework-dən fərqli olaraq, XCFramework simulyator arxitekturalarını silmək üçün Run Script fazasının əlavə edilməsini tələb etmir. Xcode mövcud dilimləri avtomatik müəyyənləşdirir və yalnız cari qurma sxemi üçün lazım olanları daxil edir. Fiziki cihaz üçün ios-arm64 dilimi, simulyator üçün — ios-arm64-x86_64-simulator və ya ios-x86_64-simulator istifadə olunur.

swift
import MyLibrary

func processData() {
    // XCFramework qurma zamanı düzgün dilimi həll edir
    let processor = DataProcessor()
    let result = processor.analyze(input: "sample")
    print(result)
}

CocoaPods üçün inteqrasiya vendored_frameworks və dəstəklənən platformaların siyahısını göstərən podspec vasitəsilə həyata keçirilir. Asılılıq meneceri layihə üçün hansı dilimlərin lazım olduğunu avtomatik müəyyənləşdirir. Bir çox kommersiya SDK-ları — Firebase, Adjust, AppsFlyer — quraşdırmanı sadələşdirmək üçün XCFramework-ə keçib.

XCFramework və Swift Package Manager-in müqayisəsi

Swift Package Manager və XCFramework rəqabət aparmır, bir-birini tamamlayır. SPM mənbə kodu ilə işləyir və layihənin hər qurulmasında asılılıqları kompilyasiya edir. XCFramework istehlakçı tərəfində kompilyasiya tələb etmədən hazır ikili fayllar təqdim edir.

  • XCFramework — ikili çatdırılma, mənbə kodunun qorunması, bir paketdə bütün Apple platformalarının dəstəyi
  • SPM — açıq mənbə kodu ilə iş, yoxlama imkanı, hədəf platforma altında avtomatik kompilyasiya
  • SPM ikili asılılıqları hər iki yanaşmanı birləşdirərək qablaşdırma formatı kimi XCFramework-dən istifadə edir

Swift Package Manager 5.3 buraxılışı ilə Apple ikili asılılıqların dəstəyini əlavə etdi — indi SPM XCFramework-i uzaq asılılıq kimi yükləyə bilər. Package.swift ikili artefaktın URL-ni və doğrulama üçün onun checksum-nı göstərir.

Swift Package Manager documentation (2024) məlumatlarına görə, ikili asılılıqlar mənbə kodunu açıqlamayan SDK-lar və ya kompilyasiyası qeyri-mütənasib çox vaxt aparan kitabxanalar üçün tövsiyə olunur. Open-source layihələr üçün SPM vasitəsilə mənbə kodu ilə çatdırılma üstünlük təşkil edir.

KriteriyaXCFrameworkSwift Package Manager
Formatİkili (.xcframework)Mənbə kodu
Kodun qorunmasıTamYox
Qurma vaxtıMinimal (kopiyalama)Kod həcmindən asılıdır
Platforma elastikliyiBütün Apple platformalarıPackage.swift-dən asılıdır
İnteqrasiyaDrag-and-drop və ya SPMPackage.swift

Tez-tez verilən suallar

XCFramework və .framework arasında nə fərq var?

.framework — cihaz və simulyator arxitekturaları ilə fat binary ehtiva edən köhnəlmiş format. XCFramework hər dilimi ayrıca saxlayır, qurma zamanı arxitektura konfliktlərini aradan qaldırır. Apple bütün yeni layihələr və mövcud miqrasiyalar üçün XCFramework tövsiyə edir.

XCFramework CocoaPods ilə istifadə edilə bilərmi?

CocoaPods 1.9 versiyasından başlayaraq XCFramework-i dəstəkləyir. Podspec-də spec.vendored_frameworks və spec.static_framework göstərmək kifayətdir. Menecer layihənin platforması üçün mövcud dilimləri nəzərə alaraq asılılıqları avtomatik həll edir.

.framework-dən XCFramework-ə keçmək məcburidirmi?

Apple .framework dəstəyini silmir, lakin yeni SDK-lar üçün yalnız XCFramework tövsiyə edir. Köhnə formatda fat binary ilə App Store-a tətbiq göndərərkən simulyator arxitekturaları səbəbindən Invalid Bundle xətası mümkündür ki, bu da XCFramework-i praktik zərurətə çevirir.

XCFramework Swift Package Manager ilə necə işləyir?

Swift 5.3-dən başlayaraq, SPM-də ikili asılılıqlar XCFramework-dən istifadə edir. Package.swift ikili paketin url və checksum-nı göstərir. SPM yükləyir, bütövlüyü yoxlayır və mənbə kodunun kompilyasiyası olmadan XCFramework-i sistem asılılığı kimi qoşur.

XCFramework visionOS platformasını dəstəkləyirmi?

visionOS XCFramework-də Xcode 15-dən başlayaraq dəstəklənir. WWDC 2023-də Apple formatın Apple Vision Pro üçün genişləndirildiyini təsdiqlədi. visionOS üçün dilim SupportedPlatform = xros ilə və arm64 arxitekturasını ehtiva edir.

Nəticə

  • XCFramework — .framework-i əvəz edən və fat binary problemlərini həll edən Apple-ın müasir ikili kitabxana çatdırılma formatı
  • Ayrı dilimlər hər platforma və arxitektura üçün qurma zamanı konfliktləri və Run Script fazalarına ehtiyacı aradan qaldırır
  • Yaradılma xcodebuild -create-xcframework vasitəsilə CI/CD-də avtomatlaşdırılır və lipo ilə ikili faylların əl ilə birləşdirilməsini tələb etmir
  • İnteqrasiya Xcode layihəsində axtarış yollarını konfiqurasiya etmədən .xcframework-i Embedded Binaries bölməsinə sürükləməklə həyata keçirilir
  • Swift Package Manager ikili asılılıqlar üçün XCFramework-i dəstəkləyir, idarəetmə rahatlığını kod qorunması ilə birləşdirir
  • Bütün platformalar Apple — iOS, macOS, tvOS, watchOS və visionOS — vahid paketdə dəstəklənir
  • Tövsiyə olunur bütün yeni SDK-lar və mövcud .framework kitabxanalarının miqrasiyası üçün XCFramework istifadə edilsin

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun