Carthage er et moderne afhængighedsstyringsværktøj for iOS- og macOS-projekter, der giver udviklere mulighed for at integrere tredjepartsbiblioteker i deres applikationer på en enkel og effektiv måde. I modsætning til andre værktøjer som CocoaPods, fokuserer Carthage på at være minimalistisk og ikke-invasiv, hvilket betyder, at det ikke ændrer projektets struktur og kun kræver en enkel tekstfil, en Cartfile, med en liste over afhængighederne. Dette gør det til et populært valg blandt udviklere, der ønsker at bevare kontrol over deres projektopsætning og samtidig drage fordel af de nyeste biblioteker og frameworks.
Carthage fungerer ved at bygge binære frameworks, som derefter kan integreres direkte i Xcode-projekter. Denne tilgang sikrer, at udviklere kan drage fordel af hurtigere build-tider og en mere strømlinet udviklingsproces. Med Carthage kan du nemt tilføje, opdatere og administrere afhængigheder uden komplekse konfigurationsfiler eller uønskede ændringer i dit projekt. Til gengæld tilføjes de byggede frameworks manuelt i Xcode. Dette gør Carthage til et ideelt værktøj for dem, der ønsker en enkel, men kraftfuld løsning til afhængighedsstyring i deres iOS- og macOS-udviklingsprojekter.
Carthage er et decentraliseret værktøj til afhængighedsstyring for iOS- og macOS-projekter. Det henter og bygger tredjepartsbiblioteker som frameworks, som udvikleren derefter selv tilføjer til sit Xcode-projekt, uden at projektfilen ændres automatisk. Det giver fuld kontrol over projektets struktur og kan give hurtigere byggetider, fordi afhængighederne kun bygges, når de opdateres. Carthage bruges især som et enklere alternativ til CocoaPods, mens Swift Package Manager er Apples indbyggede løsning til pakkehåndtering.
Mere om Carthage
Carthage er et moderne afhængighedsstyringsværktøj for iOS og macOS, der tilbyder en enkel og fleksibel måde at integrere tredjepartsbiblioteker i dine projekter. I modsætning til andre værktøjer, der kræver komplekse konfigurationsfiler, fokuserer Carthage på minimal opsætning og giver udviklere friheden til at styre deres projekter uden unødvendige begrænsninger.
Teknisk set fungerer Carthage ved at bygge binære frameworks fra kildekode, hvilket gør det muligt for udviklere at inkludere disse frameworks direkte i deres Xcode-projekter. Dette betyder, at Carthage ikke ændrer projektfilerne, men i stedet genererer en “Carthage/Build” mappe, hvor de kompilerede frameworks opbevares. Denne tilgang sikrer, at udviklere har fuld kontrol over deres projektstruktur og afhængigheder.
Carthage understøtter tre primære funktioner, der hver især tilbyder forskellige måder at håndtere afhængigheder på:
-
Bygning af afhængigheder: Carthage kan automatisk bygge alle afhængigheder, der er specificeret i en “Cartfile”. Dette gør det muligt for udviklere at fokusere på deres kode, mens Carthage håndterer kompileringen af eksterne biblioteker. Denne funktion er ideel til projekter, der kræver flere tredjepartsbiblioteker.
-
Opdatering af afhængigheder: Med en enkel kommando kan Carthage opdatere alle afhængigheder til de nyeste versioner, der passer til versionskravene i Cartfile. Dette sikrer, at projekter altid bruger de mest opdaterede og sikre versioner af bibliotekerne, hvilket er afgørende for at opretholde kompatibilitet og sikkerhed.
-
Integration af frameworks: Carthage genererer frameworks, som udvikleren selv tilføjer til Xcode-projektet, typisk under “Frameworks, Libraries, and Embedded Content”. Det kræver et manuelt trin, men giver fuld indsigt i, præcis hvilke biblioteker der indgår i projektet, og gør det let at drage fordel af nye funktioner og forbedringer i tredjepartsbiblioteker.
En af de største styrker ved Carthage er dens enkelhed og fleksibilitet. Ved at undgå komplekse konfigurationsfiler og automatiserede projektændringer giver Carthage udviklere mulighed for at bevare kontrol over deres projekter. Dette reducerer risikoen for konflikter og gør det lettere at integrere nye afhængigheder uden at forstyrre eksisterende projektstrukturer.
Carthages tilgang til afhængighedsstyring er også tidsbesparende i det daglige arbejde. Ved kun at bygge afhængighederne, når de tilføjes eller opdateres, og undgå unødvendige projektændringer, minimerer Carthage den tid og de ressourcer, der kræves for at vedligeholde et projekt. Dette gør det til et ideelt værktøj for udviklere, der ønsker at optimere deres arbejdsgange og fokusere på at levere høj kvalitet software.
I praksis har Carthage haft stor betydning for, hvordan udviklere håndterer afhængigheder i iOS- og macOS-projekter. Det bruges af både små og store udviklingsteams til at sikre, at deres projekter er opdaterede, sikre og nemme at vedligeholde. Carthage gør det muligt for udviklere at integrere nye funktioner hurtigt og effektivt, hvilket er afgørende i en branche, hvor innovation og hurtig levering er nøglen til succes.
Sammenfattende er Carthage et værktøj, der kombinerer enkelhed, fleksibilitet og effektivitet i en løsning, der gør afhængighedsstyring mere intuitiv og tilgængelig for både individuelle udviklere og store teams. Dens enkle opsætning og minimale indgriben i projektstrukturen gør den til et vigtigt værktøj i den moderne appudviklingsverden, hvor hurtige og sikre integrationer er nødvendige.
Ofte stillede spørgsmål om Carthage
Hvad er Carthage, og hvordan fungerer det i praksis?
Carthage er en decentraliseret afhængighedsmanager til iOS-, macOS-, tvOS- og watchOS-projekter skrevet i Swift og Objective-C. Der findes ikke et centralt register over pakker. I stedet peger hver afhængighed direkte på et Git-repository, typisk på GitHub.
Afhængighederne angives i en tekstfil med navnet Cartfile i projektets rodmappe. Når kommandoen carthage update køres, finder Carthage passende versioner, henter kildekoden til mappen Carthage/Checkouts og bygger hvert bibliotek med Xcodes egne byggeværktøjer. De færdige frameworks lægges i Carthage/Build.
Carthage ændrer ikke Xcode-projektfilen. Udvikleren tilføjer selv de byggede frameworks under Frameworks, Libraries, and Embedded Content i det relevante target. Det giver fuld kontrol over projektets opsætning, men kræver lidt mere manuelt arbejde end værktøjer, der integrerer automatisk.
Hvordan installeres Carthage, og hvordan tilføjes et bibliotek?
Carthage installeres oftest med Homebrew via kommandoen brew install carthage. Alternativt kan en installationspakke hentes fra projektets udgivelser på GitHub.
Et bibliotek tilføjes typisk i fire trin:
- Filen
Cartfileoprettes i projektets rodmappe med en linje somgithub "Alamofire/Alamofire" ~> 5.0. - Kommandoen
carthage update --use-xcframeworks --platform iOShenter og bygger biblioteket. - Den færdige
.xcframeworkfraCarthage/Buildtrækkes ind under Frameworks, Libraries, and Embedded Content i appens target. - For dynamiske frameworks vælges Embed & Sign.
Operatoren ~> betyder, at nyere versioner accepteres, så længe hovedversionen er den samme. Derefter kan biblioteket bruges i koden med import Alamofire.
Hvad er forskellen på Cartfile og Cartfile.resolved?
Cartfile beskriver, hvilke afhængigheder projektet har brug for, og hvilke versionskrav de skal opfylde, fx ~> 5.0, >= 2.1 eller en bestemt branch. Filen redigeres manuelt og udtrykker hensigten.
Cartfile.resolved genereres automatisk og indeholder de præcise versioner eller commits, der faktisk blev valgt, også for afhængighedernes egne afhængigheder. Filen fungerer som en lås, så alle på et team og alle byggeservere får nøjagtig samme kode.
Forskellen ses i kommandoerne:
carthage updatefinder de nyeste versioner, der passer tilCartfile, og skriver resultatet tilCartfile.resolved.carthage bootstraphenter og bygger præcis de versioner, der står iCartfile.resolved.
Begge filer bør derfor ligge i versionsstyring. Afhængigheder, der kun bruges under udvikling, fx testbiblioteker, kan placeres i Cartfile.private.
Hvordan bygger Carthage XCFrameworks, og hvorfor er det vigtigt?
Tidligere byggede Carthage såkaldte fat frameworks, hvor koden til fysiske enheder og simulatoren blev samlet i én fil med værktøjet lipo. Det holdt op med at fungere med Xcode 12, fordi både enheder og simulatorer på Apple Silicon bruger arkitekturen arm64, og samme arkitektur kan ikke optræde to gange i ét fat framework.
Løsningen er XCFrameworks, som Apple introducerede med Xcode 11. Et XCFramework er en pakke med en separat binær version for hver platform og variant, fx iOS-enhed og iOS-simulator. Fra Carthage 0.37 bygges XCFrameworks med flaget --use-xcframeworks, fx carthage bootstrap --use-xcframeworks.
Resultatet lægges som .xcframework-mapper i Carthage/Build. De tilføjes direkte i appens target, og den tidligere build phase med carthage copy-frameworks er ikke længere nødvendig.
Hvad er forskellen på Carthage, CocoaPods og Swift Package Manager?
De tre værktøjer løser samme opgave, men på forskellige måder:
- Carthage er decentraliseret og henter afhængigheder direkte fra de Git-repositories, der er angivet i en
Cartfile. Bibliotekerne bygges som binære frameworks, og Xcode-projektet ændres ikke. Integrationen sker manuelt. - CocoaPods bruger et centralt register over biblioteker og en
Podfile. Kommandoenpod installopretter et workspace og ændrer projektopsætningen, så integrationen sker automatisk, men er mindre gennemsigtig. - Swift Package Manager (SPM) er Apples eget værktøj og er indbygget i Xcode. Pakker tilføjes direkte i Xcode eller beskrives i en
Package.swift, og der kræves ingen ekstra installation.
Carthage er nyttigt, når der ønskes fuld kontrol over projektfilen og kortere byggetider, fordi afhængighederne kun bygges ved opdatering. Til nye projekter er SPM i dag det mest udbredte valg, da de fleste biblioteker understøtter det.
Hvordan kan byggetiden med Carthage holdes nede?
Fordi Carthage som udgangspunkt bygger afhængigheder fra kildekode, kan det første build tage lang tid. Flere muligheder kan reducere tiden:
--platform iOSbegrænser bygningen til de platforme, projektet faktisk bruger.--cache-buildsspringer afhængigheder over, der allerede er bygget i samme version, så kun ændrede biblioteker bygges igen.- Enkelte afhængigheder kan opdateres for sig, fx med
carthage update Alamofire, i stedet for at opdatere alle. - Mange biblioteker leverer forudbyggede frameworks i deres GitHub-udgivelser, som Carthage automatisk henter. Lukkede SDK’er kan angives med
binaryog en URL til en JSON-specifikation.
På byggeservere kan mappen Carthage/Build desuden caches mellem kørsler. Mange teams holder mappen ude af Git via .gitignore og genskaber den med carthage bootstrap.
Carthage for dummies
Carthage er et værktøj, der hjælper med at organisere og styre de små byggeklodser, som apps er lavet af, kaldet “afhængigheder”. Forestil dig, at du bygger en app, og du har brug for nogle færdige dele, som andre allerede har lavet, for at få din app til at fungere bedre. Carthage hjælper dig med at hente og holde styr på disse dele, så du ikke behøver at lave dem fra bunden. Det fungerer lidt som en bibliotekar, der holder styr på alle de bøger, du har brug for til et projekt, så du kan fokusere på at skrive din egen historie. Det gør det nemmere og hurtigere at udvikle apps, fordi du kan genbruge andres arbejde og sikre, at alt passer sammen, uden at du skal bekymre dig om de tekniske detaljer.