Carthage: τι είναι, αποκεντρωμένος διαχειριστής εξαρτήσεων

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-02-12 Χρόνος ανάγνωσης: 8 λεπ

Carthage — ένας αποκεντρωμένος διαχειριστής εξαρτήσεων για έργα Cocoa (iOS, macOS, watchOS, tvOS), που δημιουργεί δυαδικά frameworks από πηγαίο κώδικα. Σε αντίθεση με το CocoaPods, το Carthage δεν τροποποιεί αυτόματα το έργο — ο προγραμματιστής προσθέτει μόνος του τα κατασκευασμένα frameworks στο Xcode. Το Carthage είναι γραμμένο σε Swift, χρησιμοποιεί Cartfile για την περιγραφή εξαρτήσεων και υποστηρίζει παράλληλη δημιουργία. Σύμφωνα με τα δεδομένα του αποθετηρίου GitHub, το Carthage έχει συγκεντρώσει πάνω από 15.000 αστέρια και παραμένει ένα εξειδικευμένο αλλά περιζήτητο εργαλείο για έργα που απαιτούν ελάχιστη παρέμβαση στη διαμόρφωση του Xcode.

Κύρια σημεία

  • Carthage — αποκεντρωμένος διαχειριστής εξαρτήσεων: χωρίς κεντρικό μητρώο, οι βιβλιοθήκες συνδέονται απευθείας από αποθετήρια Git
  • Cartfile — αρχείο διαμόρφωσης στο οποίο αναφέρονται οι εξαρτήσεις, οι εκδόσεις και οι πηγές τους (Git, GitHub, GitLab)
  • Δημιουργία frameworks εκτελείται με την εντολή carthage bootstrap ή carthage update — το Carthage κλωνοποιεί τα αποθετήρια και τα μεταγλωττίζει σε .xcframework
  • Ενσωμάτωση με Xcode — χειροκίνητη: ο προγραμματιστής προσθέτει τα κατασκευασμένα frameworks στο General → Frameworks, Libraries, and Embedded Content
  • Cartfile.resolved καθορίζει ακριβείς εκδόσεις εξαρτήσεων, εξασφαλίζοντας αναπαραγωγιμότητα δημιουργίας παρόμοια με το Podfile.lock
  • Carthage vs CocoaPods vs SPM: Το Carthage δίνει μέγιστο έλεγχο αλλά απαιτεί περισσότερη χειροκίνητη εργασία· το CocoaPods αυτοματοποιεί τα πάντα· το SPM είναι ενσωματωμένο στο Xcode

Τι είναι το Carthage;

Carthage — ένας διαχειριστής εξαρτήσεων με αποκεντρωμένη αρχιτεκτονική, που δημιουργήθηκε το 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

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: δομή, σύνταξη και παραδείγματα

Cartfile — αρχείο διαμόρφωσης στη γλώσσα Ruby (μορφή Cartfile) που ορίζει τις εξαρτήσεις του έργου Carthage. Το Cartfile βρίσκεται στη ρίζα του έργου δίπλα στο .xcodeproj. Κάθε γραμμή του Cartfile περιγράφει μία εξάρτηση: πηγή (URL Git, αποθετήριο GitHub) και έκδοση. Η σύνταξη υποστηρίζει καθορισμό εκδόσεων μέσω tags, commits και branches.

ruby
# Βασικές εξαρτήσεις 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".

Πλήρες παράδειγμα Cartfile

Carthage υποστηρίζει πολλαπλούς καταλόγους για διαφορετικές διαμορφώσεις: Cartfile(κύριο), Cartfile.private (για εσωτερικές εξαρτήσεις που δεν δημοσιεύονται) και Cartfile.resolved(δημιουργείται αυτόματα). Οι ιδιωτικές εξαρτήσεις είναι χρήσιμες για βιβλιοθήκες που χρησιμοποιούνται μόνο σε κατασκευή Development, όπως δοκιμαστικά frameworks.

ruby
# 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

Carthage εγκαθίσταται μέσω Homebrew — του τυπικού διαχειριστή πακέτων για macOS. Εναλλακτικές μέθοδοι: εγκατάσταση από το έτοιμο πρόγραμμα εγκατάστασης .pkg από το GitHub ή δημιουργία από πηγαίο κώδικα. Το Carthage απαιτεί Xcode με Command Line Tools (συμπεριλαμβανομένου xcodebuild), και σε Apple Silicon Mac — Rosetta 2 για ορισμένες παλαιότερες εξαρτήσεις.

bash
# Εγκατάσταση 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.

bash
# Ενημέρωση 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 — διαφορετικά η δημιουργία θα αποτύχει.

Δημιουργία frameworks: bootstrap και update

Carthage προσφέρει τρεις κύριες εντολές για εργασία με εξαρτήσεις: bootstrap, update και build. Το carthage bootstrap δημιουργεί εξαρτήσεις από υπάρχον Cartfile.resolved — συνιστάται για περιβάλλοντα CI και προγραμματιστές που εντάσσονται στο έργο. Το carthage update ενημερώνει το Cartfile.resolved στις τελευταίες εκδόσεις (λαμβάνοντας υπόψη περιορισμούς Cartfile) και εκτελεί τη δημιουργία. Το carthage build δημιουργεί όλες τις καθορισμένες εξαρτήσεις χωρίς αποθήκευση εκδόσεων.

bash
# Αρχική εγκατάσταση (ενημερώνει εκδόσεις)
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 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:

bash
# 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"
done

Carthage δεν απαιτεί χρήση .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 vs CocoaPods vs Swift Package Manager

Carthage, CocoaPods και Swift Package Manager (SPM) — οι τρεις κύριοι διαχειριστές εξαρτήσεων στην ανάπτυξη iOS. Το Carthage ξεχωρίζει με αποκεντρωμένη προσέγγιση, το CocoaPods προσφέρει κεντρικό μητρώο, το SPM — ενσωματωμένη λύση από την Apple. Η επιλογή μεταξύ τους εξαρτάται από τις απαιτήσεις του έργου, το μέγεθος της ομάδας και το απαιτούμενο επίπεδο αυτοματισμού.

ΚριτήριοCarthageCocoaPodsSPM
ΑρχιτεκτονικήΑποκεντρωμένηΚεντρικό μητρώοΕνσωματωμένο στο 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 moduleFramework δεν προστέθηκε στο XcodeΕλέγξτε τα Frameworks στον στόχο
Ασυμβατότητα SwiftΔιαφορετικές εκδόσεις Swift--no-use-binaries ή νέα έκδοση Carthage
Σφάλμα στο CIΈλλειψη προσωρινής μνήμης ή GUIΔιαμορφώστε προσωρινή μνήμη Carthage/Build/
Η βιβλιοθήκη δεν δημιουργείταιΔεν υπάρχει έργο Xcode στη βιβλιοθήκηΕλέγξτε τη δομή του αποθετηρίου

Συχνές ερωτήσεις

Τι είναι το Carthage και σε τι διαφέρει από το CocoaPods;

Carthage — ένας αποκεντρωμένος διαχειριστής εξαρτήσεων για πλατφόρμες Apple. Σε αντίθεση με το CocoaPods, το Carthage δεν χρησιμοποιεί κεντρικό μητρώο βιβλιοθηκών, δεν τροποποιεί αυτόματα το έργο Xcode και δεν δημιουργεί .xcworkspace. Το Carthage μετατρέπει τις εξαρτήσεις σε δυαδικά frameworks που ο προγραμματιστής προσθέτει χειροκίνητα στο Xcode. Το CocoaPods, αντίθετα, αυτοματοποιεί ολόκληρη τη διαδικασία μέσω Podfile.

Πώς να εγκαταστήσω το Carthage σε macOS;

Carthage εγκαθίσταται μέσω Homebrew: brew install carthage. Εναλλακτικά — κατεβάστε το Carthage.pkg από το GitHub Releases ή δημιουργήστε από πηγαίο κώδικα. Μετά την εγκατάσταση ελέγξτε την έκδοση: carthage version. Το Carthage απαιτεί Xcode με Command Line Tools. Σε Apple Silicon Mac μπορεί επίσης να χρειαστεί Rosetta 2.

Σε τι διαφέρει το Cartfile από το Cartfile.resolved;

Cartfile — το αρχείο διαμόρφωσης που γράφει ο προγραμματιστής: περιέχει ονόματα βιβλιοθηκών και τελεστές εκδόσεων (~> 5.9, == 8.0.0, όνομα branch). Cartfile.resolved δημιουργείται αυτόματα στο carthage update και καθορίζει ακριβείς εκδόσεις όλων των εγκατεστημένων εξαρτήσεων. Το Cartfile.resolved πρέπει να διατηρείται στο Git — εγγυάται αναπαραγωγιμότητα δημιουργίας σε όλα τα μηχανήματα.

Γιατί το Carthage δεν δημιουργεί τη βιβλιοθήκη από το Cartfile μου;

Carthage απαιτεί η βιβλιοθήκη να περιέχει ένα σωστό έργο Xcode ή workspace με στόχο framework. Ελέγξτε ότι το αποθετήριο είναι προσβάσιμο (όχι ιδιωτικό χωρίς κλειδί), έχει καθοριστεί σωστή έκδοση (το tag ή commit υπάρχει), και η βιβλιοθήκη υποστηρίζει την έκδοση Xcode σας. Χρησιμοποιήστε carthage build --verbose για λεπτομερή διάγνωση. Αν η βιβλιοθήκη δεν έχει στόχο framework, το Carthage δεν θα μπορέσει να τη δημιουργήσει.

Αξίζει να χρησιμοποιείτε Carthage το 2025–2026;

Carthage παραμένει σχετικό για έργα όπου απαιτείται αποκεντρωμένη διαχείριση εξαρτήσεων, πλήρης έλεγχος ενσωμάτωσης και ελάχιστη παρέμβαση στο έργο Xcode. Ωστόσο, τα περισσότερα νέα έργα επιλέγουν Swift Package Manager (SPM) — είναι ενσωματωμένο στο Xcode, δεν απαιτεί πρόσθετη εγκατάσταση και αναπτύσσεται ενεργά από την Apple. Το Carthage συνιστάται για παλαιότερα έργα όπου υπάρχει ήδη γραμμή παραγωγής δημιουργίας, ή για βιβλιοθήκες των οποίων οι συγγραφείς θέλουν να δώσουν στους χρήστες ελευθερία επιλογής μεθόδου ενσωμάτωσης.

Σύνοψη

  • Carthage — αποκεντρωμένος διαχειριστής εξαρτήσεων για iOS, macOS, watchOS και tvOS που δημιουργεί frameworks από πηγαίο κώδικα αποθετηρίων Git
  • Cartfile — αρχείο διαμόρφωσης με σύνταξη που υποστηρίζει αποθετήρια GitHub, αυθαίρετα Git-URL και σημασιολογική έκδοση
  • Εγκατάσταση μέσω brew install carthage, και δημιουργία εξαρτήσεων μέσω carthage bootstrap ή carthage update
  • Ενσωμάτωση με Xcode — χειροκίνητη: τα frameworks προστίθενται στο General → Frameworks, Libraries, and Embedded Content με επιλογή Embed & Sign
  • Cartfile.resolved καθορίζει ακριβείς εκδόσεις όλων των εξαρτήσεων, εξασφαλίζοντας αναπαραγωγιμότητα δημιουργίας σε CI και όλα τα μηχανήματα της ομάδας
  • Τυπικά προβλήματα (προσωρινή μνήμη, ασυμβατότητα Swift, σφάλματα CI) επιλύονται με εκκαθάριση προσωρινής μνήμης, σημαία --no-use-binaries και διαμόρφωση προσωρινής αποθήκευσης CI
  • Επιλογή διαχειριστή: Carthage — για πλήρη έλεγχο, CocoaPods — για αυτοματισμό, SPM — για νέα έργα με ενσωματωμένη ενοποίηση

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης