CocoaPods Trunk — en servertjänst inom CocoaPods-ekosystemet, avsedd för publicering, hosting och hantering av pod-bibliotek. Trunk ersatte den föråldrade publiceringsmekanismen via GitHub-repositories och forks och tillhandahöll en centraliserad infrastruktur med autentisering, sessionshantering, versionshantering och validering före publicering. iOS- och macOS-utvecklare använder pod trunk push för att skicka bibliotek till det offentliga registret.
Huvudpunkter
pod trunk register med e-postbekräftelsepod trunk push genomgår validering, linting och uppladdning till registretpod trunk me, pod trunk add-owner, pod trunk deprecate för administration av poddarCocoaPods Trunk — är en serverinfrastruktur som lanserades 2015 för centraliserad publicering av pod-bibliotek. Före Trunk distribuerades varje pod via ett Git-repository: utvecklaren var tvungen att skapa ett offentligt repository, lägga till en podspec-fil och skicka en Pull Request till det centrala CocoaPods/Specs-repositoryt. Detta tillvägagångssätt krävde manuell moderering och orsakade förseningar vid publicering av uppdateringar.
Trunk löste dessa problem genom att tillhandahålla ett enhetligt API för publicering, uppdatering och borttagning av poddar. Tjänsten omfattar fyra nyckelkomponenter:
Arkitekturen för Trunk är byggd på Ruby on Rails-stack med PostgreSQL-databas. Tjänsten använder HTTP API med JSON-format för alla operationer, och CLI-klienten pod trunk är en del av CocoaPods-distributionen och installeras tillsammans med huvud-gemen cocoapods.
För närvarande har över 100 000 poddar publicerats via Trunk, med totalt antal nedladdningar som överstiger 50 miljarder. Dagligen behandlar tjänsten tusentals publicerings- och uppdateringsförfrågningar från utvecklare över hela världen.
Innan du publicerar en pod måste du registrera dig i Trunk. Processen består av ett steg — kommandot pod trunk register:
pod trunk register your@email.com 'Your Name' --description='MacBook Pro, iOS-utveckling'Efter att kommandot har körts skickas ett brev med en bekräftelselänk till den angivna e-postadressen. Genom att klicka på länken aktiveras kontot och en sessionstoken skapas som sparas i systemets nyckelkedja (Keychain på macOS, gnome-keyring eller motsvarighet på Linux). Token används automatiskt vid alla efterföljande pod trunk-operationer.
Parametern --description är valfri men rekommenderas — den hjälper till att identifiera sessionen när du visar aktiva sessioner via pod trunk me. Om du arbetar på flera maskiner (arbetsstation, CI-server) gör beskrivningen det möjligt att skilja en session från en annan.
För att kontrollera autentiseringsstatusen används följande kommando:
pod trunk meUtdata visar e-post, namn, lista över dina poddar (om du redan har publicerat) och aktiva sessioner. Exempel på resultat:
- 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, iOS-utvecklingPå CI-servrar (GitHub Actions, GitLab CI, Jenkins) sker autentisering via en token som skickas via miljövariabeln COCOAPODS_TRUNK_TOKEN. Token kan erhållas med kommandot:
pod trunk me --token-onlyDenna token sparas i CI-inställningarna som en hemlig variabel och används i publiceringsfasen utan omregistrering. Exempel för GitHub Actions:
env:
COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}Viktigt: token ger fullständig åtkomst till hanteringen av poddar som är kopplade till kontot. Publicera den aldrig i offentliga repositories och överlämna den inte till tredje part. Vid kompromettering kan token återkallas via pod trunk remove-session eller så kan alla sessioner tas bort via kontrollpanelen på CocoaPods webbplats.
Podspec-filen (.podspec eller .podspec.json) — är manifestet för biblioteket som innehåller metadata, beroenden, information om plattformar och källkod. Trunk använder denna fil för validering och registrering av podden. En minimal podspec för publicering ser ut så här:
Pod::Spec.new do |s|
s.name = 'MyLibrary'
s.version = '0.1.0'
s.summary = 'Kort beskrivning av biblioteket'
s.description = 'Detaljerad beskrivning med förklaring av funktioner'
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'
endNyckelfält i podspec:
MAJOR.MINOR.PATCH. Trunk accepterar inte återpublicering av samma version — du måste öka numret.MIT, Apache-2.0, BSD eller annan öppen licens.Före publicering måste podspec kontrolleras för korrekthet med hjälp av en linter:
pod lib lint MyLibrary.podspecLinter kontrollerar syntax, förekomst av obligatoriska fält, korrekthet av filsökvägar och lösbarhet av beroenden. Om privata källor (private specs) används i lintningsprocessen läggs flaggan --sources till. För att hoppa över nätverksnedladdning (endast lokal kontroll) används flaggan --local-only.
Huvudkommandot för att publicera en pod — pod trunk push. Det skickar podspec-filen till Trunk-servern, där den genomgår fullständig validering och registreras i det offentliga registret. Syntax:
pod trunk push MyLibrary.podspecFlaggan --allow-warnings tillåter publicering vid förekomst av varningar. Som standard blockerar alla varningar (warnings) publiceringen. Om biblioteket har kända varningar som inte påverkar funktionaliteten kan du använda denna flagga. Viktigt: fel (errors) blockerar alltid publiceringen, oavsett flaggor.
Flaggan --synchronous gör förfrågan synkron — terminalen väntar på att valideringen på servern ska slutföras. Som standard återlämnar kommandot kontrollen omedelbart efter sändning och servern bearbetar publiceringen asynkront. Synkront läge är användbart i CI/CD när nästa pipeline-steg beror på publiceringens framgång.
Flaggan --skip-import-validation hoppar över kontrollen av importen av biblioteket i ett testprojekt. Detta påskyndar publiceringen men garanterar inte att biblioteket faktiskt kompilerar. Använd denna flagga endast om du är säker på att bygget är korrekt.
Exempel på publicering med typiska alternativ:
pod trunk push MyLibrary.podspec \
--allow-warnings \
--synchronous \
--skip-import-validationEfter framgångsrik publicering returnerar Trunk en JSON med detaljer:
Congrats
MyLibrary (0.1.0) successfully published
Pod URL: https://cocoapods.org/pods/MyLibraryBiblioteket blir tillgängligt för installation via Podfile för alla iOS- eller macOS-projekt. Vanligtvis uppdateras data i CocoaPods sökindex inom några minuter, men i sällsynta fall kan indexeringen ta upp till en timme.
Viktig begränsning: en en gång publicerad pod-version kan inte tas bort. Detta för att förhindra skador på projekt som redan använder denna version. Om publiceringen gick fel kan du publicera nästa version med korrigeringen, men återställning är omöjlig. Undantag — pod trunk delete, endast tillgängligt för CocoaPods-anställda och tillämpas i extrema fall (licensbrott, skadlig kod).
CocoaPods Trunk tillhandahåller flera kommandon för administration av publicerade poddar:
För att överföra publiceringsrättigheterna för en pod till en annan utvecklare används följande kommando:
pod trunk add-owner MyLibrary developer@email.comEfter utförandet får den nya ägaren fullständig åtkomst till hanteringen av podden: publicering av nya versioner, lägga till och ta bort andra ägare, markera podden som föråldrad. Ägare kan vara vilken registrerad Trunk-användare som helst — förhandsregistrering är obligatorisk.
Om en utvecklare har lämnat projektet eller inte längre ska ha åtkomst till podden:
pod trunk remove-owner MyLibrary developer@email.comEn ägare kan endast tas bort av den nuvarande ägaren. Den sista ägaren av en pod kan inte tas bort — först måste en ny läggas till. Detta förhindrar att podden blir utan ägare.
Om ett bibliotek inte längre stöds kan det markeras som föråldrat (deprecated). Detta tar inte bort podden från registret, men lägger till en varning för användare vid installation:
pod trunk deprecate MyLibraryAlternativt kan en ersättningspod anges:
pod trunk deprecate MyLibrary --in-favor-of=NewLibraryVid installation av en föråldrad pod visar CocoaPods en varning i terminalen och rekommenderar att byta till den angivna ersättaren. Detta är det korrekta sättet att avsluta stödet för ett bibliotek utan att störa bygget av befintliga projekt.
Information om podden är tillgänglig via kommandot pod trunk info:
pod trunk info MyLibraryKommandot visar alla versioner av podden, publiceringsdatum, lista över ägare och status (aktiv/föråldrad). För att visa detaljer för en specifik version används pod spec cat MyLibrary 0.1.0.
Vid arbete med Trunk stöter utvecklare ofta på typiska fel. Låt oss titta på de vanligaste:
Symptom: [!] Authentication failed. You need to register a session first.
Orsak: Sessionstoken saknas eller har löpt ut. Token har begränsad giltighetstid (standard 30 dagar utan aktivitet).
Lösning: Kör pod trunk register your@email.com 'Your Name' igen. Om du använder CI, kontrollera att variabeln COCOAPODS_TRUNK_TOKEN är aktuell och generera vid behov en ny token.
Symptom: [!] You have already pushed version 0.1.0 for MyLibrary.
Orsak: Försök att återpublicera en befintlig version. Trunk tillåter inte överskrivning av versioner.
Lösning: Öka versionen i podspec enligt semantisk versionshantering. Om du gjorde ett misstag i podspec, publicera nästa version med korrigeringen.
Symptom: [!] The spec did not pass validation. ERROR | [iOS] file patterns: Source files did not match any file.
Orsak: Sökvägen till källfiler i fältet source_files är felaktigt angiven.
Lösning: Kontrollera sökvägarna i podspec, kör pod lib lint lokalt tills alla fel är åtgärdade, upprepa sedan publiceringen. Använd glob-mönster: Classes/**/*.{h,m}, Sources/MyLibrary/**/*.swift.
Symptom: [!] Connection to trunk.cocoapods.org failed. Timeout.
Orsak: Nätverksproblem eller tillfällig otillgänglighet av Trunk-servern.
Lösning: Kontrollera serverns tillgänglighet: curl -I https://trunk.cocoapods.org. Om servern svarar, upprepa kommandot om några minuter. Din IP kan vara blockerad — försök från en annan anslutning eller via VPN.
Symptom: [!] You do not have permission to push to MyLibrary.
Orsak: Du är inte ägare till podden. Detta händer om någon redan har registrerat en pod med detta namn.
Lösning: Kontakta den nuvarande ägaren av podden (kan hittas via pod trunk info MyLibrary) och be att bli tillagd via pod trunk add-owner. Om pod-namnet är upptaget, överväg ett alternativt namn.
Vanliga frågor
Den gamla metoden krävde en manuell Pull Request till CocoaPods/Specs-repositoryt. Trunk automatiserar processen: du kör ett enda kommando pod trunk push och servern kontrollerar själv podspec, lägger till den i registret och uppdaterar sökindexet. Trunk lade också till åtkomsthantering (flera ägare), sessionstoken och centraliserad lagring av metadata.
Det är omöjligt — Trunk förbjuder borttagning av publicerade versioner för att bevara integriteten hos beroenden. Om versionen innehåller ett kritiskt fel, publicera en ny version med korrigeringen och markera den problematiska versionen som föråldrad via pod trunk deprecate. Fullständig borttagning är endast tillgänglig för CocoaPods-administratörer i exceptionella fall.
Nej, fältet s.author måste obligatoriskt innehålla en e-postadress. Trunk använder den för att koppla podden till ägarens konto. Adressen måste matcha den e-post som angavs vid registrering via pod trunk register. Om e-posten i podspec är annorlunda kommer publiceringen att avvisas.
Vanligtvis visas podden i CocoaPods-sökningen inom 5–15 minuter. I sällsynta fall kan indexeringen ta upp till en timme. Podden är tillgänglig för installation via Podfile omedelbart efter ett framgångsrikt svar från Trunk — du behöver bara ange den exakta versionen eller intervallet i Podfile.
Om du har en aktiv session (token har inte löpt ut), ändra e-post via pod trunk register new@email.com — den nya registreringen kopplar poddarna till den nya adressen. Om sessionen har löpt ut, kontakta CocoaPods support via GitHub Issues. Bevis på ägarskap av podden kan vara möjligheten att skapa en commit i poddens Git-repository.
Sammanfattning
pod trunk register med e-postbekräftelse och automatisk lagring av sessionstokenpod trunk push genomgår validering på servern; en publicerad version kan inte tas bortpod trunk add-owner och pod trunk remove-ownerCOCOAPODS_TRUNK_TOKEN för automatisk publicering i pipelinesVi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också