Carthage / Carthage

author
19 minutes, 58 seconds Read

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
    • 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
  • 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

  1. Hent Carthage ved at køre brew install carthage eller vælg en anden installationsmetode

  2. Opret en Cartfile i samme mappe som din .xcodeproj eller .xcworkspace er

  3. Listen over de ønskede afhængigheder i Cartfilen, f.eks:

    github "Alamofire/Alamofire" ~> 4.7.2
  4. Kør carthage update --use-xcframeworks

  5. En Cartfile.resolved fil og en Carthage mappe vises i den samme mappe, hvor din .xcodeproj eller .xcworkspace er

  6. Stræk de opbyggede .xcframework bundles fra Carthage/Build ind i afsnittet “Frameworks and Libraries” i Xcode-projektet for din applikation.

  7. 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øre sudo 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øre brew update og brew 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øre sudo port selfupdate og sudo 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øre make 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)

  1. Opret en Cartfile, der viser de frameworks, du gerne vil bruge i dit projekt.
  2. Kør carthage update --use-xcframeworks. Dette henter afhængigheder i en Carthage/Checkouts-mappe og bygger hver enkelt eller henter et forudkompileret XCFramework.
  3. 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

  1. Slet din Carthage/Build-mappe for at fjerne alle eksisterende rammepakker.
  2. Byg nye XCFrameworks op ved at køre carthage build --use-xcframeworks. Alle andre argumenter, du bygger med, kan angives som normalt.
  3. 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.
  4. 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

  1. Opret en Cartfile, der indeholder en liste over de frameworks, du gerne vil bruge i dit projekt.
  2. Kør carthage update --platform macOS. Dette henter afhængigheder i en Carthage/Checkouts-mappe og bygger hver enkelt eller henter et forudkompileret framework.
  3. 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.

  1. Klik på ikonet + på fanen Indstillinger for opbygningsfaser i dit programmål, og vælg Ny fase for kopiering af filer.
  2. Klik på rullemenuen Destination, og vælg Products Directory.
  3. Træk og slip den tilsvarende dSYM-fil for hvert framework, du bruger.
Hvis du bygger til iOS, tvOS eller watchOS

Platformsspecifikke instruktioner

  1. Opret en Cartfile, der viser de frameworks, du ønsker at bruge i dit projekt.

  2. Kør carthage update. Dette henter afhængigheder i en Carthage/Checkouts-mappe og bygger derefter hver enkelt eller henter et forudkompileret framework.

  3. Å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.

  4. 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
  5. Opret en fil med navnet input.xcfilelist og en fil med navnet output.xcfilelist

  6. 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
  7. 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.

  8. Føj input.xcfilelist til afsnittet “Input File Lists” i Carthage run script-fasen

  9. 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.

  1. På fanen Build Phases-indstillinger for dine programmål skal du klikke på ikonet + og vælge New Run Script Phase på fanen Build Phasesindstillinger. 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.

  1. Installer travis CLI med gem install travis

  2. Sæt travis-ci op for dit repository (trin 1 og 2)

  3. Opret .travis.ymlfilen i roden af dit repository baseret på denne skabelon. Indstil FRAMEWORK_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 identitet

    For 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
  4. Kør travis setup releases, følg dokumentationen her

    Denne 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

  5. opdatér deploy-sektionen til at køre på tags:

    I .travis.yml find:

    on: repo: repo/repo

    og tilføj tags: true og skip_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.

Similar Posts

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.