Carthage er en avhengighetsbehandler for iOS- og macOS-prosjekter som lar utviklere integrere tredjepartsbiblioteker i applikasjonene sine på en enkel og effektiv måte. I motsetning til andre verktøy som CocoaPods legger Carthage vekt på å være minimalistisk og lite inngripende, noe som betyr at det ikke endrer prosjektets struktur og bare krever en enkel tekstfil, en Cartfile, med en liste over avhengighetene. Dette har gjort det til et populært valg blant utviklere som vil beholde kontrollen over prosjektoppsettet sitt og samtidig dra nytte av tredjepartsbiblioteker og rammeverk.
Carthage fungerer ved å bygge binære rammeverk, som deretter kan integreres direkte i Xcode-prosjekter. Denne tilnærmingen gjør at utviklere kan dra nytte av raskere byggetider og en mer strømlinjeformet utviklingsprosess. Med Carthage kan avhengigheter enkelt legges til, oppdateres og administreres uten komplekse konfigurasjonsfiler eller uønskede endringer i prosjektet. Til gjengjeld legges de ferdigbygde rammeverkene til i Xcode manuelt. Dette gjør Carthage til et godt verktøy for dem som ønsker en enkel, men kraftig løsning for avhengighetsstyring i utviklingsprosjektene sine for iOS og macOS.
Carthage er en desentralisert avhengighetsbehandler for iOS- og macOS-prosjekter. Den henter og bygger tredjepartsbiblioteker som rammeverk, som utvikleren deretter selv legger til i Xcode-prosjektet sitt, uten at prosjektfilen endres automatisk. Dette gir full kontroll over prosjektets struktur og kan gi raskere byggetider, fordi avhengighetene bare bygges når de oppdateres. Carthage brukes hovedsakelig som et enklere alternativ til CocoaPods, mens Swift Package Manager er Apples innebygde løsning for pakkehåndtering.
Mer om Carthage
Carthage er en avhengighetsbehandler for iOS og macOS som tilbyr en enkel og fleksibel måte å integrere tredjepartsbiblioteker i prosjekter på. I motsetning til andre verktøy som endrer prosjektoppsettet automatisk, legger Carthage vekt på minimalt oppsett og gir utviklere frihet til å administrere prosjektene sine uten unødvendige begrensninger.
Teknisk sett fungerer Carthage ved å bygge binære rammeverk fra kildekode, eller laste ned ferdigbygde, noe som lar utviklere inkludere disse rammeverkene direkte i Xcode-prosjektene sine. Dette betyr at Carthage ikke endrer prosjektfilene, men i stedet genererer en «Carthage/Build»-mappe der de kompilerte rammeverkene lagres. Denne tilnærmingen gir utviklere full kontroll over prosjektstrukturen og avhengighetene sine.
Carthage støtter tre primære funksjoner, som hver gir en egen måte å håndtere avhengigheter på:
Bygging av avhengigheter: Carthage kan automatisk bygge alle avhengighetene som er angitt i en «Cartfile». Dette lar utviklere fokusere på sin egen kode, mens Carthage tar seg av kompileringen av eksterne biblioteker. Denne funksjonen er ideell for prosjekter som krever flere tredjepartsbiblioteker.
Oppdatering av avhengigheter: Med én enkelt kommando kan Carthage oppdatere alle avhengigheter til de nyeste versjonene som oppfyller versjonskravene i Cartfile. Dette gjør det enkelt å holde bibliotekene oppdaterte, inkludert sikkerhetsrettelser, noe som er viktig for å opprettholde kompatibilitet og sikkerhet.
Integrering av rammeverk: Carthage genererer rammeverk som utvikleren selv legger til i Xcode-prosjektet, typisk under «Frameworks, Libraries, and Embedded Content». Dette krever et manuelt trinn, men gir full innsikt i nøyaktig hvilke biblioteker som inngår i prosjektet, og gjør det enkelt å dra nytte av nye funksjoner og forbedringer i tredjepartsbiblioteker.
En av de største styrkene ved Carthage er enkelheten og fleksibiliteten. Ved å unngå automatiserte prosjektendringer lar Carthage utviklere beholde kontrollen over prosjektene sine. Dette reduserer risikoen for konflikter i prosjektfilen og gjør det enklere å integrere nye avhengigheter uten å forstyrre eksisterende prosjektstrukturer.
Tilnærmingen Carthage har til avhengighetsstyring, sparer også tid i det daglige arbeidet. Ved bare å bygge avhengigheter når de legges til eller oppdateres, og ved å unngå unødvendige prosjektendringer, minimerer Carthage tiden og ressursene som kreves for å vedlikeholde et prosjekt. Dette gjør det til et godt verktøy for utviklere som vil optimalisere arbeidsflytene sine og fokusere på å levere programvare av høy kvalitet.
I praksis har Carthage hatt betydelig innvirkning på hvordan utviklere håndterer avhengigheter i iOS- og macOS-prosjekter. Det har vært brukt av både små og store utviklingsteam til å holde prosjektene sine oppdaterte, sikre og enkle å vedlikeholde. I dag har utviklingen av Carthage imidlertid bremset betydelig opp, og de fleste biblioteker retter seg nå først mot Swift Package Manager.
Oppsummert er Carthage et verktøy som kombinerer enkelhet, fleksibilitet og effektivitet i en løsning som gjør avhengighetsstyring mer oversiktlig for både enkeltutviklere og store team. Det enkle oppsettet og den minimale inngripen i prosjektstrukturen har gjort det til et nyttig verktøy i apputvikling, der raske og sikre integrasjoner er nødvendige.
Ofte stilte spørsmål om Carthage
Hva er Carthage, og hvordan fungerer det i praksis?
Carthage er en desentralisert avhengighetsbehandler for iOS-, macOS-, tvOS- og watchOS-prosjekter skrevet i Swift og Objective-C. Det finnes ikke noe sentralt pakkeregister. I stedet peker hver avhengighet direkte til et Git-repositorium, typisk på GitHub.
Avhengighetene angis i en tekstfil kalt Cartfile i prosjektets rotmappe. Når kommandoen carthage update kjøres, finner Carthage passende versjoner, henter kildekoden til mappen Carthage/Checkouts og bygger hvert bibliotek med Xcodes egne byggeverktøy. De ferdige rammeverkene plasseres i Carthage/Build.
Carthage endrer ikke Xcode-prosjektfilen. Utvikleren legger til de bygde rammeverkene under Frameworks, Libraries, and Embedded Content i det aktuelle targetet. Dette gir full kontroll over prosjektoppsettet, men krever litt mer manuelt arbeid enn verktøy som integrerer automatisk.
Hvordan installeres Carthage, og hvordan legges et bibliotek til?
Carthage installeres oftest med Homebrew ved hjelp av kommandoen brew install carthage. Alternativt kan en installasjonspakke lastes ned fra prosjektets utgivelser på GitHub.
Et bibliotek legges typisk til i fire trinn:
- Filen
Cartfileopprettes i prosjektets rotmappe med en linje somgithub "Alamofire/Alamofire" ~> 5.0. - Kommandoen
carthage update --use-xcframeworks --platform iOShenter og bygger biblioteket. - Den ferdige
.xcframeworkfraCarthage/Builddras inn i Frameworks, Libraries, and Embedded Content i appens target. - For dynamiske rammeverk velges Embed & Sign.
Operatoren ~> betyr at nyere versjoner godtas så lenge hovedversjonen forblir den samme. Biblioteket kan deretter brukes i koden med import Alamofire.
Hva er forskjellen mellom Cartfile og Cartfile.resolved?
Cartfile beskriver hvilke avhengigheter prosjektet trenger, og hvilke versjonskrav de må oppfylle, f.eks. ~> 5.0, >= 2.1 eller en bestemt gren. Filen redigeres manuelt og uttrykker hensikten.
Cartfile.resolved genereres automatisk og inneholder de nøyaktige versjonene eller commitene som faktisk ble valgt, også for avhengighetenes egne avhengigheter. Filen fungerer som en lås, slik at alle på et team og alle byggeservere får nøyaktig den samme koden.
Forskjellen viser seg i kommandoene:
carthage updatefinner de nyeste versjonene som samsvarer medCartfile, og skriver resultatet tilCartfile.resolved.carthage bootstraphenter og bygger nøyaktig de versjonene som står iCartfile.resolved.
Begge filene bør derfor ligge i versjonskontrollen. Avhengigheter som bare brukes under utviklingen, for eksempel testbiblioteker, kan plasseres i Cartfile.private.
Hvordan bygger Carthage XCFrameworks, og hvorfor er det viktig?
Tidligere bygget Carthage såkalte fat frameworks, der koden for fysiske enheter og simulatoren ble slått sammen til én fil med verktøyet lipo. Dette sluttet å fungere med Xcode 12, fordi både enheter og simulatorer på Apple Silicon bruker arm64-arkitekturen, og samme arkitektur kan ikke forekomme to ganger i ett fat framework.
Løsningen er XCFrameworks, som Apple introduserte med Xcode 11. Et XCFramework er en pakke med en egen binærfil for hver plattform og variant, for eksempel iOS-enhet og iOS-simulator. Fra og med Carthage 0.37 bygges XCFrameworks med flagget --use-xcframeworks, f.eks. carthage bootstrap --use-xcframeworks.
Resultatet plasseres som .xcframework-mapper i Carthage/Build. De legges direkte til i appens target, og den tidligere byggefasen med carthage copy-frameworks trengs ikke lenger.
Hva er forskjellen mellom Carthage, CocoaPods og Swift Package Manager?
De tre verktøyene løser den samme oppgaven, men på ulike måter:
- Carthage er desentralisert og henter avhengigheter direkte fra Git-repositoriene som er angitt i en
Cartfile. Bibliotekene bygges som binære rammeverk, og Xcode-prosjektet endres ikke. Integreringen gjøres manuelt. - CocoaPods bruker et sentralt bibliotekregister og en
Podfile. Kommandoenpod installoppretter et workspace og endrer prosjektoppsettet, så integreringen skjer automatisk, men er mindre gjennomsiktig. CocoaPods er nå i vedlikeholdsmodus. - Swift Package Manager (SPM) er Apples eget verktøy og er bygget inn i Xcode. Pakker legges til direkte i Xcode eller beskrives i en
Package.swift, og det kreves ingen ekstra installasjon.
Carthage er nyttig når man ønsker full kontroll over prosjektfilen og kortere byggetider, fordi avhengighetene bare bygges når de oppdateres. For nye prosjekter er SPM nå det mest brukte valget, siden de fleste biblioteker støtter det.
Hvordan kan byggetidene med Carthage holdes nede?
Fordi Carthage som standard bygger avhengigheter fra kildekode, kan det første bygget ta lang tid. Flere alternativer kan redusere tiden:
--platform iOSbegrenser bygget til plattformene prosjektet faktisk bruker.--cache-buildshopper over avhengigheter som allerede er bygget i samme versjon, slik at bare endrede biblioteker bygges på nytt.- Enkeltavhengigheter kan oppdateres hver for seg, f.eks. med
carthage update Alamofire, i stedet for å oppdatere alle. - Mange biblioteker tilbyr ferdigbygde rammeverk i GitHub-utgivelsene sine, som Carthage laster ned automatisk. SDK-er med lukket kildekode kan angis med
binaryog en URL til en JSON-spesifikasjon.
På byggeservere kan mappen Carthage/Build også hurtigbufres mellom kjøringene. Mange team holder mappen utenfor Git via .gitignore og gjenoppretter den med carthage bootstrap.
Carthage for dummies
Carthage er et verktøy som hjelper med å organisere og administrere de små byggeklossene apper består av, såkalte «avhengigheter». Tenk deg at du bygger en app som trenger noen ferdige deler som andre allerede har laget, for å fungere bedre. Carthage hjelper med å hente og holde styr på disse delene, slik at de ikke må lages fra bunnen av. Det fungerer litt som en bibliotekar som holder oversikt over alle bøkene som trengs til et prosjekt, slik at forfatteren kan konsentrere seg om sin egen historie. Det gjør apputvikling enklere og raskere, fordi andres arbeid kan gjenbrukes samtidig som det sikres at alt passer sammen.