Carthage — ένας αποκεντρωμένος διαχειριστής εξαρτήσεων για έργα Cocoa (iOS, macOS, watchOS, tvOS), που δημιουργεί δυαδικά frameworks από πηγαίο κώδικα. Σε αντίθεση με το CocoaPods, το Carthage δεν τροποποιεί αυτόματα το έργο — ο προγραμματιστής προσθέτει μόνος του τα κατασκευασμένα frameworks στο Xcode. Το Carthage είναι γραμμένο σε Swift, χρησιμοποιεί Cartfile για την περιγραφή εξαρτήσεων και υποστηρίζει παράλληλη δημιουργία. Σύμφωνα με τα δεδομένα του αποθετηρίου GitHub, το Carthage έχει συγκεντρώσει πάνω από 15.000 αστέρια και παραμένει ένα εξειδικευμένο αλλά περιζήτητο εργαλείο για έργα που απαιτούν ελάχιστη παρέμβαση στη διαμόρφωση του Xcode.
Κύρια σημεία
carthage bootstrap ή carthage update — το Carthage κλωνοποιεί τα αποθετήρια και τα μεταγλωττίζει σε .xcframeworkCarthage — ένας διαχειριστής εξαρτήσεων με αποκεντρωμένη αρχιτεκτονική, που δημιουργήθηκε το 2014 από προγραμματιστές της κοινότητας Swift. Το Carthage δεν χρησιμοποιεί κεντρικό μητρώο προδιαγραφών — κάθε βιβλιοθήκη συνδέεται απευθείας από το αποθετήριο Git μέσω URL ή ονόματος στο GitHub. Το Carthage κατεβάζει τον πηγαίο κώδικα, τον μετατρέπει σε δυαδικό framework (.xcframework ή .framework) και παρέχει στον προγραμματιστή ένα έτοιμο τεχνούργημα για χειροκίνητη ενσωμάτωση στο έργο Xcode.
Η αρχιτεκτονική του Carthage περιλαμβάνει τρία στοιχεία: το εργαλείο CLI carthage, το αρχείο διαμόρφωσης Cartfile και τον κατάλογο Carthage/Build/ με τα κατασκευασμένα frameworks. Η βασική διαφορά του Carthage από το CocoaPods — η απουσία αυτόματης τροποποίησης του .xcodeproj. Το Carthage δεν δημιουργεί .xcworkspace, δεν ρυθμίζει σημαίες μεταγλωττιστή και δεν παράγει Pods.xcconfig. Ο προγραμματιστής προσθέτει μόνος του τα frameworks στο έργο μέσω Xcode, που δίνει πλήρη έλεγχο στη διαδικασία ενσωμάτωσης.
Carthage χρησιμοποιεί παράλληλη δημιουργία εξαρτήσεων, η οποία επιταχύνει σημαντικά τη διαδικασία σε πολυπύρηνους επεξεργαστές. Κάθε εξάρτηση δημιουργείται ως ξεχωριστός στόχος, και το Carthage επιλύει αυτόματα το γράφημα μεταβατικών εξαρτήσεων, δημιουργώντας τις με τη σωστή σειρά. Σύμφωνα με συγκριτικές δοκιμές της κοινότητας, το Carthage δημιουργεί 15–20 εξαρτήσεις κατά μέσο όρο σε 30–60 δευτερόλεπτα σε σύγχρονα Mac, που είναι ταχύτερο από το CocoaPods για έργα με πολλές βιβλιοθήκες. Το Carthage υποστηρίζει όλες τις πλατφόρμες Apple: iOS, macOS, watchOS και tvOS, και από την έκδοση 0.38+ — δημιουργία καθολικών .xcframework για υποστήριξη προσομοιωτών και συσκευών Apple Silicon.
Carthage κλωνοποιεί το αποθετήριο Git κάθε εξάρτησης, μεταβαίνει στην καθορισμένη έκδοση (tag, commit ή branch) και εκκινεί το xcodebuild για τη δημιουργία του framework. Το Carthage καθορίζει τον τύπο του έργου Xcode (framework, dynamic framework, στατική βιβλιοθήκη) αυτόματα βάσει του σχήματος δημιουργίας. Αν το έργο περιέχει πολλαπλά σχήματα, το Carthage χρησιμοποιεί το προεπιλεγμένο σχήμα (πρώτο σε αλφαβητική σειρά). Μετά τη δημιουργία, το Carthage αντιγράφει το έτοιμο framework στο Carthage/Build/ και δημιουργεί το αρχείο Cartfile.resolved με καθορισμό ακριβών εκδόσεων. Το Carthage υποστηρίζει προσωρινή αποθήκευση των κατασκευασμένων frameworks — η εκ νέου δημιουργία χωρίς αλλαγές εξαρτήσεων δεν εκτελείται.
Οι μεταβατικές εξαρτήσεις στο Carthage διαχειρίζονται μέσω Cartfile.resolved: το Carthage χτίζει το γράφημα όλων των απαραίτητων εξαρτήσεων και τις δημιουργεί με τη σωστή σειρά. Αν δύο βιβλιοθήκες εξαρτώνται από την ίδια τρίτη βιβλιοθήκη, το Carthage τη δημιουργεί μία φορά και τη χρησιμοποιεί και για τις δύο. Το Carthage ειδοποιεί για σφάλματα δημιουργίας με αναφορά συγκεκριμένου στόχου και αιτίας — αυτό απλοποιεί τη διάγνωση προβλημάτων.
Cartfile — αρχείο διαμόρφωσης στη γλώσσα Ruby (μορφή Cartfile) που ορίζει τις εξαρτήσεις του έργου Carthage. Το Cartfile βρίσκεται στη ρίζα του έργου δίπλα στο .xcodeproj. Κάθε γραμμή του Cartfile περιγράφει μία εξάρτηση: πηγή (URL Git, αποθετήριο GitHub) και έκδοση. Η σύνταξη υποστηρίζει καθορισμό εκδόσεων μέσω tags, commits και branches.
# Βασικές εξαρτήσεις Carthage
github "Alamofire/Alamofire" ~> 5.9
github "SnapKit/SnapKit" ~> 5.7
github "onevcat/Kingfisher" == 8.0.0Η οδηγία github "Owner/Repo" — συντομευμένη μορφή για αποθετήρια GitHub. Το Carthage δημιουργεί αυτόματα URL στη μορφή https://github.com/Owner/Repo.git. Για GitLab, Bitbucket και άλλες υπηρεσίες Git χρησιμοποιείται πλήρες URL: git "https://gitlab.com/owner/repo.git". Τελεστές εκδόσεων: ~> 5.9 (οποιαδήποτε έκδοση από 5.9 έως 6.0 εξαιρώντας το 6.0), == 8.0.0 (ακριβής έκδοση), >= 1.0 (ελάχιστη έκδοση). Η σύνδεση συγκεκριμένου commit μπορεί να γίνει μέσω github "owner/repo" "abc1234".
Carthage υποστηρίζει πολλαπλούς καταλόγους για διαφορετικές διαμορφώσεις: Cartfile(κύριο), Cartfile.private (για εσωτερικές εξαρτήσεις που δεν δημοσιεύονται) και Cartfile.resolved(δημιουργείται αυτόματα). Οι ιδιωτικές εξαρτήσεις είναι χρήσιμες για βιβλιοθήκες που χρησιμοποιούνται μόνο σε κατασκευή Development, όπως δοκιμαστικά frameworks.
# Cartfile — κύριες εξαρτήσεις
github "Alamofire/Alamofire" ~> 5.9
github "SwiftyJSON/SwiftyJSON" ~> 4.0
github "realm/realm-swift" ~> 10.0
# Πλήρες URL για GitLab
git "https://gitlab.com/company/internal-lib.git" == 2.1.1
# Κλάδος ανάπτυξης
github "marmelroy/PhoneNumberKit" "development"github και git — δύο τύποι πηγών στο Cartfile. Ο πρώτος προορίζεται αποκλειστικά για GitHub και δημιουργεί αυτόματα URL. Ο δεύτερος — για οποιαδήποτε δημόσια ή ιδιωτικά αποθετήρια Git με πλήρες URL. Η έκδοση μπορεί να καθοριστεί με tag (== 2.1.1), σημασιολογικό εύρος (~> 5.9), όνομα branch ("development") ή hash commit ("a1b2c3d"). Η χρήση σημασιολογικών εύρων (~>) συνιστάται για εξαρτήσεις που ακολουθούν SemVer — αυτό προστατεύει από αλλαγές που σπάνε τη συμβατότητα κατά την ενημέρωση.
Cartfile.resolved δημιουργείται αυτόματα μετά από carthage update. Καθορίζει ακριβείς εκδόσεις όλων των εγκατεστημένων εξαρτήσεων, συμπεριλαμβανομένων των μεταβατικών. Το αρχείο πρέπει να διατηρείται στο Git — χωρίς αυτό, η εντολή carthage bootstrap σε άλλο μηχάνημα θα δημιουργήσει βιβλιοθήκες με τους ίδιους κανόνες, αλλά οι εκδόσεις μπορεί να διαφέρουν. Το carthage outdated εμφανίζει μια λίστα παλαιών εξαρτήσεων για τις οποίες είναι διαθέσιμες νέες εκδόσεις.
Carthage εγκαθίσταται μέσω Homebrew — του τυπικού διαχειριστή πακέτων για macOS. Εναλλακτικές μέθοδοι: εγκατάσταση από το έτοιμο πρόγραμμα εγκατάστασης .pkg από το GitHub ή δημιουργία από πηγαίο κώδικα. Το Carthage απαιτεί Xcode με Command Line Tools (συμπεριλαμβανομένου xcodebuild), και σε Apple Silicon Mac — Rosetta 2 για ορισμένες παλαιότερες εξαρτήσεις.
# Εγκατάσταση Carthage μέσω Homebrew
brew install carthage
# Έλεγχος έκδοσης
carthage version
# Εγκατάσταση από .pkg (εάν Homebrew δεν είναι διαθέσιμο)
# Λήψη Carthage.pkg από GitHub Releases και εγκατάσταση χειροκίνηταΜετά την εγκατάσταση, η προετοιμασία ενός έργου Carthage ξεκινά με τη δημιουργία του Cartfile στη ρίζα του έργου. Το Carthage δεν έχει εντολή init — το αρχείο δημιουργείται χειροκίνητα σε επεξεργαστή κειμένου. Αφού γεμίσει το Cartfile με εξαρτήσεις, ο προγραμματιστής εκτελεί carthage bootstrap (αν υπάρχει ήδη Cartfile.resolved) ή carthage update (αρχική εγκατάσταση ή ενημέρωση). Το Carthage κλωνοποιεί τα αποθετήρια, δημιουργεί τα frameworks και τα τοποθετεί στο Carthage/Build/.
Ενημέρωση του Carthage γίνεται μέσω brew upgrade carthage. Η έκδοση ελέγχεται με την εντολή carthage version. Η τελευταία σταθερή έκδοση στα μέσα 2025 — 0.40 με προεπιλεγμένη υποστήριξη για .xcframework, βελτιωμένη παράλληλη δημιουργία και πλήρη υποστήριξη Swift 6. Από την έκδοση 0.39 το Carthage σταμάτησε να δημιουργεί παλαιού τύπου .framework χωρίς γέφυρα συμβατότητας — συνιστάται η ρητή αναφορά --use-xcframeworks.
# Ενημέρωση Carthage μέσω Homebrew
brew upgrade carthage
# Εγκατάσταση συγκεκριμένης έκδοσης
brew install carthage@0.39
# Πλήρης επανεγκατάσταση
brew uninstall carthage && brew install carthageΣημείωση: Το Carthage δεν δημιουργεί .xcworkspace και δεν τροποποιεί το .xcodeproj. Σε αντίθεση με το CocoaPods, το Carthage αφήνει τον πλήρη έλεγχο της διαμόρφωσης του Xcode στον προγραμματιστή. Αυτό σημαίνει ότι μετά την εγκατάσταση εξαρτήσεων πρέπει να προσθέσετε χειροκίνητα τα frameworks στο Xcode (βλ. ενότητα «Ενσωμάτωση Carthage frameworks στο Xcode»). Το Carthage επίσης απαιτεί κάθε εξάρτηση να περιέχει ένα έργο Xcode ή workspace με στόχο framework — διαφορετικά η δημιουργία θα αποτύχει.
Carthage προσφέρει τρεις κύριες εντολές για εργασία με εξαρτήσεις: bootstrap, update και build. Το carthage bootstrap δημιουργεί εξαρτήσεις από υπάρχον Cartfile.resolved — συνιστάται για περιβάλλοντα CI και προγραμματιστές που εντάσσονται στο έργο. Το carthage update ενημερώνει το Cartfile.resolved στις τελευταίες εκδόσεις (λαμβάνοντας υπόψη περιορισμούς Cartfile) και εκτελεί τη δημιουργία. Το carthage build δημιουργεί όλες τις καθορισμένες εξαρτήσεις χωρίς αποθήκευση εκδόσεων.
# Αρχική εγκατάσταση (ενημερώνει εκδόσεις)
carthage update --use-xcframeworks --platform iOS
# Εκ νέου δημιουργία βάσει σταθερών εκδόσεων
carthage bootstrap --use-xcframeworks --platform iOS
# Δημιουργία μόνο μίας εξάρτησης
carthage build Alamofire --platform iOSΗ σημαία --use-xcframeworks δίνει εντολή στο Carthage να δημιουργεί καθολικά .xcframework αντί για παλαιού τύπου .framework. Αυτό εξασφαλίζει υποστήριξη τόσο για τον προσομοιωτή όσο και για την πραγματική συσκευή, καθώς και το Apple Silicon Mac χωρίς πρόσθετα σενάρια. Η σημαία --platform iOS περιορίζει τη δημιουργία σε μία πλατφόρμα iOS — αυτό επιταχύνει σημαντικά τη διαδικασία, ειδικά αν στο έργο υπάρχουν βιβλιοθήκες πολλαπλών πλατφορμών.
Carthage υποστηρίζει παράλληλη δημιουργία μέσω της σημαίας --cache-builds, η οποία αποθηκεύει προσωρινά ήδη κατασκευασμένα frameworks. Κατά την εκ νέου δημιουργία, το Carthage ελέγχει το hash του Git commit και, αν ο κώδικας δεν έχει αλλάξει, παραλείπει τη μεταγλώττιση. Για διακομιστές CI συνιστάται η προσωρινή αποθήκευση του καταλόγου Carthage/Build/ και ~/Library/Caches/carthage/. Το Carthage υποστηρίζει επίσης --verbose για λεπτομερή καταγραφή και --no-use-binaries για υποχρεωτική δημιουργία από πηγαίο κώδικα (αν ο προγραμματιστής δεν εμπιστεύεται προκατασκευασμένα δυαδικά).
| Εντολή | Ενέργεια |
|---|---|
carthage update | Ενημερώνει το Cartfile.resolved και δημιουργεί όλα τα frameworks |
carthage bootstrap | Δημιουργεί frameworks βάσει υπάρχοντος Cartfile.resolved χωρίς ενημέρωση |
carthage build | Δημιουργεί καθορισμένες εξαρτήσεις χωρίς καθορισμό εκδόσεων |
carthage outdated | Εμφανίζει λίστα εξαρτήσεων με διαθέσιμες ενημερώσεις |
carthage checkout | Μόνο κλωνοποιεί αποθετήρια χωρίς δημιουργία |
Ενσωμάτωση των Carthage frameworks στο Xcode γίνεται χειροκίνητα σε τέσσερα βήματα. Μετά την εκτέλεση carthage update ή bootstrap, όλα τα κατασκευασμένα frameworks βρίσκονται στο Carthage/Build/iOS/ (ή αντίστοιχη πλατφόρμα). Ο προγραμματιστής ανοίγει το έργο Xcode, επιλέγει τον στόχο εφαρμογής και προσθέτει frameworks στο General → Frameworks, Libraries, and Embedded Content. Για frameworks χρόνου εκτέλεσης (δυναμικές βιβλιοθήκες), πρέπει να επιλεγεί «Embed & Sign» — διαφορετικά η εφαρμογή θα καταρρεύσει κατά την εκκίνηση με σφάλμα «dyld: Library not loaded».
Carthage για στατικές βιβλιοθήκες λειτουργεί πιο απλά — δεν απαιτούν φάση embed, καθώς συνδέονται άμεσα στο εκτελέσιμο αρχείο της εφαρμογής. Ωστόσο, το Carthage από προεπιλογή δημιουργεί δυναμικά frameworks (εκτός από ρητά ρυθμισμένες στατικές βιβλιοθήκες). Για έργα όπου είναι σημαντική η ελαχιστοποίηση του μεγέθους εφαρμογής, συνιστάται η χρήση στατικής σύνδεσης μέσω ρυθμίσεων Xcode.
Επιπλέον βήμα — προσθήκη Input Files στο Build Phase → Run Script. Το Carthage απαιτεί σενάριο για την αφαίρεση τεχνουργημάτων προσομοιωτή από το κατασκευασμένο framework (strip simulator architectures). Αυτό το σενάριο είναι απαραίτητο για κατασκευές App Store:
# Run Script για App Store (strip simulator architectures)
FRAMEWORKS_DIR="${SRCROOT}/Carthage/Build/iOS"
for framework in "$FRAMEWORKS_DIR"/*.framework; do
bash "$BUILD_DIR/src/scripts/strip-framework.sh" "$framework"
doneCarthage δεν απαιτεί χρήση .xcworkspace — όλες οι εξαρτήσεις είναι ήδη κατασκευασμένες σε δυαδικά frameworks. Το Carthage λειτουργεί απευθείας με .xcodeproj, σε αντίθεση με το CocoaPods που δημιουργεί workspace. Αυτό απλοποιεί τον έλεγχο εκδόσεων και τη ρύθμιση CI, καθώς οι εξαρτήσεις Carthage δεν αλλάζουν τη διαμόρφωση του έργου Xcode. Η μόνη αλλαγή — η προσθήκη frameworks στον στόχο, η οποία καταγράφεται στο .pbxproj.
| Βήμα | Ενέργεια |
|---|---|
| 1 | Εκτελέστε carthage update --use-xcframeworks |
| 2 | Σύρετε τα frameworks από Carthage/Build/ στο General → Frameworks |
| 3 | Ορίστε Embed & Sign για δυναμικά frameworks |
| 4 | Προσθέστε Run Script Phase για αφαίρεση αρχιτεκτονικών προσομοιωτή |
| 5 | Δημιουργήστε το έργο — τα frameworks πρέπει να συνδέονται αυτόματα |
Carthage, CocoaPods και Swift Package Manager (SPM) — οι τρεις κύριοι διαχειριστές εξαρτήσεων στην ανάπτυξη iOS. Το Carthage ξεχωρίζει με αποκεντρωμένη προσέγγιση, το CocoaPods προσφέρει κεντρικό μητρώο, το SPM — ενσωματωμένη λύση από την Apple. Η επιλογή μεταξύ τους εξαρτάται από τις απαιτήσεις του έργου, το μέγεθος της ομάδας και το απαιτούμενο επίπεδο αυτοματισμού.
| Κριτήριο | Carthage | CocoaPods | SPM |
|---|---|---|---|
| Αρχιτεκτονική | Αποκεντρωμένη | Κεντρικό μητρώο | Ενσωματωμένο στο Xcode |
| Γλώσσα διαμόρφωσης | Cartfile (παρόμοιο με Ruby) | Podfile (Ruby DSL) | Package.swift (Swift) |
| Ενσωμάτωση με Xcode | Χειροκίνητη (drag & drop) | Μέσω workspace | Ενσωματωμένη |
| Μεταβατικές εξαρτήσεις | Αυτόματα | Αυτόματα | Αυτόματα |
| Μητρώο βιβλιοθηκών | Όχι (αποθετήρια Git) | 100.000+ στο Specs | ~65.000 |
| Υποστήριξη πόρων | Όχι | Ναι (resource bundles) | Ναι (Resources) |
| Ταχύτητα δημιουργίας | Γρήγορη (παράλληλη) | Μέτρια | Γρήγορη |
| Έλεγχος ενσωμάτωσης | Πλήρης | Αυτόματος | Αυτόματος |
Carthage επιλέγεται για έργα όπου απαιτείται ελάχιστη παρέμβαση στη διαμόρφωση του Xcode και πλήρης έλεγχος της διαδικασίας ενσωμάτωσης. Το Carthage είναι ιδανικό για ανοιχτές βιβλιοθήκες και frameworks, όπου ο συγγραφέας θέλει να δώσει στους χρήστες τη δυνατότητα να δημιουργούν ανεξάρτητα εξαρτήσεις. Το Carthage είναι επίσης δημοφιλές στην κοινότητα προγραμματιστών που εκτιμούν τη φιλοσοφία UNIX: κάθε εργαλείο κάνει ένα πράγμα καλά. Το CocoaPods παραμένει πρότυπο για εταιρικά έργα με δεκάδες εξαρτήσεις όπου είναι σημαντικός ο αυτοματισμός. Το SPM — επιλογή για νέα έργα, καθώς είναι ενσωματωμένο στο Xcode και αναπτύσσεται ενεργά από την Apple.
Μετανάστευση μεταξύ διαχειριστών απαιτεί διαφορετική προσέγγιση. Carthage → SPM: αφαιρέστε τα frameworks από το Xcode, διαγράψτε το Cartfile και προσθέστε Package Dependencies μέσω File → Add Package Dependencies. Carthage → CocoaPods: αφαιρέστε τα Carthage frameworks, δημιουργήστε Podfile, προσθέστε εξαρτήσεις και εκτελέστε pod init && pod install. Κατά τη μετανάστευση από Carthage σε CocoaPods ή SPM εξαφανίζεται η ανάγκη χειροκίνητης ενημέρωσης frameworks — όλες οι εξαρτήσεις ενημερώνονται με μία εντολή. Το Carthage παραμένει σχετικό για έργα όπου είναι σημαντικό να αποφευχθεί ο vendor lock-in και να διατηρηθεί η διαφάνεια της δημιουργίας εξαρτήσεων.
Carthage — ένα σταθερό εργαλείο, αλλά οι προγραμματιστές περιστασιακά αντιμετωπίζουν τυπικά προβλήματα, ειδικά κατά τη δημιουργία σε διακομιστές CI, ενημέρωση Xcode ή αλλαγή εκδόσεων Swift. Τα περισσότερα προβλήματα επιλύονται με εκκαθάριση της προσωρινής μνήμης, σωστή διαμόρφωση του --use-xcframeworks και έλεγχο συμβατότητας ελάχιστης έκδοσης iOS.
Σφάλμα «The file manager returned an error» — εμφανίζεται όταν η προσωρινή μνήμη Carthage είναι κατεστραμμένη ή υπάρχει σύγκρουση δικαιωμάτων αρχείων. Λύση: διαγράψτε την προσωρινή μνήμη με την εντολή rm -rf ~/Library/Caches/carthage και επανεκκινήστε το carthage bootstrap. Βοηθά επίσης η διαγραφή του καταλόγου Carthage/ στο έργο και η εκ νέου δημιουργία. Σε διακομιστές CI, η προσωρινή μνήμη Carthage πρέπει να ενημερώνεται μόνο όταν αλλάζει το Cartfile.resolved.
Σφάλμα «No such module» — το framework δεν βρέθηκε στο Xcode, αν και η δημιουργία Carthage ήταν επιτυχής. Λύση: ελέγξτε τη διαδρομή του framework στο General → Frameworks, Libraries, and Embedded Content. Το framework πρέπει να βρίσκεται στο Carthage/Build/iOS/. Βεβαιωθείτε ότι το .xcframework προστέθηκε σωστά (σύρτε ξανά). Για δυναμικά frameworks ελέγξτε το Embed & Sign. Αν το σφάλμα παραμένει — προσθέστε FRAMEWORK_SEARCH_PATHS στο Build Settings.
Σφάλμα δημιουργίας λόγω ασυμβατότητας Swift — η βιβλιοθήκη δημιουργήθηκε για διαφορετική έκδοση Swift από το έργο. Λύση: χρησιμοποιήστε carthage update --no-use-binaries για υποχρεωτική δημιουργία από πηγαίο κώδικα με την ίδια έκδοση Swift. Αν η βιβλιοθήκη δεν μεταγλωττίζεται στην τρέχουσα έκδοση — χρησιμοποιήστε .xcconfig για καθορισμό έκδοσης Swift ή κάντε fork τη βιβλιοθήκη. Από το Carthage 0.39, το --use-xcframeworks συμπεριλαμβάνει αυτόματα τη σωστή έκδοση Swift στο δυαδικό.
Προβλήματα με δημιουργία CI — το Carthage στο CI απαιτεί σωστή διαμόρφωση προσωρινής αποθήκευσης. Λύση: αποθηκεύστε προσωρινά Carthage/Build/ και ~/Library/Caches/carthage/. Χρησιμοποιήστε carthage bootstrap --use-xcframeworks --platform iOS αντί για update στο CI για να μην αλλάζουν οι εκδόσεις. Για GitHub Actions διατίθεται επίσημη ενέργεια Carthage. Για Jenkins — πρόσθετο CarthageBuild. Το Carthage μπορεί να καταρρεύσει σε macOS χωρίς GUI — λύση: εγκαταστήστε brew install xcode-build-server ή προσθέστε το κλειδί -UseModernBuildSystem=NO.
| Πρόβλημα | Αιτία | Λύση |
|---|---|---|
| File manager error | Κατεστραμμένη προσωρινή μνήμη | Εκκαθαρίστε ~/Library/Caches/carthage/ |
| No such module | Framework δεν προστέθηκε στο Xcode | Ελέγξτε τα Frameworks στον στόχο |
| Ασυμβατότητα Swift | Διαφορετικές εκδόσεις Swift | --no-use-binaries ή νέα έκδοση Carthage |
| Σφάλμα στο CI | Έλλειψη προσωρινής μνήμης ή GUI | Διαμορφώστε προσωρινή μνήμη Carthage/Build/ |
| Η βιβλιοθήκη δεν δημιουργείται | Δεν υπάρχει έργο Xcode στη βιβλιοθήκη | Ελέγξτε τη δομή του αποθετηρίου |
Συχνές ερωτήσεις
Carthage — ένας αποκεντρωμένος διαχειριστής εξαρτήσεων για πλατφόρμες Apple. Σε αντίθεση με το CocoaPods, το Carthage δεν χρησιμοποιεί κεντρικό μητρώο βιβλιοθηκών, δεν τροποποιεί αυτόματα το έργο Xcode και δεν δημιουργεί .xcworkspace. Το Carthage μετατρέπει τις εξαρτήσεις σε δυαδικά frameworks που ο προγραμματιστής προσθέτει χειροκίνητα στο Xcode. Το CocoaPods, αντίθετα, αυτοματοποιεί ολόκληρη τη διαδικασία μέσω Podfile.
Carthage εγκαθίσταται μέσω Homebrew: brew install carthage. Εναλλακτικά — κατεβάστε το Carthage.pkg από το GitHub Releases ή δημιουργήστε από πηγαίο κώδικα. Μετά την εγκατάσταση ελέγξτε την έκδοση: carthage version. Το Carthage απαιτεί Xcode με Command Line Tools. Σε Apple Silicon Mac μπορεί επίσης να χρειαστεί Rosetta 2.
Cartfile — το αρχείο διαμόρφωσης που γράφει ο προγραμματιστής: περιέχει ονόματα βιβλιοθηκών και τελεστές εκδόσεων (~> 5.9, == 8.0.0, όνομα branch). Cartfile.resolved δημιουργείται αυτόματα στο carthage update και καθορίζει ακριβείς εκδόσεις όλων των εγκατεστημένων εξαρτήσεων. Το Cartfile.resolved πρέπει να διατηρείται στο Git — εγγυάται αναπαραγωγιμότητα δημιουργίας σε όλα τα μηχανήματα.
Carthage απαιτεί η βιβλιοθήκη να περιέχει ένα σωστό έργο Xcode ή workspace με στόχο framework. Ελέγξτε ότι το αποθετήριο είναι προσβάσιμο (όχι ιδιωτικό χωρίς κλειδί), έχει καθοριστεί σωστή έκδοση (το tag ή commit υπάρχει), και η βιβλιοθήκη υποστηρίζει την έκδοση Xcode σας. Χρησιμοποιήστε carthage build --verbose για λεπτομερή διάγνωση. Αν η βιβλιοθήκη δεν έχει στόχο framework, το Carthage δεν θα μπορέσει να τη δημιουργήσει.
Carthage παραμένει σχετικό για έργα όπου απαιτείται αποκεντρωμένη διαχείριση εξαρτήσεων, πλήρης έλεγχος ενσωμάτωσης και ελάχιστη παρέμβαση στο έργο Xcode. Ωστόσο, τα περισσότερα νέα έργα επιλέγουν Swift Package Manager (SPM) — είναι ενσωματωμένο στο Xcode, δεν απαιτεί πρόσθετη εγκατάσταση και αναπτύσσεται ενεργά από την Apple. Το Carthage συνιστάται για παλαιότερα έργα όπου υπάρχει ήδη γραμμή παραγωγής δημιουργίας, ή για βιβλιοθήκες των οποίων οι συγγραφείς θέλουν να δώσουν στους χρήστες ελευθερία επιλογής μεθόδου ενσωμάτωσης.
Σύνοψη
brew install carthage, και δημιουργία εξαρτήσεων μέσω carthage bootstrap ή carthage update--no-use-binaries και διαμόρφωση προσωρινής αποθήκευσης CIΘα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης