XCFramework: co to je, formát binární dodávky a použití

Autor: IT Sectr Publikováno: 2026-06-05 Doba čtení: 7 min

XCFramework — binární formát Apple, který spojuje knihovny pro iOS, macOS, tvOS a watchOS do jednoho balíčku. Byl navržen jako náhrada .framework a odstranění problémů fat binaries při kompilaci pro různé architektury simulátoru a zařízení. Podle Apple WWDC 2019 se XCFramework stal povinným formátem pro dodávku SDK podporujících více platforem a zcela nahradil zastaralý přístup s univerzálními binárními soubory.

Hlavní body

  • XCFramework — univerzální formát Apple pro dodávku knihoven, podporující více platforem a architektur v jednom bundle
  • Přístup fat binary byl nahrazen oddělenými řezy pro každou platformu, což odstraňuje problémy kompilace s architekturami simulátoru
  • Vytvoření se provádí pomocí xcodebuild -create-xcframework bez nutnosti ručně spojovat binární soubory pomocí lipo
  • Připojení v Xcode probíhá přes Embed & Sign bez dalších skriptů pro odstranění architektur simulátoru
  • Swift Package Manager zcela nenahrazuje XCFramework — binární závislosti v SPM jsou dodávány právě v tomto formátu

Co je XCFramework?

XCFramework — formát balení binárních knihoven a frameworků, představený společností Apple na WWDC 2019. Hlavním cílem je vytvoření jednoho bundle, který obsahuje zkompilované verze knihovny pro všechny cílové platformy a architektury.

Před příchodem XCFramework používali vývojáři .framework s fat binary, který spojoval více architektur pomocí nástroje lipo. Tento přístup vytvářel problémy: při kompilaci projektu pro simulátor fat binary obsahoval jak architekturu simulátoru, tak zařízení, což vedlo k chybám při odesílání sestavení do App Store. Vývojáři museli psát fáze Run Script pro odstranění nepotřebných architektur.

Podle Apple Developer Documentation (2024) XCFramework podporuje všechny platformy ekosystému Apple: iOS, iPadOS, macOS, tvOS, watchOS, visionOS a katalyzátorové aplikace. Každá platforma dostává samostatný řez uvnitř balíčku, což eliminuje konflikty architektur a zjednodušuje distribuci SDK.

Kdy je XCFramework potřeba?

XCFramework se používá ve třech hlavních scénářích: dodávka uzavřených SDK třetím stranám, distribuce nativních modulů pro Flutter a React Native a publikování knihoven vyžadujících předběžnou kompilaci. Formát je povinný pro všechna nová SDK publikovaná v ekosystému Apple.

Vývojáři volí XCFramework, když zdrojový kód nelze zveřejnit, když knihovna používá proprietární algoritmy nebo když je vyžadována licenční ochrana. Na rozdíl od Swift Package Manager, který pracuje se zdrojovým kódem, XCFramework dodává již zkompilované binární soubory.

Jak XCFramework řeší problém fat binary?

Problém fat binary spočíval v tom, že univerzální binární soubor obsahoval několik architektur v jednom souboru Mach-O. Při kompilaci aplikace pro simulátor Xcode zahrnul do binárního souboru architekturu arm64 zařízení a x86_64 simulátoru — App Store přijímal pouze architekturu zařízení.

Tradiční řešení zahrnovalo přidání fáze Run Script s voláním lipo pro odstranění architektur simulátoru z konečného sestavení. Tento přístup byl křehký a rozbíjel se při aktualizacích Xcode nebo přidávání nových architektur (např. arm64 pro simulátor na Apple Silicon).

Podle Swift.org (2023) tým Swift Package Manager zpočátku narazil na tento problém při pokusu o podporu binárních závislostí. XCFramework jej vyřešil na úrovni formátu: každý řez je samostatná složka s Info.plist popisujícím cílovou platformu a architekturu. Xcode automaticky vybírá správný řez při kompilaci, aniž by vyžadoval následné zpracování.

Výhody přístupu s oddělenými řezy

Každý řez v XCFramework obsahuje pouze jednu kombinaci platformy a architektury. Například ios-arm64 obsahuje binární soubor pouze pro zařízení iOS a ios-x86_64-simulator pouze pro simulátor Intel Mac. Xcode automaticky vybírá správný řez, čímž eliminuje potřebu skriptů pro odstraňování architektur a snižuje riziko chyb kompilace.

Řez ios-arm64-x86_64-simulator vznikl pro podporu Apple Silicon Mac. Dříve simulátor vyžadoval samostatný binární soubor pro arm64 (Apple Silicon) a x86_64 (Intel). XCFramework povoluje fat binary uvnitř jednoho řezu pro simulátor — to je jediná výjimka, kdy je fat binary ospravedlnitelný.

Struktura balíčku XCFramework

Balíček XCFramework je adresář s příponou .xcframework, obsahující Info.plist na nejvyšší úrovni a složky s binárními řezy. Každý řez obsahuje knihovnu .framework nebo .a pro konkrétní platformu.

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 balíčku obsahuje klíč AvailableLibraries, který vypisuje identifikátory LibraryIdentifier, LibraryPath a SupportedPlatform pro každý řez. Xcode čte tento soubor při přidávání XCFramework do projektu a automaticky konfiguruje cesty vyhledávání a fázi Embed Frameworks.

Každý řez představuje plnohodnotný .framework nebo statickou knihovnu s vlastním Info.plist. To umožňuje XCFramework podporovat smíšené typy: statické knihovny pro některé platformy a dynamické frameworky pro jiné, i když v praxi se častěji používá jeden typ pro všechny řezy.

Vytvoření XCFramework z příkazového řádku

Vytvoření XCFramework se provádí pomocí xcodebuild -create-xcframework. Příkaz přijímá již zkompilované knihovny .framework nebo .a pro každou platformu a spojuje je do jednoho balíčku.

Proces se skládá ze dvou kroků: nejprve se zkompilují binární soubory pro každou cílovou platformu, poté se zabalí do XCFramework. Pro kompilaci se používají standardní destination příznaky Xcode.

bash
# Krok 1: sestavte frameworky pro každou platformu
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"

# Krok 2: vytvořte XCFramework
xcodebuild -create-xcframework -framework ./iOS/MyLibrary.framework -framework ./iOSSim/MyLibrary.framework -framework ./macOS/MyLibrary.framework -output ./MyLibrary.xcframework

Příznak -create-xcframework se objevil v Xcode 11. Příkaz automaticky vytvoří správnou strukturu adresářů a vygeneruje Info.plist s popisem všech platforem. Pokud je jeden z .framework poškozen nebo zkompilován s nesprávnou architekturou, xcodebuild vydá chybu ve fázi ověření.

Automatizace pomocí skriptů kompilace

Pro CI/CD se používá shell skript, který automatizuje kompilaci pro všechny platformy a vytvoření XCFramework. Oblíbeným přístupem je obálka ve formě Makefile nebo Fastlane lane s parametrizací scheme a output path.

bash
# build_xcframework.sh — automatizační skript
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"

Takový skript se spouští v CI pipeline (GitHub Actions, Bitrise, Jenkins) po spuštění testů. Výsledný XCFramework je archivován a nahrán jako artefakt vydání nebo publikován prostřednictvím správce závislostí, jako je CocoaPods, pomocí pod spec.

Připojení XCFramework v projektu Xcode

Připojení XCFramework v projektu Xcode nevyžaduje ruční konfiguraci cest vyhledávání. Stačí přetáhnout .xcframework do sekce Frameworks, Libraries, and Embedded Content v nastavení General targetu.

Na rozdíl od .framework, XCFramework nevyžaduje přidání fáze Run Script pro odstranění architektur simulátoru. Xcode automaticky určuje dostupné řezy a zahrnuje pouze ty potřebné pro aktuální schéma kompilace. Pro fyzické zařízení se používá řez ios-arm64, pro simulátor — ios-arm64-x86_64-simulator nebo ios-x86_64-simulator.

swift
import MyLibrary

func processData() {
    // XCFramework řeší správný řez v době kompilace
    let processor = DataProcessor()
    let result = processor.analyze(input: "sample")
    print(result)
}

Pro CocoaPods probíhá integrace prostřednictvím podspec s uvedením vendored_frameworks a seznamu podporovaných platforem. Správce závislostí automaticky určuje, které řezy jsou pro projekt potřeba. Mnoho komerčních SDK — Firebase, Adjust, AppsFlyer — přešlo na XCFramework pro zjednodušení instalace.

Srovnání XCFramework a Swift Package Manager

Swift Package Manager a XCFramework si nekonkurují, ale vzájemně se doplňují. SPM pracuje se zdrojovým kódem a kompiluje závisnosti při každé kompilaci projektu. XCFramework poskytuje hotové binární soubory, aniž by vyžadoval kompilaci na straně spotřebitele.

  • XCFramework — binární dodávka, ochrana zdrojového kódu, podpora všech platforem Apple v jednom balíčku
  • SPM — práce s otevřeným zdrojovým kódem, možnost inspekce, automatická kompilace pro cílovou platformu
  • Binární závislosti SPM používají XCFramework jako formát balení, kombinují oba přístupy

S vydáním Swift Package Manager 5.3 Apple přidal podporu pro binární závislosti — nyní SPM může načíst XCFramework jako vzdálenou závislost. Package.swift uvádí URL binárního artefaktu a jeho kontrolní součet pro ověření.

Podle Swift Package Manager documentation (2024) jsou binární závislosti doporučeny pro SDK, která nezveřejňují zdrojový kód, nebo pro knihovny, jejichž kompilace trvá neúměrně dlouho. Pro open-source projekty je preferována dodávka se zdrojovým kódem prostřednictvím SPM.

KritériumXCFrameworkSwift Package Manager
FormátBinární (.xcframework)Zdrojový kód
Ochrana kóduPlnáNe
Doba kompilaceMinimální (kopírování)Závisí na objemu kódu
Flexibilita platforemVšechny platformy AppleZávisí na Package.swift
IntegraceDrag-and-drop nebo SPMPackage.swift

Často kladené otázky

Jaký je rozdíl mezi XCFramework a .framework?

.framework — zastaralý formát obsahující fat binary s architekturami zařízení a simulátoru. XCFramework ukládá každý řez samostatně, čímž eliminuje konflikty architektur při kompilaci. Apple doporučuje XCFramework pro všechny nové projekty a migraci stávajících.

Lze použít XCFramework s CocoaPods?

CocoaPods podporuje XCFramework od verze 1.9. V podspec stačí uvést spec.vendored_frameworks a spec.static_framework. Správce automaticky řeší závislosti s ohledem na dostupné řezy pro platformu projektu.

Je povinné přejít z .framework na XCFramework?

Apple neodstraňuje podporu .framework, ale pro nová SDK doporučuje výhradně XCFramework. Při odesílání aplikace do App Store s fat binary ve starém formátu jsou možné chyby Invalid Bundle kvůli architekturám simulátoru, což činí XCFramework praktickou nutností.

Jak XCFramework pracuje se Swift Package Manager?

Od Swift 5.3 binární závislosti v SPM používají XCFramework. Package.swift uvádí url a checksum binárního balíčku. SPM stahuje, ověřuje integritu a připojuje XCFramework jako systémovou závislost bez kompilace zdrojového kódu.

Podporuje XCFramework platformu visionOS?

visionOS je podporován v XCFramework od Xcode 15. Na WWDC 2023 Apple potvrdil, že formát byl rozšířen pro Apple Vision Pro. Řez pro visionOS má SupportedPlatform = xros a zahrnuje architekturu arm64.

Shrnutí

  • XCFramework — moderní formát Apple pro binární dodávku knihoven, nahrazující .framework a řešící problémy fat binary
  • Oddělené řezy pro každou platformu a architekturu eliminují konflikty při kompilaci a potřebu fází Run Script
  • Vytvoření pomocí xcodebuild -create-xcframework je automatizováno v CI/CD a nevyžaduje ruční spojování binárních souborů přes lipo
  • Integrace v projektu Xcode se provádí přetažením .xcframework do sekce Embedded Binaries bez konfigurace cest vyhledávání
  • Swift Package Manager podporuje XCFramework pro binární závislosti a kombinuje pohodlí správy s ochranou kódu
  • Všechny platformy Apple — iOS, macOS, tvOS, watchOS a visionOS — jsou podporovány v jednom balíčku
  • Doporučuje se používat XCFramework pro všechna nová SDK a při migraci stávajících knihoven .framework

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také