CocoaPods Trunk — serverová služba ekosystému CocoaPods určená k publikaci, hostingu a správě pod knihoven. Trunk nahradil zastaralý mechanismus publikace přes GitHub repozitáře a forky a poskytl centralizovanou infrastrukturu s autentizací, správou relací, verzováním a validací před publikací. Vývojáři iOS a macOS používají pod trunk push pro odesílání knihoven do veřejného registru.
Hlavní body
pod trunk register s potvrzením e-mailempod trunk push prochází validací, lintingem a nahráním do registrupod trunk me, pod trunk add-owner, pod trunk deprecate pro administraci podůCocoaPods Trunk — je serverová infrastruktura spuštěná v roce 2015 pro centralizovanou publikaci pod knihoven. Před příchodem Trunku byl každý pod distribuován přes Git repozitář: vývojář musel vytvořit veřejný repozitář, přidat podspec soubor a odeslat Pull Request do centrálního repozitáře CocoaPods/Specs. Tento přístup vyžadoval ruční moderování a způsoboval zpoždění při publikaci aktualizací.
Trunk tyto problémy vyřešil poskytnutím jednotného API pro publikaci, aktualizaci a mazání podů. Služba zahrnuje čtyři klíčové komponenty:
Architektura Trunku je postavena na stacku Ruby on Rails s databází PostgreSQL. Služba používá HTTP API s JSON formátem pro všechny operace a CLI klient pod trunk je součástí distribuce CocoaPods a instaluje se spolu s hlavním gemem cocoapods.
V současné době bylo přes Trunk publikováno více než 100 000 podů a celkový počet stažení přesahuje 50 miliard. Služba denně zpracovává tisíce požadavků na publikaci a aktualizaci knihoven od vývojářů z celého světa.
Před publikací podu je nutné se zaregistrovat v Trunku. Proces se skládá z jednoho kroku — příkazu pod trunk register:
pod trunk register your@email.com 'Your Name' --description='MacBook Pro, vývoj iOS'Po provedení příkazu je na zadaný e-mail odeslán dopis s odkazem pro potvrzení. Kliknutím na odkaz se aktivuje účet a vytvoří se token relace, který je uložen v systémové klíčence (Keychain na macOS, gnome-keyring nebo ekvivalent na Linuxu). Token se automaticky používá při všech následujících operacích pod trunk.
Parametr --description je volitelný, ale doporučený — pomáhá identifikovat relaci při prohlížení aktivních relací přes pod trunk me. Pokud pracujete na více počítačích (pracovní stanice, CI server), popis vám umožní odlišit jednu relaci od druhé.
Pro kontrolu stavu autentizace se používá příkaz:
pod trunk meVýstup zobrazuje e-mail, jméno, seznam vašich podů (pokud jste již publikovali) a aktivní relace. Příklad výsledku:
- Name: Your Name
- Email: your@email.com
- Since: 2024-03-15 10:30 UTC
- Pods:
- MyLibrary
- AnotherPod
- Sessions:
- 2024-03-15 10:30 UTC - MacBook Pro, vývoj pro iOSNa CI serverech (GitHub Actions, GitLab CI, Jenkins) probíhá autentizace pomocí tokenu předaného prostřednictvím proměnné prostředí COCOAPODS_TRUNK_TOKEN. Token lze získat příkazem:
pod trunk me --token-onlyTento token je uložen v nastavení CI jako tajná proměnná a ve fázi publikace se používá bez opětovné registrace. Příklad pro GitHub Actions:
env:
COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}Důležité: token poskytuje plný přístup ke správě podů vázaných na účet. Nikdy jej nezveřejňujte ve veřejných repozitářích a nepředávejte třetím stranám. Při kompromitaci lze token odvolat pomocí pod trunk remove-session nebo odstranit všechny relace prostřednictvím ovládacího panelu na webu CocoaPods.
Soubor podspec (.podspec nebo .podspec.json) — je manifest knihovny obsahující metadata, závislosti, informace o platformách a zdrojovém kódu. Trunk tento soubor používá pro validaci a registraci podu. Minimální podspec pro publikaci vypadá takto:
Pod::Spec.new do |s|
s.name = 'MyLibrary'
s.version = '0.1.0'
s.summary = 'Stručný popis knihovny'
s.description = 'Podrobný popis s vysvětlením možností'
s.homepage = 'https://github.com/username/MyLibrary'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'Your Name' => 'your@email.com' }
s.source = { :git => 'https://github.com/username/MyLibrary.git', :tag => s.version.to_s }
s.source_files = 'Sources/**/*.{swift,h,m}'
s.platform = :ios, '12.0'
s.swift_version = '5.7'
endKlíčová pole podspec:
MAJOR.MINOR.PATCH. Trunk nepřijímá opětovnou publikaci stejné verze — je třeba zvýšit číslo.MIT, Apache-2.0, BSD nebo jinou otevřenou licenci.Před publikací je třeba zkontrolovat správnost podspec pomocí linteru:
pod lib lint MyLibrary.podspecLinter kontroluje syntaxi, přítomnost povinných polí, správnost cest k souborům a řešitelnost závislostí. Pokud se v procesu lintingu používají soukromé zdroje (private specs), přidá se přepínač --sources. Pro přeskočení síťového stahování (pouze lokální kontrola) se používá přepínač --local-only.
Hlavní příkaz pro publikaci podu — pod trunk push. Odesílá podspec soubor na server Trunk, kde prochází úplnou validací a je registrován ve veřejném registru. Syntaxe:
pod trunk push MyLibrary.podspecPřepínač --allow-warnings povoluje publikaci při výskytu varování. Ve výchozím nastavení jakákoli varování (warnings) blokují publikaci. Pokud má knihovna známá varování, která neovlivňují funkčnost, můžete tento přepínač použít. Důležité: chyby (errors) vždy blokují publikaci, bez ohledu na přepínače.
Přepínač --synchronous činí požadavek synchronním — terminál čeká na dokončení validace na serveru. Ve výchozím nastavení příkaz vrátí řízení ihned po odeslání a server zpracovává publikaci asynchronně. Synchronní režim je užitečný v CI/CD, když další krok pipeline závisí na úspěšnosti publikace.
Přepínač --skip-import-validation přeskočí kontrolu importu knihovny do testovacího projektu. To urychluje publikaci, ale nezaručuje, že se knihovna skutečně zkompiluje. Použijte tento přepínač pouze pokud jste si jisti správností sestavení.
Příklad publikace s typickými možnostmi:
pod trunk push MyLibrary.podspec \
--allow-warnings \
--synchronous \
--skip-import-validationPo úspěšné publikaci Trunk vrátí JSON s podrobnostmi:
Congrats
MyLibrary (0.1.0) successfully published
Pod URL: https://cocoapods.org/pods/MyLibraryKnihovna se stane dostupnou pro instalaci přes Podfile libovolného iOS nebo macOS projektu. Obvykle se data v indexu vyhledávání CocoaPods aktualizují během několika minut, ale ve vzácných případech může indexace trvat až hodinu.
Důležité omezení: jednou publikovanou verzi podu nelze smazat. Toto je provedeno, aby se zabránilo poškození projektů, které tuto verzi již používají. Pokud publikace proběhla s chybou, můžete publikovat další verzi s opravou, ale vrácení zpět není možné. Výjimkou je pod trunk delete, dostupný pouze zaměstnancům CocoaPods a používaný v extrémních případech (porušení licence, škodlivý kód).
CocoaPods Trunk poskytuje několik příkazů pro správu publikovaných podů:
Pro převedení práv k publikaci podu jinému vývojáři se používá následující příkaz:
pod trunk add-owner MyLibrary developer@email.comPo provedení získá nový vlastník plný přístup ke správě podu: publikování nových verzí, přidávání a odebírání dalších vlastníků, označení podu jako zastaralého. Vlastníkem může být jakýkoli registrovaný uživatel Trunku — předchozí registrace je povinná.
Pokud vývojář opustil projekt nebo by již neměl mít přístup k podu:
pod trunk remove-owner MyLibrary developer@email.comVlastníka může odebrat pouze aktuální vlastník. Nelze odebrat posledního vlastníka podu — nejprve je třeba přidat nového. Tím se zabrání situaci, kdy pod zůstane bez vlastníka.
Pokud knihovna již není podporována, lze ji označit jako zastaralou (deprecated). Toto pod z registru neodstraní, ale přidá varování uživatelům při instalaci:
pod trunk deprecate MyLibraryVolitelně lze zadat náhradní pod:
pod trunk deprecate MyLibrary --in-favor-of=NewLibraryPři instalaci zastaralého podu CocoaPods zobrazí varování v terminálu a doporučí přechod na zadanou náhradu. Toto je správný způsob ukončení podpory knihovny bez narušení sestavení stávajících projektů.
Informace o podu jsou k dispozici prostřednictvím příkazu pod trunk info:
pod trunk info MyLibraryPříkaz zobrazuje všechny verze podu, data publikace, seznam vlastníků a stav (aktivní/zastaralý). Pro zobrazení podrobností konkrétní verze se používá pod spec cat MyLibrary 0.1.0.
Při práci s Trunkem se vývojáři často setkávají s typickými chybami. Podívejme se na ty nejčastější:
Příznak: [!] Authentication failed. You need to register a session first.
Příčina: Token relace chybí nebo vypršel. Tokeny mají omezenou dobu platnosti (výchozí 30 dní bez aktivity).
Řešení: Znovu spusťte pod trunk register your@email.com 'Your Name'. Pokud používáte CI, zkontrolujte aktuálnost proměnné COCOAPODS_TRUNK_TOKEN a v případě potřeby vygenerujte nový token.
Příznak: [!] You have already pushed version 0.1.0 for MyLibrary.
Příčina: Pokus o opětovnou publikaci existující verze. Trunk neumožňuje přepisování verzí.
Řešení: Zvyšte verzi v podspec podle sémantického verzování. Pokud jste udělali chybu v podspec, publikujte další verzi s opravou.
Příznak: [!] The spec did not pass validation. ERROR | [iOS] file patterns: Source files did not match any file.
Příčina: Nesprávně uvedená cesta ke zdrojovým souborům v poli source_files.
Řešení: Zkontrolujte cesty v podspec, spusťte pod lib lint lokálně do odstranění všech chyb, poté opakujte publikaci. Používejte glob vzory: Classes/**/*.{h,m}, Sources/MyLibrary/**/*.swift.
Příznak: [!] Connection to trunk.cocoapods.org failed. Timeout.
Příčina: Problémy se sítí nebo dočasná nedostupnost serveru Trunk.
Řešení: Zkontrolujte dostupnost serveru: curl -I https://trunk.cocoapods.org. Pokud server odpovídá, opakujte příkaz za pár minut. Vaše IP může být blokována — zkuste z jiného připojení nebo přes VPN.
Příznak: [!] You do not have permission to push to MyLibrary.
Příčina: Nejste vlastníkem podu. K tomu dochází, pokud již někdo zaregistroval pod s tímto názvem.
Řešení: Kontaktujte aktuálního vlastníka podu (lze zjistit přes pod trunk info MyLibrary) a požádejte o přidání přes pod trunk add-owner. Pokud je název podu obsazený, zvažte alternativní název.
Často kladené otázky
Starý způsob vyžadoval ruční Pull Request do repozitáře CocoaPods/Specs. Trunk proces automatizuje: provedete jeden příkaz pod trunk push a server sám zkontroluje podspec, přidá jej do registru a aktualizuje vyhledávací index. Trunk také přidal správu přístupu (více vlastníků), tokeny relací a centralizované ukládání metadat.
To není možné — Trunk zakazuje mazání publikovaných verzí pro zachování integrity závislostí. Pokud verze obsahuje kritickou chybu, publikujte novou verzi s opravou a označte problematickou verzi jako zastaralou přes pod trunk deprecate. Úplné odstranění je dostupné pouze administrátorům CocoaPods ve výjimečných případech.
Ne, pole s.author musí povinně obsahovat e-mail. Trunk jej používá k propojení podu s účtem vlastníka. Adresa se musí shodovat s e-mailem uvedeným při registraci přes pod trunk register. Pokud se e-mail v podspec liší, publikace bude zamítnuta.
Obvykle se pod objeví ve vyhledávání CocoaPods do 5–15 minut. Ve vzácných případech může indexace trvat až hodinu. Pod je k dispozici pro instalaci přes Podfile ihned po úspěšné odpovědi z Trunku — stačí uvést přesnou verzi nebo rozsah v Podfile.
Pokud máte aktivní relaci (token nevypršel), změňte e-mail přes pod trunk register new@email.com — nová registrace propojí pody s novou adresou. Pokud relace vypršela, obraťte se na podporu CocoaPods přes GitHub Issues. Důkazem vlastnictví podu může být možnost vytvořit commit v Git repozitáři podu.
Shrnutí
pod trunk register s potvrzením e-mailem a automatickým uložením tokenu relacepod trunk push prochází validací na serveru; jednou publikovanou verzi nelze smazatpod trunk add-owner a pod trunk remove-ownerCOCOAPODS_TRUNK_TOKEN pro automatickou publikaci v pipelineVyvineme 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é