Carthage er beregnet til at være den enkleste måde at tilføje rammer til dit Cocoa-program.
Carthage opbygger dine afhængigheder og giver dig binære rammer, men du beholder fuld kontrol over din projektstruktur og opsætning. Carthage ændrer ikke automatisk dine projektfiler eller dine opbygningsindstillinger.
- Snakkestart
- Installation af Carthage
- Tilføjelse af frameworks til et program
- Kom godt i gang
- Opbygning af platform-uafhængige XCFrameworks
- Migrerer et projekt fra rammepakker til XCFrameworks
- Bygning af platformsspecifikke rammepakker
- Hvis du bygger til macOS
- Hvis du bygger til iOS, tvOS, eller watchOS
- For alle platforme
- (Valgfrit) Tilføj opbygningsfase for at advare om forældede afhængigheder
- Swift binær rammedownloadkompatibilitet
- Opbygning af platform-uafhængige XCFrameworks
- Kørsel af et projekt, der bruger Carthage
- Tilføjelse af rammer til enhedstests eller en ramme
- Opgradering af rammer
- Eksperimentel resolver
- Nested afhængigheder
- Anvendelse af undermoduler til afhængigheder
- Automatisk genopbygning af afhængigheder
- Caching af builds
- Bash/Zsh/Fish-komplettering
- Kom godt i gang
- Understøttelse af Carthage til dit framework
- Del dine Xcode-skemaer
- Løs build-fejl
- Tag stabile udgivelser
- Arkivér præbyggede frameworks i én zip-fil
- Brug travis-ci til at uploade dine taggede præbyggede frameworks
- Byg statiske frameworks for at fremskynde lanceringstiden for din app
- Deklarer din kompatibilitet
- Kendte problemer
- DWARFs symbolproblem
- CarthageKit
- Forskelle mellem Carthage og CocoaPods
- Licens
- Hurtigstart
- Installation af Carthage
- Tilføjelse af frameworks til et program
- Kom godt i gang
- Opbygning af platformsuafhængige XCFrameworks (Xcode 12 og nyere)
- Migrering af et projekt fra rammepakker til XCFrameworks
- Opbygning af platformsspecifikke rammebundter (standard for Xcode 11 og nedefter)
- Hvis du bygger til macOS
- Hvis du bygger til iOS, tvOS eller watchOS
- For alle platforme
- (Valgfrit) Tilføj byggefase for at advare om forældede afhængigheder
- Swift binær rammekompatibilitet for download af Swift-rammer
- Kører et projekt, der bruger Carthage
- Tilføjelse af rammer til enhedstests eller en ramme
- Opgradering af frameworks
- Eksperimentel opløser
- Nested dependencies
- Brug af undermoduler til afhængigheder
- Automatisk genopbygning af afhængigheder
- Caching builds
- Bash/Zsh/Fish-komplettering
- Understøttelse af Carthage for din ramme
- Del dine Xcode-skemaer
- Løs opbygningsfejl
- Tag stabile udgivelser
- Arkivér forudbyggede frameworks i en zip-fil
- Brug travis-ci til at uploade dine taggede prebuilt-rameworks
- Opbyg statiske frameworks for at fremskynde lanceringstiderne for din app
- Carthage 0.30.0 eller højere
- Carthage 0.29.0 eller lavere
- Erklær din kompatibilitet
- Kendte problemer
- DWARFs symbolproblem
- CarthageKit
- Forskelle mellem Carthage og CocoaPods
- Licens
Hurtigstart
-
Hent Carthage ved at køre
brew install carthage
eller vælg en anden installationsmetode -
Opret en Cartfile i samme mappe som din
.xcodeproj
eller.xcworkspace
er -
Listen over de ønskede afhængigheder i Cartfilen, f.eks:
github "Alamofire/Alamofire" ~> 4.7.2
-
Kør
carthage update --use-xcframeworks
-
En
Cartfile.resolved
fil og enCarthage
mappe vises i den samme mappe, hvor din.xcodeproj
eller.xcworkspace
er -
Stræk de opbyggede
.xcframework
bundles fraCarthage/Build
ind i afsnittet “Frameworks and Libraries” i Xcode-projektet for din applikation. -
Hvis du bruger Carthage til en applikation, skal du vælge “Embed & Sign”, ellers “Do Not Embed”.
For en uddybende vejledning kan du læse videre fra Tilføjelse af frameworks til en applikation
Installation af Carthage
Der er flere muligheder for at installere Carthage:
-
Installer: Download og kør filen
Carthage.pkg
for den seneste version, og følg derefter instruktionerne på skærmen. Hvis du installerer pkg’en via CLI, skal du muligvis køresudo chown -R $(whoami) /usr/local
først. -
Homebrew: Du kan bruge Homebrew og installere
carthage
-værktøjet på dit system ved blot at kørebrew update
ogbrew install carthage
. (Bemærk: Hvis du tidligere har installeret den binære version af Carthage, skal du slette/Library/Frameworks/CarthageKit.framework
). -
MacPorts: Du kan bruge MacPorts og installere værktøjet
carthage
på dit system ved blot at køresudo port selfupdate
ogsudo port install carthage
. (Bemærk: Hvis du tidligere har installeret den binære version af Carthage, skal du slette/Library/Frameworks/CarthageKit.framework
). -
Fra kildekode: Hvis du ønsker at køre den seneste udviklingsversion (som kan være meget ustabil eller inkompatibel), skal du blot klone
master
-gren af repositoryet og derefter køremake install
. Kræver Xcode 10.0 (Swift 4.2).
Tilføjelse af frameworks til et program
Når du har installeret Carthage, kan du begynde at tilføje frameworks til dit projekt. Bemærk, at Carthage kun understøtter dynamiske frameworks, som kun er tilgængelige på iOS 8 eller nyere (eller enhver version af OS X).
Kom godt i gang
Opbygning af platformsuafhængige XCFrameworks (Xcode 12 og nyere)
- Opret en Cartfile, der viser de frameworks, du gerne vil bruge i dit projekt.
- Kør
carthage update --use-xcframeworks
. Dette henter afhængigheder i en Carthage/Checkouts-mappe og bygger hver enkelt eller henter et forudkompileret XCFramework. - På fanen Generelle indstillinger for dine programmål i afsnittet Frameworks, biblioteker og indlejret indhold skal du trække og slippe hvert XCFramework, du ønsker at bruge, fra Carthage/Build-mappen på disken.
Migrering af et projekt fra rammepakker til XCFrameworks
Vi opfordrer til at bruge XCFrameworks fra og med version 0.37.0 (januar 2021) og kræver XCFrameworks, når du bygger på en Apple Silicon Mac. Skift fra diskrete rammepakker til XCFrameworks kræver nogle få ændringer i dit projekt:
Migrationstrin
- Slet din
Carthage/Build
-mappe for at fjerne alle eksisterende rammepakker. - Byg nye XCFrameworks op ved at køre
carthage build --use-xcframeworks
. Alle andre argumenter, du bygger med, kan angives som normalt. - Fjern henvisninger til de gamle frameworks i hvert af dine mål:
- Fjern henvisninger til Carthage-rameworks fra målets afsnit Frameworks, Libraries and Embedded Content og/eller dets Link Binary with Libraries build phase.
- Fjern henvisninger til Carthage-rameworks fra alle Copy Files build phases.
- Fjern målets
carthage copy-frameworks
build phase, hvis den er til stede.
- Tilføj referencer til XCFrameworks i hvert af dine mål:
- For et programmål: På fanen Generelle indstillinger i afsnittet Frameworks, biblioteker og indlejret indhold skal du trække og slippe hvert XCFramework, du bruger, fra Carthage/Build-mappen på disken.
- For et rammemål: Træk og slip hvert XCFramework, du bruger, fra mappen Carthage/Build på disken under fanen Opbygningsfaser i en fase Link Binary with Libraries på fanen Opbygningsfaser.
Opbygning af platformsspecifikke rammebundter (standard for Xcode 11 og nedefter)
Xcode 12+ inkompatibilitet: Platforme med flere arkitekturer understøttes ikke, når der opbygges rammepakker i Xcode 12 og højere. Foretrækker opbygning med XCFrameworks. Hvis du har brug for at opbygge diskrete framework-bundles, skal du bruge en workaround xcconfig-fil.
Hvis du bygger til macOS
macOS-specifikke instruktioner
- Opret en Cartfile, der indeholder en liste over de frameworks, du gerne vil bruge i dit projekt.
- Kør
carthage update --platform macOS
. Dette henter afhængigheder i en Carthage/Checkouts-mappe og bygger hver enkelt eller henter et forudkompileret framework. - På fanen Generelle indstillinger for dine programmål i afsnittet Indlejrede binære filer skal du trække og slippe hvert framework, du vil bruge, fra Carthage/Build-mappen på disken.
Det er desuden nødvendigt at kopiere debug-symboler til fejlfinding og crashrapportering på OS X.
- Klik på ikonet + på fanen Indstillinger for opbygningsfaser i dit programmål, og vælg Ny fase for kopiering af filer.
- Klik på rullemenuen Destination, og vælg Products Directory.
- Træk og slip den tilsvarende dSYM-fil for hvert framework, du bruger.
Hvis du bygger til iOS, tvOS eller watchOS
Platformsspecifikke instruktioner
-
Opret en Cartfile, der viser de frameworks, du ønsker at bruge i dit projekt.
-
Kør
carthage update
. Dette henter afhængigheder i en Carthage/Checkouts-mappe og bygger derefter hver enkelt eller henter et forudkompileret framework. -
Åbn fanen Generelle indstillinger i dine programmål. For Xcode 11.0 og højere skal du i afsnittet “Frameworks, biblioteker og indlejret indhold” trække og slippe hvert framework, du vil bruge, fra Carthage/Build-mappen på disken. I afsnittet “Embed” skal du derefter vælge “Do Not Embed” fra rullemenuen for hvert element, der er tilføjet. For Xcode 10.x og lavere skal du i afsnittet “Linked Frameworks and Libraries” trække og slippe hvert framework, du ønsker at bruge, fra mappen Carthage/Build på disken.
-
På fanen Indstillinger for opbygningsfaser for dine programmål skal du klikke på ikonet + og vælge Ny kør-scriptfase. Opret et Run Script, hvor du angiver din shell (f.eks.
/bin/sh
), og tilføj følgende indhold til scriptområdet under shell’en:/usr/local/bin/carthage copy-frameworks
-
Opret en fil med navnet
input.xcfilelist
og en fil med navnetoutput.xcfilelist
-
Føj stierne til de frameworks, du vil bruge, til din
input.xcfilelist
. For eksempel:$(SRCROOT)/Carthage/Build/iOS/Result.framework$(SRCROOT)/Carthage/Build/iOS/ReactiveSwift.framework$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
-
Føj stierne til de kopierede frameworks til
output.xcfilelist
. For eksempel:$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveSwift.framework$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveCocoa.framework
Med outputfiler angivet sammen med inputfilerne behøver Xcode kun at køre scriptet, når inputfilerne er blevet ændret, eller outputfilerne mangler. Dette betyder, at beskidte builds vil være hurtigere, når du ikke har genopbygget frameworks med Carthage.
-
Føj
input.xcfilelist
til afsnittet “Input File Lists” i Carthage run script-fasen -
Føj
output.xcfilelist
til afsnittet “Output File Lists” i Carthage run script-fasen
Dette script omgår en fejl i forbindelse med indsendelse til App Store, der udløses af universelle binære filer, og sikrer, at de nødvendige bitcode-relaterede filer og dSYM’er kopieres ved arkivering.
Med debugoplysningerne kopieret til mappen med byggede produkter vil Xcode være i stand til at symbolisere staksporet, når du stopper ved et breakpoint. Dette vil også gøre det muligt for dig at gennemgå tredjepartskode i debuggeren.
Når du arkiverer din applikation med henblik på indsendelse til App Store eller TestFlight, kopierer Xcode også disse filer til undermappen dSYMs i din applikations .xcarchive
bundle.
For alle platforme
Undervejs vil Carthage have skabt nogle byggeartefakter. Det vigtigste af disse er filen Cartfile.resolved, som indeholder en liste over de versioner, der faktisk blev bygget for hver ramme. Sørg for at committe din Cartfile.resolved, da alle andre, der bruger projektet, skal bruge denne fil for at bygge de samme rammeversioner.
(Valgfrit) Tilføj byggefase for at advare om forældede afhængigheder
Du kan tilføje en Run Script-fase for automatisk at advare dig, når en af dine afhængigheder er forældet.
- På fanen
Build Phases
-indstillinger for dine programmål skal du klikke på ikonet+
og vælgeNew Run Script Phase
på fanenBuild Phases
indstillinger. Opret et Run Script, hvor du angiver din shell (f.eks./bin/sh
), og tilføj følgende indhold til scriptområdet under shell’en:
/usr/local/bin/carthage outdated --xcode-warnings 2>/dev/null
Swift binær rammekompatibilitet for download af Swift-rammer
Carthage kontrollerer, at downloadede Swift-rammer (og blandede Objective-C/Swift-rammer) blev bygget med den samme version af Swift, som er i brug lokalt. Hvis der er en versionsoverensstemmelse, fortsætter Carthage med at bygge rammen fra kildekoden. Hvis rammen ikke kan bygges fra kildekode, fejler Carthage.
Da Carthage bruger output af xcrun swift --version
til at bestemme den lokale Swift-version, skal du sørge for at køre Carthage-kommandoer med den Swift-værktøjskæde, du har til hensigt at bruge. I mange brugstilfælde er der ikke behov for yderligere. Men hvis du f.eks. bygger et Swift 2.3-projekt med Xcode 8.x, er en metode til at angive din standard swift
for carthage bootstrap
at bruge følgende kommando:
TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3 carthage bootstrap
Kører et projekt, der bruger Carthage
Når du har gennemført ovenstående trin og skubbet dine ændringer, behøver andre brugere af projektet kun at hente repositoriet og køre carthage bootstrap
for at komme i gang med de frameworks, du har tilføjet.
Tilføjelse af rammer til enhedstests eller en ramme
Anvendelse af Carthage til afhængighederne for et vilkårligt mål er ret lig med anvendelse af Carthage til et program. Hovedforskellen ligger i, hvordan rammerne rent faktisk oprettes og linkes i Xcode.
Da enhedstestmål mangler afsnittet Linked Frameworks and Libraries i fanen Generelle indstillinger, skal du i stedet trække de opbyggede rammer til opbygningsfasen Link Binaries With Libraries (Link Binaries With Libraries).
I testmålet under fanen Bygningsindstillinger skal du tilføje @loader_path/Frameworks
til Søgningsstier for Runpath, hvis det ikke allerede er til stede.
I sjældne tilfælde vil du måske også kopiere hver afhængighed ind i byggeproduktet (f.eks, for at indlejre afhængigheder i den ydre ramme, eller for at sikre, at afhængigheder er til stede i et testbundle). For at gøre dette skal du oprette en ny Copy Files build-fase med destinationen Frameworks og derefter tilføje rammereferencen der også. Du bør ikke bruge kommandoen carthage copy-frameworks
, da testbundles ikke har brug for frameworks strippet, og kørsel af samtidige instanser af copy-frameworks
(med parallel builds slået til) understøttes ikke.
Opgradering af frameworks
Hvis du har ændret din Cartfile, eller hvis du ønsker at opdatere til de nyeste versioner af hvert framework (med forbehold for de krav, du har angivet), skal du blot køre kommandoen carthage update
igen.
Hvis du kun ønsker at opdatere en eller bestemte afhængigheder, skal du sende dem som en liste med mellemrum adskilt til update
-kommandoen. f.eks.
carthage update Box
eller
carthage update Box Result
Eksperimentel opløser
En omskrivning af logikken for opgradering af frameworks blev foretaget med det formål at øge hastigheden og reducere hukommelsesforbruget. Det er i øjeblikket en opt-in-funktion. Den kan bruges ved at overgive --new-resolver
til opdateringskommandoen, f.eks.
carthage update --new-resolver Box
Hvis du oplever problemer med ydeevnen under opdateringer, så giv den nye resolver en chance
Nested dependencies
Hvis det framework, du vil tilføje til dit projekt, har afhængigheder, der eksplicit er opført i en Cartfile, henter Carthage dem automatisk for dig. Du skal derefter selv trække dem ind i dit projekt fra Carthage/Build-mappen.
Hvis det indlejrede framework i dit projekt har afhængigheder til andre frameworks, skal du linke dem til applikationsmålet (selv om applikationsmålet ikke har afhængighed til disse frameworks og aldrig bruger dem).
Brug af undermoduler til afhængigheder
Som standard vil Carthage checke afhængighedernes kildefiler direkte ud i din projektmappe, så du kan committe eller ignorere dem, som du vil. Hvis du i stedet vil have afhængigheder tilgængelige som Git-submoduler (måske så du kan committe og skubbe ændringer i dem), kan du køre carthage update
eller carthage checkout
med --use-submodules
-flaget.
Når du kører på denne måde, vil Carthage skrive til dit repositoriums .gitmodules
– og .git/config
-filer og automatisk opdatere submodulerne, når afhængighedernes versioner ændres.
Automatisk genopbygning af afhængigheder
Hvis du ønsker at arbejde på dine afhængigheder under udviklingen og ønsker, at de automatisk genopbygges, når du bygger dit overordnede projekt, kan du tilføje en Run Script build-fase, der kalder Carthage på følgende måde:
/usr/local/bin/carthage build --platform "$PLATFORM_NAME" --project-directory "$SRCROOT"
Bemærk, at du bør bruge undermoduler, før du gør dette, fordi almindelige checkouts ikke bør ændres direkte.
Caching builds
Som standard vil Carthage genopbygge en afhængighed, uanset om det er den samme opløste version som før. Hvis --cache-builds
overgives, får det carthage til at undgå at genopbygge en afhængighed, hvis den kan. Se oplysninger om versionsfiler for detaljer om, hvordan Carthage udfører denne caching.
Bemærk: På nuværende tidspunkt er --cache-builds
inkompatibel med --use-submodules
. Hvis du bruger begge dele, vil det resultere i, at arbejdskopi og commitede ændringer til din submodulafhængighed ikke bliver genopbygget korrekt. Se #1785 for nærmere oplysninger.
Bash/Zsh/Fish-komplettering
Auto-komplettering af Carthage-kommandoer og -indstillinger er tilgængelig som dokumenteret i Bash/Zsh/Fish-komplettering.
Understøttelse af Carthage for din ramme
Carthage understøtter kun officielt dynamiske rammer. Dynamiske frameworks kan bruges på alle versioner af OS X, men kun på iOS 8 eller nyere. Derudover understøtter Carthage siden version 0.30.0 statiske frameworks.
Da Carthage ikke har nogen centraliseret pakkeliste og intet projektspecifikationsformat, bør de fleste frameworks bygges automatisk.
De specifikke krav til ethvert frameworkprojekt er anført nedenfor.
Del dine Xcode-skemaer
Carthage bygger kun Xcode-skemaer, der er delt fra din .xcodeproj
. Du kan se, om alle dine planlagte skemaer bygges med succes ved at køre carthage build --no-skip-current
og derefter kontrollere mappen Carthage/Build.
Hvis et vigtigt skema ikke bygges, når du kører denne kommando, skal du åbne Xcode og sørge for, at skemaet er markeret som Shared, så Carthage kan opdage det.
Løs opbygningsfejl
Hvis du støder på opbygningsfejl i carthage build --no-skip-current
, så prøv at køre xcodebuild -scheme SCHEME -workspace WORKSPACE build
eller xcodebuild -scheme SCHEME -project PROJECT build
(med de faktiske værdier), og se, om den samme fejl opstår der. Dette skulle forhåbentlig give tilstrækkelige oplysninger til at løse problemet.
Hvis du har flere versioner af Apples udviklerværktøjer installeret (f.eks. en Xcode-betaversion), skal du bruge xcode-select
til at ændre, hvilken version Carthage bruger.
Hvis du stadig ikke kan bygge din ramme med Carthage, skal du åbne et problem, så hjælper vi dig gerne!
Tag stabile udgivelser
Carthage bestemmer, hvilke versioner af din ramme der er tilgængelige, ved at søge i de tags, der er offentliggjort på repositoriet, og forsøge at fortolke hvert tag-navn som en semantisk version. I tag v1.2
er den semantiske version f.eks. 1.2.0.
Tags uden versionsnummer eller med et tegn efter versionsnummeret (f.eks, 1.2-alpha-1
) er i øjeblikket ikke understøttet og vil blive ignoreret.
Arkivér forudbyggede frameworks i en zip-fil
Carthage kan automatisk bruge forudbyggede frameworks i stedet for at bygge fra bunden, hvis de er knyttet til en GitHub-udgivelse på dit projektrepositorium eller via en binær projektdefinitionsfil.
For at tilbyde forudbyggede frameworks til et bestemt tag skal binære filer til alle understøttede platforme zippes sammen i ét arkiv, og dette arkiv skal vedhæftes en offentliggjort udgivelse, der svarer til det pågældende tag. Den vedhæftede fil skal indeholde .framework
i sit navn (f.eks. ReactiveCocoa.framework.zip
) for at angive over for Carthage, at den indeholder binære filer. Arkivets mappestruktur er fri, men, frameworks bør kun optræde én gang i arkivet, da de vil blive kopieret til Carthage/Build/<platform>
baseret på deres navn (f.eks. ReactiveCocoa.framework
).
Du kan udføre arkiveringsoperationen med carthage selv ved hjælp af:
-carthage build --no-skip-current-carthage archive YourFrameworkName
eller alternativt
carthage build --archive
Udkastudgivelser vil automatisk blive ignoreret, selv om de svarer til det ønskede tag.
Brug travis-ci til at uploade dine taggede prebuilt-rameworks
Det er muligt at bruge travis-ci til at bygge og uploade dine taggede udgivelser.
-
Installer travis CLI med
gem install travis
-
Sæt travis-ci op for dit repository (trin 1 og 2)
-
Opret
.travis.yml
filen i roden af dit repository baseret på denne skabelon. IndstilFRAMEWORK_NAME
til den korrekte værdi.Replace PROJECT_PLACEHOLDER og SCHEME_PLACEHOLDER
Hvis du bruger et arbejdsområde i stedet for et projekt, skal du fjerne xcode_project-linjen og fjerne kommentaren til xcode_workspace-linjen.
Projektet skal være i formatet:
MyProject.xcodeproj
Arbejdspladsen skal være i formatet: MyWorkspace.xcworkspace
Føl dig fri til at opdatere
xcode_sdk
-værdien til et andet SDK, bemærk, at test på iphoneos SDK vil kræve, at du uploader en kode signerende identitetFor flere oplysninger kan du besøge travis docs for objective-c projects
language: objective-cosx_image: xcode7.3xcode_project: <PROJECT_PLACEHOLDER># xcode_workspace: <WORKSPACE_PLACEHOLDER>xcode_scheme: <SCHEME_PLACEHOLDER>xcode_sdk: iphonesimulator9.3env: global: - FRAMEWORK_NAME=<THIS_IS_A_PLACEHOLDER_REPLACE_ME>before_install: - brew update - brew outdated carthage || brew upgrade carthagebefore_script: # bootstrap the dependencies for the project # you can remove if you don't have dependencies - carthage bootstrapbefore_deploy: - carthage build --no-skip-current - carthage archive $FRAMEWORK_NAME
-
Kør
travis setup releases
, følg dokumentationen herDenne kommando vil kode dine GitHub-oplysninger i
.travis.yml
-filen for at lade travis uploade udgivelsen til GitHub.comNår du bliver bedt om at angive den fil, der skal uploades, skal du indtaste$FRAMEWORK_NAME.framework.zip
-
opdatér deploy-sektionen til at køre på tags:
I
.travis.yml
find:on: repo: repo/repo
og tilføj
tags: true
ogskip_cleanup: true
:skip_cleanup: trueon: repo: repo/repo tags: true
Det vil lade travis vide, at der skal oprettes en implementering, når et nyt tag skubbes, og forhindre travis i at rydde op i den genererede zip-fil
Opbyg statiske frameworks for at fremskynde lanceringstiderne for din app
Hvis du indlejrer mange dynamiske frameworks i din app, kan dens lanceringstider før hovedprogrammet være ret langsomme. Carthage kan hjælpe med at afbøde dette ved at bygge dine dynamiske frameworks som statiske frameworks i stedet. Statiske frameworks kan linkes direkte ind i din applikation eller slås sammen til et større dynamisk framework med nogle få enkle ændringer i din arbejdsgang, hvilket kan resultere i dramatiske reduktioner i pre-main-starttider.
Carthage 0.30.0 eller højere
Siden version 0.30.0 ruller Carthage-projektet understøttelse ud for statisk linkede frameworks skrevet i Swift eller Objective-C, som der er indført understøttelse for i Xcode 9.4. Bemærk dog, at der specifikt står frameworks, derfor Darwin-bundles med .framework-udvidelsen og statisk linkede objektarkiver indeni. Carthage understøtter i øjeblikket ikke statiske biblioteksskemaer, og der er heller ingen planer om at indføre understøttelse af dem i fremtiden.
Arbejdsgangen adskiller sig knapt nok:
- Du skal stadig afkrydse dit Carthage-kompatible projekts skemaer som delt i Product > Scheme > Manage Schemes…, ligesom med dynamiske binære filer
- Du skal stadig linke mod statiske .frameworks i dit projekts opbygningsfaser ligesom med dynamiske binære filer
Hvorom alting er:
- I dit Carthage-kompatible projekts Cocoa Framework-måls opbygningsindstillinger, afsnittet Linking, skal du indstille Mach-O Type til Static Library
- Dine statisk linkede frameworks vil blive bygget på ./Carthage/Build/$(PLATFORM_NAME)/Static
- Du bør ikke tilføje nogen af de statiske frameworks som input/output-filer i carthage copy-frameworks Byggefase
Carthage 0.29.0 eller lavere
Se dokumentationen StaticFrameworks for nærmere oplysninger.
Bemærk, at der gælder et par forbehold for denne fremgangsmåde:
- Swift static frameworks understøttes ikke officielt af Apple
- Dette er en avanceret arbejdsgang, der ikke er indbygget i Carthage, YMMV
Erklær din kompatibilitet
Vil du reklamere for, at dit projekt kan bruges med Carthage? Du kan tilføje et kompatibilitetsmærke:
… til din README
, ved blot at indsætte følgende Markdown:
(https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
Kendte problemer
DWARFs symbolproblem
Forudbygget ramme kan ikke fejlsøges ved hjælp af trinvis udførelse på en anden maskine end den, hvor rammen blev bygget. Simpel carthage bootstrap/build/update --no-use-binaries
burde løse dette, men for en mere automatiseret løsning, se #924. Dupe rdar://23551273, hvis du vil have Apple til at rette den grundlæggende årsag til dette problem.
CarthageKit
Det meste af funktionaliteten i kommandolinjeværktøjet carthage
er faktisk indkapslet i en ramme ved navn CarthageKit.
Hvis du er interesseret i at bruge Carthage som en del af et andet værktøj eller måske udvide Carthages funktionalitet, skal du tage et kig på CarthageKit-kildekoden for at se, om API’en passer til dine behov.
Forskelle mellem Carthage og CocoaPods
CocoaPods er en gammel afhængighedshåndtering til Cocoa. Så hvorfor blev Carthage skabt?
For det første opretter og opdaterer CocoaPods (som standard) automatisk et Xcode-arbejdsområde for dit program og alle afhængigheder. Carthage opbygger rammebinærer ved hjælp af xcodebuild
, men overlader ansvaret for at integrere dem til brugeren. CocoaPods’ tilgang er nemmere at bruge, mens Carthages er fleksibel og ikke påtrængende.
Målet med CocoaPods er anført i dets README som følger:
… at forbedre opdagelsen af og engagementet i tredjeparts open source-biblioteker ved at skabe et mere centraliseret økosystem.
Carthage er derimod blevet oprettet som en decentraliseret afhængighedsforvalter. Der er ingen central liste over projekter, hvilket reducerer vedligeholdelsesarbejdet og undgår ethvert centralt punkt for fejl. Det er dog vanskeligere at finde frem til projekter – brugerne må ty til GitHubs Trending-sider eller lignende.
CocoaPods-projekter skal også have en såkaldt podspec-fil, som indeholder metadata om projektet og angiver, hvordan det skal bygges. Carthage bruger xcodebuild
til at bygge afhængigheder, i stedet for at integrere dem i et enkelt arbejdsområde, det har ikke en lignende specifikationsfil, men dine afhængigheder skal indeholde deres eget Xcode-projekt, der beskriver, hvordan deres produkter skal bygges.
I sidste ende skabte vi Carthage, fordi vi ønskede det enkleste værktøj muligt – en afhængighedshåndtering, der får arbejdet gjort uden at overtage Xcodes ansvar og uden at skabe ekstra arbejde for rammeforfattere. CocoaPods tilbyder mange fantastiske funktioner, som Carthage aldrig vil få, på bekostning af yderligere kompleksitet.
Licens
Carthage er udgivet under MIT-licensen.
Foto af baggrunden for headeren er udgivet under CC BY-NC-SA 2.0-licensen. Originalfoto af Richard Mortel.