Podfile — konfigurační soubor pro správce závislostí CocoaPods, používaný v iOS a macOS projektech. Obsahuje seznam knihoven, verzí a nastavení platformy, určující sestavení aplikace. Podle údajů CocoaPods, 2025 používá tento nástroj více než 3 miliony projektů. Podfile automaticky integruje knihovny třetích stran přes Xcode Workspace bez ručního kopírování souborů.
Hlavní body
Podfile je deklarativní skript v jazyce Ruby, ve kterém jsou vyjmenovány externí závislosti pro iOS, macOS, tvOS nebo watchOS projekt. Nachází se v kořenovém adresáři projektu a slouží jako jediný konfigurační bod pro správce balíčků CocoaPods. Bez Podfile by vývojáři museli ručně stahovat knihovny, kopírovat je do projektu a konfigurovat linker flags v Xcode.
CocoaPods analyzuje Podfile a vytváří uzavřený soubor Podfile.lock, který fixuje přesné verze nainstalovaných knihoven. To zaručuje reprodukovatelnost sestavení na všech počítačích vývojového týmu: pokud jeden vývojář aktualizuje Alamofire na verzi 5.9, Podfile.lock zaznamená tuto změnu a všichni ostatní při spuštění pod install obdrží přesně stejnou verzi. Bez tohoto mechanismu by různí vývojáři mohli mít různé verze závislostí, což vede k obtížně nalezitelným chybám.
Podfile řeší tři hlavní úkoly: správu závislostí s kontrolou verzí, konfiguraci cílové platformy s minimální verzí OS a automatickou integraci knihoven přes Xcode Workspace. Při každé instalaci CocoaPods generuje soubor Pods.xcodeproj, který je propojen s hlavním projektem přes workspace. Vývojář nemusí přemýšlet o tom, jak jsou knihovny připojeny — stačí je uvést v Podfile.
Podfile používá syntaxi Ruby, ale vyžaduje minimální znalost jazyka. Základní struktura se skládá z direktiv definujících platformu, cíle sestavení a seznam závislostí. Každá direktiva je spouštěna v kontextu interpretu Ruby, takže Podfile podporuje podmíněné konstrukce, cykly a proměnné pro složité konfigurace.
Každý cíl sestavení aplikace je popsán uvnitř bloku target. Pro standardní projekt Xcode je to obvykle jeden cíl se jménem aplikace. Vnořené targety lze použít pro unit testy, UI testy a rozšíření. Doporučuje se izolovat závislosti různých targetů: hlavní knihovny v hlavním targetu, testovací frameworky v testovacím targetu, aby se předešlo vniknutí zbytečných závislostí do produkční verze.
# Příklad minimálního Podfile pro iOS projekt
target 'MyApp' do
use_frameworks!
pod 'Alamofire', '~> 5.8'
pod 'Kingfisher', '~> 7.10'
pod 'SnapKit', '~> 5.6'
end
Direktiva platform určuje minimální verzi OS, pro kterou je projekt sestavován. Toto je povinný parametr ovlivňující kompatibilitu knihoven. Knihovny v CocoaPods obvykle uvádějí své minimální verze OS v podspec, a pokud je platforma projektu nižší než požadovaná, pod install zobrazí chybu. Pro iOS projekty je minimální verze obvykle 15.0 a vyšší, pro macOS — 12.0 a vyšší.
platform :ios, '15.0'
platform :macos, '12.0'
platform :tvos, '16.0'
Závislosti lze zadávat globálně mimo bloky target nebo lokálně uvnitř konkrétního cíle. Globální pody se připojují ke všem cílům projektu, což je vhodné pro knihovny obecného použití jako CocoaLumberjack pro logování. Lokální závislosti jsou užitečné pro oddělení testovacích frameworků od produkčního kódu: Quick a Nimble pro testy, Firebase pro analytiku, Realm pro ukládání dat.
# Globální závislost pro všechny cíle
pod 'CocoaLumberjack'
target 'MyApp' do
# Lokální závislosti hlavní aplikace
pod 'Firebase/Crashlytics'
pod 'Firebase/Analytics'
pod 'RealmSwift'
end
target 'MyAppTests' do
# Testovací frameworky se nedostanou do release
pod 'Quick'
pod 'Nimble'
end
CocoaPods podporuje flexibilní zadávání verzí pomocí porovnávacích operátorů. To umožňuje kontrolovat aktualizace a vyhýbat se nekompatibilním změnám API. Výběr správného operátora je kritický pro stabilitu projektu: příliš přísná omezení blokují aktualizace s opravami chyb, příliš volná omezení mohou vést k neočekávaným haváriím při hlavních aktualizacích.
| Operátor | Význam | Příklad |
|---|---|---|
| = 1.2.3 | Přesná verze — maximální stabilita | pod 'Alamofire', '= 5.8.0' |
| ~> 1.2 | Kompatibilní verze >= 1.2 a < 2.0 | pod 'Kingfisher', '~> 7.10' |
| >= 1.0 | Minimální verze bez horní hranice | pod 'SnapKit', '>= 5.0' |
| < 2.0 | Maximální verze | pod 'RxSwift', '< 6.5' |
Doporučuje se používat operátor ~> pro kompatibilní aktualizace. Chrání před hlavními změnami API a zároveň umožňuje přijímat opravy a drobná vylepšení. Například ~> 5.8 povoluje verze 5.8.0, 5.8.1, 5.9.0, ale blokuje 6.0.0, kde mohou být kritické změny API.
Soubor Podfile.lock fixuje přesné verze a musí být uložen v systému pro správu verzí. Příkaz pod update aktualizuje závislosti na nejnovější povolené verze a přepíše lock soubor, zatímco pod install používá již zafixované verze z Podfile.lock pro zaručení totožnosti sestavení.
Podfile podporuje rozdělení konfigurací pomocí direktiv pro různá schémata sestavení. Lze připojit různé sady knihoven pro Debug a Release, což výrazně zmenšuje velikost produkčního buildu a urychluje jeho kompilaci. Lintery, generátory kódu a nástroje pro ladění by měly pracovat pouze v konfiguraci Debug.
target 'MyApp' do
# Pouze pro Debug: linter a ladění
pod 'SwiftLint', :configurations => ['Debug']
# Produkce: analytika a monitoring
pod 'Fabric'
pod 'TestFairy', :configurations => ['Release']
end
Direktiva inhibit_all_warnings! vypíná varování ze všech podů. To je užitečné ve velkých projektech, kde knihovny třetích stran generují v logách sestavení mnoho šumu, což ztěžuje hledání vlastních varování a chyb. Pro selektivní vypnutí lze použít inhibit_warnings na konkrétní pod.
Knihovny používané pouze ve fázi vývoje se doporučuje izolovat pomocí konfigurací Debug. SwiftLint, OHHTTPStubs, RevealServer a podobné nástroje by měly být v produkčním sestavení nedostupné. To nejen zmenšuje velikost IPA, ale také eliminuje náhodné odhalení ladících informací v released verzi aplikace. Každý pod ponechaný v Release bez potřeby zvyšuje dobu spouštění a spotřebu paměti. CocoaPods navíc podporuje direktivu abstract_target, která seskupuje společné závislosti bez vytvoření fyzického cíle sestavení.
Pro velké projekty s modulární architekturou se doporučuje používat více-targetovou strukturu Podfile: každý modul aplikace obdrží vlastní target s izolovanou sadou závislostí. To urychluje inkrementální sestavení, protože při změně jednoho modulu se překompilují pouze jeho závislosti. CocoaPods automaticky řeší křížící se závislosti mezi targety a zaručuje, že každá knihovna je nainstalována v jednotné verzi pro všechny moduly projektu.
Hook post_install se spouští po instalaci všech podů. Umožňuje programově měnit nastavení projektu Xcode, například konfigurovat minimální verzi iOS pro jednotlivé targety, přidávat build phases nebo upravovat infoplists knihoven. Jedná se o výkonný mechanismus přizpůsobení, bez kterého některé knihovny třetích stran nelze správně nakonfigurovat.
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
# Vynucení minimální verze pro všechny pody
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
end
end
end
Direktiva use_frameworks! zapíná použití dynamických frameworků místo statických knihoven. Toto je povinný parametr pro Swift projekty a knihovny napsané ve Swiftu, protože Swift runtime vyžaduje dynamické linkování. Pro Objective-C projekty však lze použít use_frameworks! :linkage => :static pro sestavení statických frameworků, což snižuje dobu spouštění aplikace a velikost balíčku.
Příznak static_frameworks v instalátoru umožňuje sestavovat statické frameworky, což zkracuje dobu spouštění aplikace. Volba mezi static a dynamic závisí na architektuře projektu: dynamické frameworky se načítají déle, ale umožňují systému sdílet paměť mezi procesy. Statické frameworky jsou kompaktnější, ale každá kopie zabírá samostatnou paměť v každém procesu.
Kromě post_install Podfile podporuje hook pre_install, který se spouští před instalací podů. Je užitečný pro úpravu podspec před integrací, například pro změnu zdrojového kódu knihoven pomocí patchů nebo pro konfiguraci specifických příznaků kompilátoru. Hooky dělají z Podfile nejen seznam závislostí, ale plnohodnotný konfigurační skript automatizující proces sestavení.
Direktiva source určuje URL repozitáře CocoaPods Specs. Ve výchozím nastavení se používá oficiální repozitář https://github.com/CocoaPods/Specs.git, ale pro projekty s privátními knihovnami lze přidat vlastní soukromý repozitář Specs. Více zdrojů umožňuje kombinovat veřejné a soukromé podspec v jednom Podfile. Pořadí zdrojů je důležité: CocoaPods hledá pody v uvedeném pořadí a používá první nalezenou instanci, což umožňuje přepisovat veřejné knihovny soukromými verzemi.
Často kladené otázky
Podfile se nachází v kořenovém adresáři projektu, vedle souboru .xcodeproj nebo .xcworkspace. Při inicializaci CocoaPods přes pod init je soubor automaticky vytvořen s minimální konfigurací a komentáři vysvětlujícími základní direktivy.
Příkaz pod install instaluje závislosti podle Podfile.lock beze změny verzí — používá se při prvním klonování projektu nebo po přidání nových podů. pod update aktualizuje všechny nebo uvedené pody na nejnovější verze povolené Podfile a přepisuje Podfile.lock s novými zafixovanými verzemi.
Ano, Podfile.lock musí být v repozitáři. Zaručuje, že všichni vývojáři a CI systémy používají stejné verze závislostí, čímž se předchází nekonzistentním sestavením. Bez Podfile.lock by každé spuštění pod install mohlo nainstalovat různé verze knihoven, což vede k chybám, které nelze reprodukovat na jiném počítači.
Použijte direktivu :path pro zadání cesty k lokální složce s podspec: pod 'MyLibrary', :path => '../MyLibrary'. To je vhodné pro vývoj vlastních knihoven v monorepozitářích a pro testování změn před publikací podspec do CocoaPods trunk.
CocoaPods zobrazí chybu s uvedením konfliktních podů a jejich požadavků na verze. Řešení: uvolněte omezení verzí pomocí operátoru ~> místo přesné verze, aktualizujte konfliktní knihovny na kompatibilní verze nebo použijte pod update pro jednotlivé pody. V krajním případě můžete smazat Podfile.lock a spustit pod install znovu.
Shrnutí
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í.
Přečtěte si také