Carthage Cocoa प्रोजेक्ट्स (iOS, macOS, watchOS, tvOS) के लिए एक विकेंद्रीकृत डिपेंडेंसी मैनेजर है जो सोर्स कोड से बाइनरी फ्रेमवर्क बनाता है। CocoaPods के विपरीत, Carthage प्रोजेक्ट को स्वचालित रूप से संशोधित नहीं करता — डेवलपर मैन्युअल रूप से बने फ्रेमवर्क को Xcode में जोड़ता है। Carthage Swift में लिखा गया है, डिपेंडेंसी का वर्णन करने के लिए Cartfile का उपयोग करता है और समानांतर बिल्ड का समर्थन करता है। GitHub रिपॉजिटरी के अनुसार, Carthage ने 15,000 से अधिक स्टार जमा किए हैं और उन प्रोजेक्ट्स के लिए एक आला लेकिन मांग वाला टूल बना हुआ है जहाँ Xcode कॉन्फ़िगरेशन में न्यूनतम हस्तक्षेप की आवश्यकता होती है।
मुख्य बातें
carthage bootstrap या carthage update से की जाती है — Carthage रिपॉजिटरी क्लोन करता है और उन्हें .xcframework में कंपाइल करता हैCarthage एक विकेंद्रीकृत आर्किटेक्चर वाला डिपेंडेंसी मैनेजर है, जिसे 2014 में Swift समुदाय के डेवलपर्स द्वारा बनाया गया। Carthage केंद्रीय स्पेसिफिकेशन रजिस्ट्री का उपयोग नहीं करता — प्रत्येक लाइब्रेरी URL या GitHub नाम के माध्यम से सीधे Git रिपॉजिटरी से जुड़ती है। Carthage सोर्स कोड डाउनलोड करता है, इसे बाइनरी फ्रेमवर्क (.xcframework या .framework) में बनाता है, और डेवलपर को Xcode प्रोजेक्ट में मैन्युअल एकीकरण के लिए तैयार आर्टिफैक्ट प्रदान करता है।
Carthage की आर्किटेक्चर में तीन घटक शामिल हैं: CLI टूल carthage, कॉन्फ़िगरेशन फ़ाइल Cartfile, और बने फ्रेमवर्क वाली निर्देशिका Carthage/Build/। Carthage और CocoaPods के बीच मुख्य अंतर .xcodeproj के स्वचालित संशोधन का अभाव है। Carthage .xcworkspace नहीं बनाता, कंपाइलर फ्लैग कॉन्फ़िगर नहीं करता, और Pods.xcconfig जनरेट नहीं करता। डेवलपर Xcode के माध्यम से प्रोजेक्ट में मैन्युअल रूप से फ्रेमवर्क जोड़ता है, जो एकीकरण प्रक्रिया पर पूर्ण नियंत्रण देता है।
Carthage समानांतर डिपेंडेंसी बिल्ड का उपयोग करता है, जो मल्टी-कोर प्रोसेसर पर प्रक्रिया को काफी तेज करता है। प्रत्येक डिपेंडेंसी एक अलग टार्गेट के रूप में बनती है, और Carthage स्वचालित रूप से ट्रांज़िटिव डिपेंडेंसी के ग्राफ को हल करता है, उन्हें सही क्रम में बनाता है। समुदाय के बेंचमार्क के अनुसार, Carthage आधुनिक Mac पर औसतन 30–60 सेकंड में 15–20 डिपेंडेंसी बनाता है, जो कई लाइब्रेरी वाले प्रोजेक्ट्स के लिए CocoaPods से तेज है। Carthage सभी Apple प्लेटफॉर्म का समर्थन करता है: iOS, macOS, watchOS और tvOS, और संस्करण 0.38+ से — सिम्युलेटर और Apple Silicon डिवाइस समर्थन के लिए यूनिवर्सल .xcframework बिल्ड करता है।
Carthage प्रत्येक डिपेंडेंसी के Git रिपॉजिटरी को क्लोन करता है, निर्दिष्ट वर्जन (टैग, कमिट या ब्रांच) पर स्विच करता है, और फ्रेमवर्क बनाने के लिए xcodebuild चलाता है। Carthage स्वचालित रूप से बिल्ड स्कीम द्वारा Xcode प्रोजेक्ट प्रकार (फ्रेमवर्क, डायनामिक फ्रेमवर्क, स्टैटिक लाइब्रेरी) निर्धारित करता है। यदि किसी प्रोजेक्ट में कई स्कीम हैं, Carthage डिफ़ॉल्ट स्कीम (वर्णमाला क्रम में पहली) का उपयोग करता है। बिल्ड के बाद, Carthage तैयार फ्रेमवर्क को Carthage/Build/ में कॉपी करता है और सटीक वर्जन लॉकिंग के साथ Cartfile.resolved फ़ाइल बनाता है। Carthage बने फ्रेमवर्क की कैशिंग का समर्थन करता है — डिपेंडेंसी में बिना बदलाव के पुनर्निर्माण छोड़ दिया जाता है।
Carthage में ट्रांज़िटिव डिपेंडेंसी Cartfile.resolved के माध्यम से संभाली जाती है: Carthage सभी आवश्यक डिपेंडेंसी का ग्राफ बनाता है और उन्हें सही क्रम में बनाता है। यदि दो लाइब्रेरी एक ही तृतीय-पक्ष लाइब्रेरी पर निर्भर करती हैं, Carthage इसे एक बार बनाता है और दोनों के लिए उपयोग करता है। Carthage विशिष्ट टार्गेट और कारण बताते हुए बिल्ड त्रुटियों की रिपोर्ट करता है — यह समस्या निदान को सरल बनाता है।
Cartfile Ruby-जैसे सिंटैक्स (Cartfile प्रारूप) वाली एक कॉन्फ़िगरेशन फ़ाइल है जो Carthage प्रोजेक्ट की डिपेंडेंसी को परिभाषित करती है। Cartfile प्रोजेक्ट रूट में .xcodeproj के बगल में स्थित होता है। Cartfile की प्रत्येक पंक्ति एक डिपेंडेंसी का वर्णन करती है: स्रोत (Git URL, GitHub रिपॉजिटरी) और वर्जन। सिंटैक्स टैग, कमिट और ब्रांच के माध्यम से वर्जन पिनिंग का समर्थन करता है।
# मूल निर्भरताएं Carthage
github "Alamofire/Alamofire" ~> 5.9
github "SnapKit/SnapKit" ~> 5.7
github "onevcat/Kingfisher" == 8.0.0github "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 (न्यूनतम वर्जन)। विशिष्ट कमिट को github "owner/repo" "abc1234" के माध्यम से पिन किया जा सकता है।
Carthage विभिन्न कॉन्फ़िगरेशन के लिए कई निर्देशिकाओं का समर्थन करता है: Cartfile (मुख्य), Cartfile.private (आंतरिक डिपेंडेंसी के लिए जो प्रकाशित नहीं होती), और Cartfile.resolved (स्वचालित रूप से जनरेट)। प्राइवेट डिपेंडेंसी उन लाइब्रेरी के लिए उपयोगी हैं जो केवल डेवलपमेंट बिल्ड में उपयोग की जाती हैं, जैसे टेस्ट फ्रेमवर्क।
# 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 जनरेट करता है। दूसरा पूर्ण URL वाली किसी भी सार्वजनिक या निजी Git रिपॉजिटरी के लिए है। एक वर्जन को टैग (== 2.1.1), सिमैंटिक रेंज (~> 5.9), ब्रांच नाम ("development"), या कमिट हैश ("a1b2c3d") के रूप में निर्दिष्ट किया जा सकता है। SemVer का पालन करने वाली डिपेंडेंसी के लिए सिमैंटिक रेंज (~>) अनुशंसित है — यह अपडेट के दौरान ब्रेकिंग चेंजेज से बचाता है।
Cartfile.resolved carthage update के बाद स्वचालित रूप से जनरेट होता है। यह सभी स्थापित डिपेंडेंसी, ट्रांज़िटिव सहित, के सटीक वर्जन को लॉक करता है। इस फ़ाइल को Git में रखना चाहिए — इसके बिना, किसी अन्य मशीन पर carthage bootstrap कमांड समान नियमों से लाइब्रेरी बनाएगा, लेकिन वर्जन भिन्न हो सकते हैं। carthage outdated उन पुरानी डिपेंडेंसी की सूची दिखाता है जिनके लिए नए वर्जन उपलब्ध हैं।
Carthage Homebrew के माध्यम से स्थापित होता है — macOS के लिए मानक पैकेज मैनेजर। वैकल्पिक तरीके: GitHub से तैयार .pkg इंस्टॉलर से स्थापना या स्रोत से बिल्ड करना। Carthage को Xcode with 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 रिपॉजिटरी क्लोन करता है, फ्रेमवर्क बनाता है और उन्हें 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 कॉन्फ़िगरेशन का पूर्ण नियंत्रण डेवलपर पर छोड़ता है। इसका मतलब है कि डिपेंडेंसी स्थापित करने के बाद, आपको मैन्युअल रूप से फ्रेमवर्क को Xcode में जोड़ना होगा (देखें «Xcode में Carthage फ्रेमवर्क का एकीकरण» अनुभाग)। Carthage को यह भी आवश्यक है कि प्रत्येक डिपेंडेंसी में फ्रेमवर्क टार्गेट के साथ Xcode प्रोजेक्ट या workspace हो — अन्यथा बिल्ड विफल हो जाएगा।
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 को लीगेसी .framework के बजाय यूनिवर्सल .xcframework बनाने का निर्देश देता है। यह सिम्युलेटर और वास्तविक डिवाइस दोनों के लिए समर्थन सुनिश्चित करता है, साथ ही बिना अतिरिक्त स्क्रिप्ट के Apple Silicon Mac के लिए भी। फ्लैग --platform iOS बिल्ड को एक iOS प्लेटफॉर्म तक सीमित करता है — यह प्रक्रिया को काफी तेज करता है, खासकर यदि प्रोजेक्ट में क्रॉस-प्लेटफॉर्म लाइब्रेरी शामिल हैं।
Carthage फ्लैग --cache-builds के माध्यम से समानांतर बिल्डिंग का समर्थन करता है, जो पहले से बने फ्रेमवर्क को कैश करता है। पुनर्निर्माण पर, Carthage Git कमिट हैश की जाँच करता है और यदि कोड नहीं बदला है, तो कंपाइलेशन छोड़ देता है। CI सर्वर के लिए, Carthage/Build/ निर्देशिका और ~/Library/Caches/carthage/ को कैश करने की अनुशंसा की जाती है। Carthage विस्तृत लॉगिंग के लिए --verbose और स्रोत से强制 बिल्ड के लिए --no-use-binaries (यदि डेवलपर प्री-बिल्ट बाइनरी पर भरोसा नहीं करता) का भी समर्थन करता है।
| कमांड | कार्य |
|---|---|
carthage update | Cartfile.resolved अपडेट करता है और सभी फ्रेमवर्क बनाता है |
carthage bootstrap | बिना अपडेट किए मौजूदा Cartfile.resolved से फ्रेमवर्क बनाता है |
carthage build | वर्जन लॉक किए बिना निर्दिष्ट डिपेंडेंसी बनाता है |
carthage outdated | उपलब्ध अपडेट वाली डिपेंडेंसी की सूची दिखाता है |
carthage checkout | बिना बिल्ड किए केवल रिपॉजिटरी क्लोन करता है |
एकीकरण Carthage फ्रेमवर्क का Xcode में चार चरणों में मैन्युअल रूप से किया जाता है। carthage update या bootstrap चलाने के बाद, सभी बने फ्रेमवर्क Carthage/Build/iOS/ (या संबंधित प्लेटफॉर्म) में स्थित होते हैं। डेवलपर Xcode प्रोजेक्ट खोलता है, ऐप टार्गेट चुनता है और फ्रेमवर्क को General → Frameworks, Libraries, and Embedded Content में जोड़ता है। रनटाइम फ्रेमवर्क (डायनामिक लाइब्रेरी) के लिए, «Embed & Sign» चुनना आवश्यक है — अन्यथा ऐप लॉन्च पर «dyld: Library not loaded» त्रुटि के साथ क्रैश हो जाएगा।
Carthage स्टैटिक लाइब्रेरी के लिए सरल है — उन्हें embed चरण की आवश्यकता नहीं है क्योंकि वे सीधे ऐप की निष्पादन योग्य फ़ाइल में लिंक होती हैं। हालाँकि, Carthage डिफ़ॉल्ट रूप से डायनामिक फ्रेमवर्क बनाता है (स्पष्ट रूप से कॉन्फ़िगर की गई स्टैटिक लाइब्रेरी को छोड़कर)। उन प्रोजेक्ट्स के लिए जहाँ ऐप का आकार कम करना महत्वपूर्ण है, Xcode सेटिंग्स के माध्यम से स्टैटिक लिंकिंग की अनुशंसा की जाती है।
एक अतिरिक्त चरण Build Phase → Run Script में Input Files जोड़ना है। Carthage को बने फ्रेमवर्क से सिम्युलेटर आर्टिफैक्ट हटाने के लिए स्क्रिप्ट की आवश्यकता है (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 का उपयोग करने की आवश्यकता नहीं है — सभी डिपेंडेंसी पहले से बाइनरी फ्रेमवर्क में बनी हैं। Carthage सीधे .xcodeproj के साथ काम करता है, CocoaPods के विपरीत, जो workspace बनाता है। यह वर्जन कंट्रोल और CI सेटअप को सरल बनाता है क्योंकि Carthage डिपेंडेंसी Xcode प्रोजेक्ट कॉन्फ़िगरेशन नहीं बदलती। एकमात्र परिवर्तन टार्गेट में फ्रेमवर्क जोड़ना है, जो .pbxproj में दर्ज होता है।
| चरण | कार्य |
|---|---|
| 1 | carthage update --use-xcframeworks चलाएँ |
| 2 | फ्रेमवर्क को Carthage/Build/ से General → Frameworks में खींचें |
| 3 | डायनामिक फ्रेमवर्क के लिए Embed & Sign सेट करें |
| 4 | सिम्युलेटर आर्किटेक्चर हटाने के लिए Run Script Phase जोड़ें |
| 5 | प्रोजेक्ट बनाएँ — फ्रेमवर्क स्वचालित रूप से लिंक होने चाहिए |
Carthage, CocoaPods और Swift Package Manager (SPM) iOS डेवलपमेंट में तीन मुख्य डिपेंडेंसी मैनेजर हैं। Carthage अपने विकेंद्रीकृत दृष्टिकोण के लिए जाना जाता है, CocoaPods एक केंद्रीकृत रजिस्ट्री प्रदान करता है, और SPM Apple का बिल्ट-इन समाधान है। उनके बीच चुनाव प्रोजेक्ट की आवश्यकताओं, टीम के आकार और वांछित ऑटोमेशन स्तर पर निर्भर करता है।
| मापदंड | Carthage | CocoaPods | SPM |
|---|---|---|---|
| आर्किटेक्चर | विकेंद्रीकृत | केंद्रीकृत रजिस्ट्री | Xcode में एकीकृत |
| कॉन्फ़िगरेशन भाषा | Cartfile (Ruby-जैसा) | Podfile (Ruby DSL) | Package.swift (Swift) |
| Xcode एकीकरण | मैन्युअल (ड्रैग और ड्रॉप) | workspace के माध्यम से | बिल्ट-इन |
| ट्रांज़िटिव डिपेंडेंसी | स्वचालित | स्वचालित | स्वचालित |
| लाइब्रेरी रजिस्ट्री | कोई नहीं (Git रिपॉजिटरी) | Specs में 100,000+ | ~65,000 |
| संसाधन समर्थन | नहीं | हाँ (resource bundles) | हाँ (Resources) |
| बिल्ड गति | तेज़ (समानांतर) | औसत | तेज़ |
| एकीकरण नियंत्रण | पूर्ण | स्वचालित | स्वचालित |
Carthage उन प्रोजेक्ट्स के लिए चुना जाता है जहाँ Xcode कॉन्फ़िगरेशन में न्यूनतम हस्तक्षेप और एकीकरण प्रक्रिया पर पूर्ण नियंत्रण की आवश्यकता होती है। Carthage ओपन-सोर्स लाइब्रेरी और फ्रेमवर्क के लिए आदर्श है जहाँ लेखक उपयोगकर्ताओं को स्वतंत्र रूप से डिपेंडेंसी बनाने देना चाहता है। Carthage उन डेवलपर्स के बीच भी लोकप्रिय है जो UNIX दर्शन को महत्व देते हैं: प्रत्येक उपकरण एक काम अच्छी तरह करता है। CocoaPods एंटरप्राइज़ प्रोजेक्ट्स के लिए मानक बना हुआ है जहाँ दर्जनों डिपेंडेंसी होती हैं और ऑटोमेशन महत्वपूर्ण है। SPM नए प्रोजेक्ट्स के लिए विकल्प है क्योंकि यह Xcode में बिल्ट-इन है और Apple द्वारा सक्रिय रूप से विकसित किया जाता है।
माइग्रेशन मैनेजरों के बीच विभिन्न दृष्टिकोणों की आवश्यकता है। Carthage → SPM: फ्रेमवर्क को Xcode से हटाएँ, Cartfile हटाएँ, और File → Add Package Dependencies के माध्यम से Package Dependencies जोड़ें। Carthage → CocoaPods: Carthage फ्रेमवर्क हटाएँ, Podfile बनाएँ, डिपेंडेंसी जोड़ें और pod init && pod install चलाएँ। Carthage से CocoaPods या SPM में माइग्रेट करते समय, मैन्युअल रूप से फ्रेमवर्क अपडेट करने की आवश्यकता समाप्त हो जाती है — सभी डिपेंडेंसी एक कमांड से अपडेट होती हैं। Carthage उन प्रोजेक्ट्स के लिए प्रासंगिक बना हुआ है जहाँ वेंडर लॉक-इन से बचना और डिपेंडेंसी बिल्ड की पारदर्शिता बनाए रखना महत्वपूर्ण है।
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» — Carthage बिल्ड सफल होने के बावजूद फ्रेमवर्क Xcode में नहीं मिलता। समाधान: General → Frameworks, Libraries, and Embedded Content में फ्रेमवर्क पथ की जाँच करें। फ्रेमवर्क Carthage/Build/iOS/ में होना चाहिए। सुनिश्चित करें कि .xcframework सही ढंग से जोड़ा गया है (इसे फिर से खींचें)। डायनामिक फ्रेमवर्क के लिए Embed & Sign जाँचें। यदि त्रुटि बनी रहती है, Build Settings में FRAMEWORK_SEARCH_PATHS जोड़ें।
Swift असंगति के कारण बिल्ड त्रुटि — लाइब्रेरी प्रोजेक्ट से भिन्न Swift वर्जन के लिए बनी है। समाधान: उसी Swift वर्जन के साथ स्रोत से बिल्ड करने के लिए carthage update --no-use-binaries का उपयोग करें। यदि लाइब्रेरी वर्तमान वर्जन के तहत कंपाइल नहीं होती, Swift वर्जन निर्दिष्ट करने के लिए .xcconfig का उपयोग करें या लाइब्रेरी को फोर्क करें। Carthage 0.39 से, --use-xcframeworks स्वचालित रूप से बाइनरी में सही Swift वर्जन शामिल करता है।
CI बिल्ड समस्याएँ — CI पर Carthage को उचित कैश कॉन्फ़िगरेशन की आवश्यकता है। समाधान: Carthage/Build/ और ~/Library/Caches/carthage/ कैश करें। वर्जन बदलने से बचने के लिए CI पर update के बजाय carthage bootstrap --use-xcframeworks --platform iOS का उपयोग करें। GitHub Actions के लिए आधिकारिक Carthage एक्शन उपलब्ध है। Jenkins के लिए — CarthageBuild प्लगइन। GUI के बिना macOS पर Carthage क्रैश हो सकता है — समाधान: brew install xcode-build-server स्थापित करें या -UseModernBuildSystem=NO फ्लैग जोड़ें।
| समस्या | कारण | समाधान |
|---|---|---|
| File manager error | दूषित कैश | ~/Library/Caches/carthage/ साफ़ करें |
| No such module | फ्रेमवर्क Xcode में नहीं जोड़ा गया | टार्गेट में Frameworks जाँचें |
| Swift असंगति | भिन्न Swift वर्जन | --no-use-binaries या नया Carthage वर्जन |
| CI त्रुटि | कैश या GUI की कमी | Carthage/Build/ कैश कॉन्फ़िगर करें |
| लाइब्रेरी नहीं बनती | लाइब्रेरी के लिए Xcode प्रोजेक्ट नहीं | रिपॉजिटरी संरचना जाँचें |
अक्सर पूछे जाने वाले प्रश्न
Carthage Apple प्लेटफॉर्म के लिए एक विकेंद्रीकृत डिपेंडेंसी मैनेजर है। CocoaPods के विपरीत, Carthage केंद्रीय लाइब्रेरी रजिस्ट्री का उपयोग नहीं करता, Xcode प्रोजेक्ट को स्वचालित रूप से संशोधित नहीं करता और .xcworkspace नहीं बनाता। Carthage डिपेंडेंसी को बाइनरी फ्रेमवर्क में बनाता है जिसे डेवलपर मैन्युअल रूप से Xcode में जोड़ता है। CocoaPods, इसके विपरीत, Podfile के माध्यम से पूरी प्रक्रिया को ऑटोमेट करता है।
Carthage Homebrew के माध्यम से स्थापित होता है: brew install carthage। वैकल्पिक रूप से — GitHub Releases से Carthage.pkg डाउनलोड करें या स्रोत से बनाएँ। स्थापना के बाद, वर्जन जाँचें: carthage version। Carthage को Xcode with Command Line Tools की आवश्यकता है। Apple Silicon Mac पर, अतिरिक्त रूप से Rosetta 2 की आवश्यकता हो सकती है।
Cartfile एक कॉन्फ़िगरेशन फ़ाइल है जो डेवलपर लिखता है: इसमें लाइब्रेरी नाम और वर्जन ऑपरेटर (~> 5.9, == 8.0.0, ब्रांच नाम) होते हैं। Cartfile.resolved carthage update के दौरान स्वचालित रूप से जनरेट होता है और सभी स्थापित डिपेंडेंसी के सटीक वर्जन को लॉक करता है। Cartfile.resolved को Git में रखना चाहिए — यह सभी मशीनों पर बिल्ड पुनरुत्पादन सुनिश्चित करता है।
Carthage को आवश्यकता है कि लाइब्रेरी में फ्रेमवर्क टार्गेट के साथ एक मान्य Xcode प्रोजेक्ट या workspace हो। जाँचें कि रिपॉजिटरी सुलभ है (बिना कुंजी के निजी नहीं), सही वर्जन निर्दिष्ट है (टैग या कमिट मौजूद है), और लाइब्रेरी आपके Xcode वर्जन का समर्थन करती है। विस्तृत निदान के लिए carthage build --verbose का उपयोग करें। यदि लाइब्रेरी में फ्रेमवर्क टार्गेट नहीं है, Carthage इसे नहीं बना सकता।
Carthage उन प्रोजेक्ट्स के लिए प्रासंगिक बना हुआ है जहाँ विकेंद्रीकृत डिपेंडेंसी प्रबंधन, एकीकरण पर पूर्ण नियंत्रण और Xcode प्रोजेक्ट में न्यूनतम हस्तक्षेप की आवश्यकता होती है। हालाँकि, अधिकांश नए प्रोजेक्ट Swift Package Manager (SPM) चुनते हैं — यह Xcode में बिल्ट-इन है, अतिरिक्त स्थापना की आवश्यकता नहीं है, और Apple द्वारा सक्रिय रूप से विकसित किया जाता है। Carthage लीगेसी प्रोजेक्ट्स के लिए अनुशंसित है जहाँ बिल्ड पाइपलाइन पहले से स्थापित है, या उन लाइब्रेरी के लिए जिनके लेखक उपयोगकर्ताओं को एकीकरण विधि चुनने की स्वतंत्रता देना चाहते हैं।
सारांश
brew install carthage के माध्यम से की जाती है, और डिपेंडेंसी बिल्ड carthage bootstrap या carthage update के माध्यम से--no-use-binaries फ्लैग और CI कैश कॉन्फ़िगरेशन से हल होती हैंहम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।