Carthage soll die einfachste Möglichkeit sein, Frameworks zu Ihrer Cocoa-Anwendung hinzuzufügen.
Carthage baut Ihre Abhängigkeiten auf und stellt Ihnen binäre Frameworks zur Verfügung, Sie behalten jedoch die volle Kontrolle über Ihre Projektstruktur und -einrichtung. Carthage ändert Ihre Projektdateien oder Ihre Build-Einstellungen nicht automatisch.
Holen Sie sich Carthage, indem Sie brew install carthage
ausführen oder eine andere Installationsmethode wählen
Erstellen Sie eine Cartfile im selben Verzeichnis, in dem sich Ihr .xcodeproj
oder .xcworkspace
befindet
Listen Sie die gewünschten Abhängigkeiten im Cartfile auf, zum Beispiel:
github "Alamofire/Alamofire" ~> 5.5
Führen Sie carthage update --use-xcframeworks
aus
Eine Cartfile.resolved
Datei und ein Carthage
Verzeichnis werden im selben Verzeichnis angezeigt, in dem sich Ihre .xcodeproj
oder .xcworkspace
Datei befindet
Ziehen Sie die erstellten .xcframework
Bundles von Carthage/Build
in den Abschnitt „Frameworks und Bibliotheken“ des Xcode-Projekts Ihrer Anwendung.
Wenn Sie Carthage für eine Bewerbung nutzen, wählen Sie „Einbetten & unterschreiben“, andernfalls „Nicht einbetten“.
Eine ausführliche Anleitung finden Sie unter Hinzufügen von Frameworks zu einer Anwendung
Es gibt mehrere Möglichkeiten, Karthago zu installieren:
Installationsprogramm: Laden Sie die Datei Carthage.pkg
für die neueste Version herunter, führen Sie sie aus und befolgen Sie dann die Anweisungen auf dem Bildschirm. Wenn Sie das Paket über CLI installieren, müssen Sie möglicherweise zuerst sudo chown -R $(whoami) /usr/local
ausführen.
Homebrew: Sie können Homebrew verwenden und das carthage
Tool auf Ihrem System installieren, indem Sie einfach brew update
und brew install carthage
ausführen. (Hinweis: Wenn Sie zuvor die Binärversion von Carthage installiert haben, sollten Sie /Library/Frameworks/CarthageKit.framework
löschen).
MacPorts: Sie können MacPorts verwenden und das carthage
Tool auf Ihrem System installieren, indem Sie einfach sudo port selfupdate
und sudo port install carthage
ausführen. (Hinweis: Wenn Sie zuvor die Binärversion von Carthage installiert haben, sollten Sie /Library/Frameworks/CarthageKit.framework
löschen).
Aus der Quelle: Wenn Sie die neueste Entwicklungsversion ausführen möchten (die möglicherweise sehr instabil oder inkompatibel ist), klonen Sie einfach den master
-Zweig des Repositorys und führen Sie dann make install
aus. Erfordert Xcode 10.0 (Swift 4.2).
Sobald Sie Carthage installiert haben, können Sie mit dem Hinzufügen von Frameworks zu Ihrem Projekt beginnen. Beachten Sie, dass Carthage nur dynamische Frameworks unterstützt, die nur auf iOS 8 oder höher (oder einer beliebigen Version von OS X) verfügbar sind.
carthage update --use-xcframeworks
aus. Dadurch werden Abhängigkeiten in einen Carthage/Checkouts-Ordner abgerufen und jede einzelne erstellt oder ein vorkompiliertes XCFramework heruntergeladen.Wir empfehlen die Verwendung von XCFrameworks ab Version 0.37.0 (Januar 2021) und erfordern XCFrameworks beim Erstellen auf einem Apple Silicon Mac. Der Wechsel von diskreten Framework-Bundles zu XCFrameworks erfordert einige Änderungen an Ihrem Projekt:
Carthage/Build
Ordner, um alle vorhandenen Framework-Bundles zu entfernen.carthage build --use-xcframeworks
ausführen. Alle anderen Argumente, mit denen Sie erstellen, können wie gewohnt bereitgestellt werden.carthage copy-frameworks
des Ziels, falls vorhanden.Inkompatibilität mit Xcode 12+ : Plattformen mit mehreren Architekturen werden beim Erstellen von Framework-Bundles in Xcode 12 und höher nicht unterstützt. Erstellen Sie lieber mit XCFrameworks. Wenn Sie separate Framework-Bundles erstellen müssen, verwenden Sie eine Workaround-xcconfig-Datei.
carthage update --platform macOS
aus. Dadurch werden Abhängigkeiten in einen Carthage/Checkouts-Ordner abgerufen und jede einzelne erstellt oder ein vorkompiliertes Framework heruntergeladen.Darüber hinaus müssen Sie Debug-Symbole zum Debuggen und Absturzberichten unter OS X kopieren.
Erstellen Sie eine Cartfile, die die Frameworks auflistet, die Sie in Ihrem Projekt verwenden möchten.
Führen Sie carthage update
aus. Dadurch werden Abhängigkeiten in einen Carthage/Checkouts-Ordner abgerufen und dann jede einzelne erstellt oder ein vorkompiliertes Framework heruntergeladen.
Öffnen Sie die Registerkarte „ Allgemeine Einstellungen“ Ihrer Anwendungsziele. Für Xcode 11.0 und höher ziehen Sie im Abschnitt „Frameworks, Bibliotheken und eingebettete Inhalte“ jedes Framework, das Sie verwenden möchten, per Drag & Drop aus dem Ordner „Carthage/Build“ auf der Festplatte. Wählen Sie dann im Abschnitt „Einbetten“ für jedes hinzugefügte Element die Option „Nicht einbetten“ aus dem Pulldown-Menü aus. Für Xcode 10.x und niedriger ziehen Sie im Abschnitt „Verknüpfte Frameworks und Bibliotheken“ jedes Framework, das Sie verwenden möchten, per Drag & Drop aus dem Ordner „Carthage/Build“ auf der Festplatte.
Klicken Sie auf der Registerkarte „ Build-Phasen“ Ihrer Anwendungsziele auf das Symbol „+“ und wählen Sie „Neue Skriptphase ausführen“ aus. Erstellen Sie ein Ausführungsskript, in dem Sie Ihre Shell angeben (z. B. /bin/sh
), und fügen Sie den folgenden Inhalt zum Skriptbereich unter der Shell hinzu:
/usr/local/bin/carthage copy-frameworks
Erstellen Sie eine Datei mit dem Namen input.xcfilelist
und eine Datei mit dem Namen output.xcfilelist
Fügen Sie die Pfade zu den Frameworks, die Sie verwenden möchten, zu Ihrer input.xcfilelist
hinzu. Zum Beispiel:
$(SRCROOT)/Carthage/Build/iOS/Result.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveSwift.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
Fügen Sie die Pfade zu den kopierten Frameworks zur output.xcfilelist
hinzu. Zum Beispiel:
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveSwift.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveCocoa.framework
Wenn neben den Eingabedateien auch Ausgabedateien angegeben werden, muss Xcode das Skript nur dann ausführen, wenn sich die Eingabedateien geändert haben oder die Ausgabedateien fehlen. Dies bedeutet, dass Dirty Builds schneller sind, wenn Sie Frameworks nicht mit Carthage neu erstellt haben.
Fügen Sie die Datei „ input.xcfilelist
“ zum Abschnitt „Eingabedateilisten“ der Carthage-Ausführungsskriptphase hinzu
Fügen Sie die Datei „ output.xcfilelist
“ zum Abschnitt „Ausgabedateilisten“ der Carthage-Ausführungsskriptphase hinzu
Dieses Skript umgeht einen App Store-Übermittlungsfehler, der durch universelle Binärdateien ausgelöst wird, und stellt sicher, dass erforderliche Bitcode-bezogene Dateien und dSYMs beim Archivieren kopiert werden.
Wenn die Debug-Informationen in das Verzeichnis der gebauten Produkte kopiert werden, kann Xcode den Stack-Trace symbolisieren, wenn Sie an einem Haltepunkt anhalten. Dadurch können Sie auch den Code von Drittanbietern im Debugger schrittweise durchgehen.
Wenn Sie Ihre Anwendung zur Übermittlung an den App Store oder TestFlight archivieren, kopiert Xcode diese Dateien auch in das Unterverzeichnis dSYMs des .xcarchive
Pakets Ihrer Anwendung.
Unterwegs wird Karthago einige Bauartefakte geschaffen haben. Die wichtigste davon ist die Datei Cartfile.resolved, die die Versionen auflistet, die tatsächlich für jedes Framework erstellt wurden. Stellen Sie sicher, dass Sie Ihre Cartfile.resolved festschreiben , da alle anderen Benutzer des Projekts diese Datei benötigen, um dieselben Framework-Versionen zu erstellen.
Sie können eine Phase „Skript ausführen“ hinzufügen, um Sie automatisch zu warnen, wenn eine Ihrer Abhängigkeiten veraltet ist.
Build Phases
Ihrer Anwendungsziele auf das Symbol +
und wählen Sie New Run Script Phase
aus. Erstellen Sie ein Ausführungsskript, in dem Sie Ihre Shell angeben (z. B. /bin/sh
), und fügen Sie den folgenden Inhalt zum Skriptbereich unter der Shell hinzu: /usr/local/bin/carthage outdated --xcode-warnings 2> /dev/null
Carthage wird prüfen, ob heruntergeladene Swift-Frameworks (und gemischte Objective-C/Swift-Frameworks) mit derselben Swift-Version erstellt wurden, die lokal verwendet wird. Wenn eine Versionsinkongruenz vorliegt, wird Carthage mit der Erstellung des Frameworks aus dem Quellcode fortfahren. Wenn der Rahmen nicht aus der Quelle erstellt werden kann, wird Karthago scheitern.
Da Carthage die Ausgabe von xcrun swift --version
verwendet, um die lokale Swift-Version zu ermitteln, stellen Sie sicher, dass Sie Carthage-Befehle mit der Swift-Toolchain ausführen, die Sie verwenden möchten. Für viele Anwendungsfälle ist nichts Zusätzliches erforderlich. Wenn Sie jedoch beispielsweise ein Swift 2.3-Projekt mit Xcode 8.x erstellen, besteht eine Möglichkeit zur Angabe Ihres Standard- swift
für carthage bootstrap
darin, den folgenden Befehl zu verwenden:
TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3 carthage bootstrap
Nachdem Sie die oben genannten Schritte abgeschlossen und Ihre Änderungen übertragen haben, müssen andere Benutzer des Projekts nur noch das Repository abrufen und carthage bootstrap
ausführen, um mit den von Ihnen hinzugefügten Frameworks zu beginnen.
Die Verwendung von Carthage für die Abhängigkeiten eines beliebigen Ziels ist der Verwendung von Carthage für eine Anwendung ziemlich ähnlich. Der Hauptunterschied liegt darin, wie die Frameworks in Xcode tatsächlich eingerichtet und verknüpft werden.
Da den Unit-Test-Zielen der Abschnitt „Verknüpfte Frameworks und Bibliotheken“ auf der Registerkarte „ Allgemeine Einstellungen“ fehlt, müssen Sie stattdessen die erstellten Frameworks in die Build-Phase „Binärdateien mit Bibliotheken verknüpfen“ ziehen.
Fügen Sie im Testziel auf der Registerkarte „Build-Einstellungen“ @loader_path/Frameworks
zu den Runpath-Suchpfaden hinzu, falls es noch nicht vorhanden ist.
In seltenen Fällen möchten Sie möglicherweise auch jede Abhängigkeit in das Build-Produkt kopieren (z. B. um Abhängigkeiten in das äußere Framework einzubetten oder um sicherzustellen, dass Abhängigkeiten in einem Testpaket vorhanden sind). Erstellen Sie dazu eine neue Build-Phase „Dateien kopieren“ mit dem Ziel „Frameworks“ und fügen Sie dort auch die Framework-Referenz hinzu. Sie sollten den Befehl carthage copy-frameworks
nicht verwenden, da für Testpakete keine entfernten Frameworks erforderlich sind und die gleichzeitige Ausführung von copy-frameworks
Instanzen (mit aktivierten parallelen Builds) nicht unterstützt wird.
Wenn Sie Ihre Cartfile geändert haben oder auf die neuesten Versionen jedes Frameworks aktualisieren möchten (vorbehaltlich der von Ihnen angegebenen Anforderungen), führen Sie einfach den Befehl carthage update
erneut aus.
Wenn Sie nur eine oder bestimmte Abhängigkeiten aktualisieren möchten, übergeben Sie diese als durch Leerzeichen getrennte Liste an den update
-Befehl. z.B
carthage update Box
oder
carthage update Box Result
Mit dem Ziel, die Geschwindigkeit zu erhöhen und die Speichernutzung zu reduzieren, wurde die Logik für die Aktualisierung von Frameworks neu geschrieben. Derzeit handelt es sich um eine Opt-in-Funktion. Es kann verwendet werden, indem --new-resolver
an den Update-Befehl übergeben wird, z. B.
carthage update --new-resolver Box
Sollten bei Updates Leistungsprobleme auftreten, probieren Sie bitte den neuen Resolver aus
Wenn das Framework, das Sie Ihrem Projekt hinzufügen möchten, Abhängigkeiten aufweist, die explizit in einer Cartfile aufgeführt sind, ruft Carthage diese automatisch für Sie ab. Sie müssen sie dann selbst aus dem Ordner Carthage/Build in Ihr Projekt ziehen .
Wenn das eingebettete Framework in Ihrem Projekt Abhängigkeiten zu anderen Frameworks aufweist, müssen Sie diese mit dem Anwendungsziel verknüpfen (auch wenn das Anwendungsziel keine Abhängigkeit von diesen Frameworks hat und diese nie verwendet).
Standardmäßig checkt Carthage die Quelldateien der Abhängigkeiten direkt in Ihren Projektordner aus, sodass Sie sie nach Belieben festschreiben oder ignorieren können. Wenn Sie stattdessen Abhängigkeiten als Git-Submodule zur Verfügung haben möchten (vielleicht, damit Sie darin Änderungen festschreiben und pushen können), können Sie carthage update
oder carthage checkout
mit dem Flag --use-submodules
ausführen.
Bei dieser Ausführung schreibt Carthage in die Dateien .gitmodules
und .git/config
Ihres Repositorys und aktualisiert die Submodule automatisch, wenn sich die Versionen der Abhängigkeiten ändern.
Wenn Sie während der Entwicklung an Ihren Abhängigkeiten arbeiten möchten und möchten, dass diese automatisch neu erstellt werden, wenn Sie Ihr übergeordnetes Projekt erstellen, können Sie eine Build-Phase „Run Script“ hinzufügen, die Carthage wie folgt aufruft:
/usr/local/bin/carthage build --platform " $PLATFORM_NAME " --project-directory " $SRCROOT "
Beachten Sie, dass Sie vorher Submodule verwenden sollten, da einfache Checkouts nicht direkt geändert werden sollten.
Standardmäßig erstellt Carthage eine Abhängigkeit neu, unabhängig davon, ob es sich um dieselbe aufgelöste Version wie zuvor handelt. Das Übergeben von --cache-builds
führt dazu, dass Carthage den Neuaufbau einer Abhängigkeit möglichst vermeidet. Weitere Informationen dazu, wie Carthage dieses Caching durchführt, finden Sie in den Informationen zu den Versionsdateien.
Hinweis: Derzeit ist --cache-builds
nicht mit --use-submodules
kompatibel. Die Verwendung beider führt dazu, dass die Arbeitskopie und die festgeschriebenen Änderungen an Ihrer Submodulabhängigkeit nicht korrekt neu erstellt werden. Weitere Informationen finden Sie unter #1785.
Die automatische Vervollständigung von Carthage-Befehlen und -Optionen ist verfügbar, wie in Bash/Zsh/Fish Completion dokumentiert.
Carthage unterstützt offiziell nur dynamische Frameworks . Dynamische Frameworks können auf jeder Version von OS X verwendet werden, jedoch nur auf iOS 8 oder höher . Darüber hinaus unterstützt Carthage seit Version 0.30.0 statische Frameworks.
Da Carthage keine zentralisierte Paketliste und kein Projektspezifikationsformat hat, sollten die meisten Frameworks automatisch erstellt werden .
Die spezifischen Anforderungen jedes Rahmenprojekts sind unten aufgeführt.
Carthage erstellt nur Xcode-Schemata, die von Ihrem .xcodeproj
geteilt werden. Sie können sehen, ob alle von Ihnen beabsichtigten Schemata erfolgreich erstellt wurden, indem Sie carthage build --no-skip-current
ausführen und dann den Ordner Carthage/Build überprüfen.
Wenn beim Ausführen dieses Befehls ein wichtiges Schema nicht erstellt wird, öffnen Sie Xcode und stellen Sie sicher, dass das Schema als Shared markiert ist, damit Carthage es erkennen kann.
Wenn in carthage build --no-skip-current
Buildfehler auftreten, versuchen Sie xcodebuild -scheme SCHEME -workspace WORKSPACE build
oder xcodebuild -scheme SCHEME -project PROJECT build
(mit den tatsächlichen Werten) auszuführen und prüfen Sie, ob dort derselbe Fehler auftritt. Dies sollte hoffentlich genügend Informationen liefern, um das Problem zu lösen.
Wenn Sie mehrere Versionen der Apple-Entwicklertools installiert haben (z. B. eine Xcode-Beta), verwenden Sie xcode-select
um zu ändern, welche Version Carthage verwendet.
Wenn Sie Ihr Framework immer noch nicht mit Carthage erstellen können, öffnen Sie bitte ein Problem und wir helfen Ihnen gerne weiter!
Carthage ermittelt, welche Versionen Ihres Frameworks verfügbar sind, indem es die im Repository veröffentlichten Tags durchsucht und versucht, jeden Tag-Namen als semantische Version zu interpretieren. Im Tag v1.2
ist die semantische Version beispielsweise 1.2.0.
Tags ohne Versionsnummer oder mit Zeichen nach der Versionsnummer (z. B. 1.2-alpha-1
) werden derzeit nicht unterstützt und werden ignoriert.
Carthage kann automatisch vorgefertigte Frameworks verwenden, anstatt sie von Grund auf neu zu erstellen, wenn sie an eine GitHub-Version im Repository Ihres Projekts oder über eine binäre Projektdefinitionsdatei angehängt werden.
Um vorgefertigte Frameworks für ein bestimmtes Tag anzubieten, sollten die Binärdateien für alle unterstützten Plattformen zusammen in einem Archiv komprimiert werden und dieses Archiv sollte an eine veröffentlichte Version angehängt werden, die diesem Tag entspricht. Der Anhang sollte .framework
im Namen enthalten (z. B. ReactiveCocoa.framework.zip
), um Carthage anzuzeigen, dass er Binärdateien enthält. Die Verzeichnisstruktur des Archivs ist frei, Frameworks sollten jedoch nur einmal im Archiv erscheinen, da sie basierend auf ihrem Namen (z. B. ReactiveCocoa.framework
) nach Carthage/Build/<platform>
kopiert werden.
Um vorgefertigte XCFrameworks anzubieten, erstellen Sie mit --use-xcframeworks
und befolgen Sie den gleichen Prozess, um alle XCFrameworks in einem Archiv zu komprimieren. Fügen Sie .xcframework
in den Anhangsnamen ein. Ab Version 0.38.0 lädt Carthage vorzugsweise .xcframework
Anhänge herunter, wenn --use-xcframeworks
übergeben wird.
Sie können den Archivierungsvorgang mit Karthago selbst durchführen, indem Sie Folgendes verwenden:
-carthage build --no-skip-current
-carthage archive YourFrameworkName
oder alternativ
carthage build --archive
Entwurfsversionen werden automatisch ignoriert, auch wenn sie dem gewünschten Tag entsprechen.
Es ist möglich, travis-ci zu verwenden, um Ihre getaggten Veröffentlichungen zu erstellen und hochzuladen.
Installieren Sie Travis CLI mit gem install travis
Richten Sie travis-ci für Ihr Repository ein (Schritte 1 und 2)
Erstellen Sie basierend auf dieser Vorlage die Datei .travis.yml
im Stammverzeichnis Ihres Repositorys. Setzen Sie FRAMEWORK_NAME
auf den richtigen Wert.
Ersetzen Sie PROJECT_PLACEHOLDER und SCHEME_PLACEHOLDER
Wenn Sie einen Arbeitsbereich anstelle eines Projekts verwenden, entfernen Sie die Zeile xcode_project und kommentieren Sie die Zeile xcode_workspace aus.
Das Projekt sollte das folgende Format haben: MyProject.xcodeproj
Der Arbeitsbereich sollte das folgende Format haben: MyWorkspace.xcworkspace
Fühlen Sie sich frei, den xcode_sdk
-Wert auf ein anderes SDK zu aktualisieren. Beachten Sie, dass Sie zum Testen auf dem iphoneos SDK eine Code-Signatur-Identität hochladen müssen
Weitere Informationen finden Sie in den Travis-Dokumenten für Objective-C-Projekte
language : objective-c
osx_image : xcode7.3
xcode_project : <PROJECT_PLACEHOLDER>
# xcode_workspace: <WORKSPACE_PLACEHOLDER>
xcode_scheme : <SCHEME_PLACEHOLDER>
xcode_sdk : iphonesimulator9.3
env :
global :
- FRAMEWORK_NAME=<THIS_IS_A_PLACEHOLDER_REPLACE_ME>
before_install :
- brew update
- brew outdated carthage || brew upgrade carthage
before_script :
# bootstrap the dependencies for the project
# you can remove if you don't have dependencies
- carthage bootstrap
before_deploy :
- carthage build --no-skip-current
- carthage archive $FRAMEWORK_NAME
Führen Sie travis setup releases
aus und folgen Sie der Dokumentation hier
Dieser Befehl kodiert Ihre GitHub-Anmeldeinformationen in die Datei .travis.yml
, damit Travis die Version auf GitHub.com hochladen kann. Wenn Sie nach der hochzuladenden Datei gefragt werden, geben Sie $FRAMEWORK_NAME.framework.zip
ein
Aktualisieren Sie den Bereitstellungsabschnitt, um ihn mit Tags auszuführen:
Suchen Sie in .travis.yml
nach:
on :
repo : repo/repo
Und fügen Sie tags: true
und skip_cleanup: true
:
skip_cleanup : true
on :
repo : repo/repo
tags : true
Dadurch weiß Travis, dass er eine Bereitstellung erstellen muss, wenn ein neues Tag gepusht wird, und verhindert, dass Travis die generierte ZIP-Datei bereinigt
Wenn Sie viele dynamische Frameworks in Ihre App einbetten, können die Startzeiten vor dem Hauptstart recht langsam sein. Carthage kann dazu beitragen, dies zu mildern, indem es Ihre dynamischen Frameworks stattdessen als statische Frameworks aufbaut. Statische Frameworks können direkt mit Ihrer Anwendung verknüpft oder mit ein paar einfachen Änderungen an Ihrem Workflow zu einem größeren dynamischen Framework zusammengeführt werden, was zu einer drastischen Verkürzung der Zeit vor dem Hauptstart führen kann.
Seit Version 0.30.0 führt das Carthage-Projekt Unterstützung für statisch verknüpfte Frameworks ein, die in Swift oder Objective-C geschrieben wurden und deren Unterstützung in Xcode 9.4 eingeführt wurde. Bitte beachten Sie jedoch, dass dort ausdrücklich „frameworks“ steht, weshalb Darwin Bundles mit der Erweiterung „.framework“ und darin enthaltenen statisch verknüpften Objektarchiven enthält. Karthago unterstützt derzeit keine statischen Bibliothekssysteme und es gibt auch keine Pläne, diese Unterstützung in Zukunft einzuführen.
Der Workflow unterscheidet sich kaum:
Jedoch:
Weitere Informationen finden Sie im StaticFrameworks-Dokument.
Bitte beachten Sie, dass für diesen Ansatz einige Einschränkungen gelten:
Möchten Sie dafür werben, dass Ihr Projekt mit Karthago genutzt werden kann? Sie können ein Kompatibilitätsabzeichen hinzufügen:
… zu Ihrer README
, indem Sie einfach den folgenden Markdown einfügen:
[ ![ Carthage compatible ] ( https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat )] ( https://github.com/Carthage/Carthage )
Ein vorgefertigtes Framework kann nicht mithilfe der schrittweisen Ausführung auf einem anderen Computer als dem, auf dem das Framework erstellt wurde, debuggt werden. Einfach carthage bootstrap/build/update --no-use-binaries
sollte dieses Problem beheben, aber für eine automatisiertere Problemumgehung siehe #924. Dupe rdar://23551273, wenn Sie möchten, dass Apple die Grundursache dieses Problems behebt.
Der Großteil der Funktionalität des carthage
Befehlszeilentools ist tatsächlich in einem Framework namens CarthageKit gekapselt.
Wenn Sie daran interessiert sind, Carthage als Teil eines anderen Tools zu verwenden oder vielleicht die Funktionalität von Carthage zu erweitern, werfen Sie einen Blick auf den CarthageKit-Quellcode, um zu sehen, ob die API Ihren Anforderungen entspricht.
CocoaPods ist ein langjähriger Abhängigkeitsmanager für Cocoa. Warum wurde Karthago gegründet?
Erstens erstellt und aktualisiert CocoaPods (standardmäßig) automatisch einen Xcode-Arbeitsbereich für Ihre Anwendung und alle Abhängigkeiten. Carthage erstellt Framework-Binärdateien mit xcodebuild
, überlässt aber die Verantwortung für deren Integration dem Benutzer. Der Ansatz von CocoaPods ist einfacher zu verwenden, während der von Carthage flexibel und unaufdringlich ist.
Das Ziel von CocoaPods ist in seiner README-Datei wie folgt aufgeführt:
… um die Auffindbarkeit und das Engagement in Open-Source-Bibliotheken Dritter zu verbessern, indem ein stärker zentralisiertes Ökosystem geschaffen wird.
Im Gegensatz dazu wurde Karthago als dezentraler Abhängigkeitsmanager geschaffen. Es gibt keine zentrale Projektliste, was den Wartungsaufwand reduziert und zentrale Fehlerquellen vermeidet. Allerdings ist die Projekterkennung schwieriger – Benutzer müssen auf die Trending-Seiten von GitHub oder ähnliches zurückgreifen.
CocoaPods-Projekte müssen außerdem über eine sogenannte Podspec-Datei verfügen, die Metadaten über das Projekt enthält und angibt, wie es erstellt werden soll. Carthage verwendet xcodebuild
zum Erstellen von Abhängigkeiten. Anstatt sie in einen einzelnen Arbeitsbereich zu integrieren, verfügt es über keine ähnliche Spezifikationsdatei, aber Ihre Abhängigkeiten müssen ein eigenes Xcode-Projekt enthalten, das beschreibt, wie ihre Produkte erstellt werden.
Letztendlich haben wir Carthage entwickelt, weil wir das einfachste Tool überhaupt wollten – einen Abhängigkeitsmanager, der die Arbeit erledigt, ohne die Verantwortung von Xcode zu übernehmen und ohne zusätzlichen Aufwand für Framework-Autoren zu schaffen. CocoaPods bietet viele erstaunliche Funktionen, die Carthage niemals haben wird, allerdings auf Kosten zusätzlicher Komplexität.
Carthage wird unter der MIT-Lizenz veröffentlicht.
Das Hintergrundfoto im Header wird unter der CC BY-NC-SA 2.0-Lizenz veröffentlicht. Originalfoto von Richard Mortel.