Carthage: یہ کیا ہے، وکندریقرت انحصار مینیجر

مصنف: IT Sectr اشاعت: 2026-02-12 مطالعے کا وقت: 8 منٹ

Carthage Cocoa پروجیکٹس (iOS، macOS، watchOS، tvOS) کے لیے ایک وکندریقرت انحصار مینیجر ہے جو سورس کوڈ سے بائنری فریم ورک بناتا ہے۔ CocoaPods کے برعکس، Carthage خود بخود پروجیکٹ میں تبدیلی نہیں کرتا — ڈیولپر خود بنے ہوئے فریم ورک کو Xcode میں شامل کرتا ہے۔ Carthage Swift میں لکھا گیا ہے، انحصار بیان کرنے کے لیے Cartfile استعمال کرتا ہے اور متوازی تعمیر کو سپورٹ کرتا ہے۔ GitHub ریپوزٹری کے مطابق، Carthage نے 15,000 سے زیادہ ستارے جمع کر لیے ہیں اور ان پروجیکٹس کے لیے ایک خاص لیکن مانگ والا ٹول بنا ہوا ہے جنہیں Xcode کنفیگریشن میں کم سے کم مداخلت کی ضرورت ہوتی ہے۔

اہم نکات

  • Carthage ایک وکندریقرت انحصار مینیجر ہے: کوئی مرکزی رجسٹری نہیں، لائبریریاں براہ راست Git ریپوزٹریوں سے جڑتی ہیں
  • Cartfile ایک کنفیگریشن فائل ہے جو انحصار، ان کے ورژن اور ذرائع (Git، GitHub، GitLab) کی فہرست دیتی ہے
  • فریم ورک کی تعمیر carthage bootstrap یا carthage update سے کی جاتی ہے — Carthage ریپوزٹریاں کلون کرتا ہے اور انہیں .xcframework میں کمپائل کرتا ہے
  • Xcode انضمام دستی ہے: ڈیولپر بنے ہوئے فریم ورک کو General → Frameworks, Libraries, and Embedded Content میں شامل کرتا ہے
  • Cartfile.resolved Podfile.lock کی طرح انحصار کے عین ورژن کو فکس کرتا ہے، تعمیر کی تولیدی صلاحیت کو یقینی بناتا ہے
  • Carthage vs CocoaPods vs SPM: Carthage زیادہ سے زیادہ کنٹرول دیتا ہے لیکن زیادہ دستی کام چاہتا ہے؛ CocoaPods سب کچھ خودکار کرتا ہے؛ SPM Xcode میں بلٹ ان ہے

Carthage کیا ہے؟

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 کیسے کام کرتا ہے

Carthage ہر انحصار کی Git ریپوزٹری کو کلون کرتا ہے، متعین ورژن (ٹیگ، کمٹ یا برانچ) پر سوئچ کرتا ہے اور فریم ورک بنانے کے لیے xcodebuild چلاتا ہے۔ Carthage خود بخود بلڈ اسکیم کے ذریعے Xcode پروجیکٹ کی قسم (فریم ورک، ڈائنامک فریم ورک، سٹیٹک لائبریری) کا تعین کرتا ہے۔ اگر کسی پروجیکٹ میں متعدد اسکیمیں ہیں، Carthage ڈیفالٹ اسکیم (حروف تہجی کی ترتیب میں پہلی) استعمال کرتا ہے۔ تعمیر کے بعد، Carthage تیار فریم ورک کو Carthage/Build/ میں کاپی کرتا ہے اور عین ورژن لاکنگ کے ساتھ Cartfile.resolved فائل بناتا ہے۔ Carthage بنے ہوئے فریم ورک کی کیشنگ کو سپورٹ کرتا ہے — انحصار میں تبدیلی کے بغیر دوبارہ تعمیر چھوڑ دی جاتی ہے۔

Carthage میں عبوری انحصار Cartfile.resolved کے ذریعے ہینڈل کیا جاتا ہے: Carthage تمام ضروری انحصار کا گراف بناتا ہے اور انہیں صحیح ترتیب میں بناتا ہے۔ اگر دو لائبریریاں ایک ہی تیسری پارٹی لائبریری پر منحصر ہیں، Carthage اسے ایک بار بناتا ہے اور دونوں کے لیے استعمال کرتا ہے۔ Carthage مخصوص ہدف اور وجہ بتاتے ہوئے تعمیر کی غلطیوں کی رپورٹ کرتا ہے — یہ مسئلہ کی تشخیص کو آسان بناتا ہے۔

Cartfile: ساخت، ترکیب اور مثالیں

Cartfile Ruby جیسی ترکیب (Cartfile فارمیٹ) والی ایک کنفیگریشن فائل ہے جو Carthage پروجیکٹ کے انحصار کی وضاحت کرتی ہے۔ Cartfile پروجیکٹ روٹ میں .xcodeproj کے ساتھ واقع ہوتی ہے۔ Cartfile کی ہر لائن ایک انحصار بیان کرتی ہے: ماخذ (Git URL، GitHub ریپوزٹری) اور ورژن۔ ترکیب ٹیگ، کمٹ اور برانچ کے ذریعے ورژن پننگ کو سپورٹ کرتی ہے۔

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 (کم از کم ورژن)۔ مخصوص کمٹ github "owner/repo" "abc1234" سے پن کیا جا سکتا ہے۔

مکمل Cartfile مثال

Carthage مختلف کنفیگریشنز کے لیے متعدد ڈائریکٹریوں کو سپورٹ کرتا ہے: Cartfile (مرکزی)، Cartfile.private (داخلی انحصار کے لیے جو شائع نہیں ہوتے) اور Cartfile.resolved (خودکار طور پر جنریٹ)۔ پرائیویٹ انحصار ان لائبریریوں کے لیے مفید ہیں جو صرف ڈویلپمنٹ بلڈ میں استعمال ہوتی ہیں، جیسے ٹیسٹ فریم ورک۔

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 جنریٹ کرتا ہے۔ دوسرا مکمل URL والی کسی بھی عوامی یا نجی Git ریپوزٹری کے لیے ہے۔ ورژن کو ٹیگ (== 2.1.1)، سیمنٹک رینج (~> 5.9)، برانچ نام ("development") یا کمٹ ہیش ("a1b2c3d") کے طور پر متعین کیا جا سکتا ہے۔ سیمنٹک رینجز (~>) ان انحصار کے لیے تجویز کی جاتی ہیں جو SemVer پر عمل کرتے ہیں — یہ اپ ڈیٹ کے دوران بریکنگ تبدیلیوں سے بچاتا ہے۔

Cartfile.resolved carthage update کے بعد خود بخود جنریٹ ہوتا ہے۔ یہ عبوری سمیت تمام نصب شدہ انحصار کے عین ورژن کو لاک کرتا ہے۔ یہ فائل Git میں رکھنی چاہیے — اس کے بغیر، دوسری مشین پر carthage bootstrap کمانڈ اسی قواعد سے لائبریریاں بنائے گی، لیکن ورژن مختلف ہو سکتے ہیں۔ carthage outdated پرانے انحصار کی فہرست دکھاتا ہے جن کے لیے نئے ورژن دستیاب ہیں۔

Carthage کی تنصیب اور ترتیب

Carthage Homebrew — macOS کے لیے معیاری پیکج مینیجر — کے ذریعے نصب ہوتا ہے۔ متبادل طریقے: GitHub سے تیار .pkg انسٹالر سے تنصیب یا سورس سے تعمیر۔ Carthage کو Xcode with 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 ریپوزٹریاں کلون کرتا ہے، فریم ورک بناتا ہے اور انہیں 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 کنفیگریشن کا مکمل کنٹرول ڈیولپر پر چھوڑ دیتا ہے۔ اس کا مطلب ہے کہ انحصار نصب کرنے کے بعد، آپ کو دستی طور پر فریم ورک کو Xcode میں شامل کرنا ہوگا («Xcode میں Carthage فریم ورک کا انضمام» سیکشن دیکھیں)۔ Carthage کو یہ بھی ضرورت ہے کہ ہر انحصار میں فریم ورک ہدف کے ساتھ Xcode پروجیکٹ یا ورک اسپیس ہو — ورنہ تعمیر ناکام ہو جائے گی۔

فریم ورک کی تعمیر: 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 کو لیگیسی .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 updateCartfile.resolved کو اپ ڈیٹ کرتا ہے اور تمام فریم ورک بناتا ہے
carthage bootstrapاپ ڈیٹ کیے بغیر موجودہ Cartfile.resolved سے فریم ورک بناتا ہے
carthage buildورژن لاک کیے بغیر متعین انحصار بناتا ہے
carthage outdatedدستیاب اپ ڈیٹ والے انحصار کی فہرست دکھاتا ہے
carthage checkoutتعمیر کیے بغیر صرف ریپوزٹریاں کلون کرتا ہے

Xcode میں Carthage فریم ورک کا انضمام

انضمام Carthage فریم ورک کا Xcode میں چار مراحل میں دستی طور پر کیا جاتا ہے۔ carthage update یا bootstrap چلانے کے بعد، تمام بنے ہوئے فریم ورک Carthage/Build/iOS/ (یا متعلقہ پلیٹ فارم) میں ہوتے ہیں۔ ڈیولپر Xcode پروجیکٹ کھولتا ہے، ایپ ہدف منتخب کرتا ہے اور فریم ورک کو General → Frameworks, Libraries, and Embedded Content میں شامل کرتا ہے۔ رن ٹائم فریم ورک (ڈائنامک لائبریریوں) کے لیے، «Embed & Sign» منتخب کرنا ضروری ہے — ورنہ ایپ لانچ ہوتے ہی «dyld: Library not loaded» کی غلطی کے ساتھ کریش ہو جائے گی۔

Carthage سٹیٹک لائبریریوں کے لیے آسان ہے — انہیں ایمبیڈ مرحلے کی ضرورت نہیں کیونکہ وہ براہ راست ایپ کی ایکزیکیوٹیبل فائل میں لنک ہوتی ہیں۔ تاہم، Carthage ڈیفالٹ طور پر ڈائنامک فریم ورک بناتا ہے (واضح طور پر کنفیگر کردہ سٹیٹک لائبریریوں کے علاوہ)۔ ان پروجیکٹس کے لیے جہاں ایپ کا سائز کم کرنا اہم ہے، Xcode سیٹنگز کے ذریعے سٹیٹک لنکنگ تجویز کی جاتی ہے۔

ایک اضافی مرحلہ Build Phase → Run Script میں Input Files شامل کرنا ہے۔ Carthage کو بنے ہوئے فریم ورک سے سمیولیٹر آرٹیفیکٹس ہٹانے کے لیے اسکرپٹ کی ضرورت ہے (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 استعمال کرنے کی ضرورت نہیں — تمام انحصار پہلے سے بائنری فریم ورک میں بن چکے ہیں۔ Carthage براہ راست .xcodeproj کے ساتھ کام کرتا ہے، CocoaPods کے برعکس جو ورک اسپیس بناتا ہے۔ یہ ورژن کنٹرول اور CI سیٹ اپ کو آسان بناتا ہے کیونکہ Carthage کے انحصار Xcode پروجیکٹ کنفیگریشن کو تبدیل نہیں کرتے۔ واحد تبدیلی ہدف میں فریم ورک شامل کرنا ہے، جو .pbxproj میں ریکارڈ ہوتی ہے۔

مرحلہعمل
1carthage update --use-xcframeworks چلائیں
2فریم ورک کو Carthage/Build/ سے General → Frameworks میں گھسیٹیں
3ڈائنامک فریم ورک کے لیے Embed & Sign سیٹ کریں
4سمیولیٹر آرکیٹیکچرز ہٹانے کے لیے Run Script Phase شامل کریں
5پروجیکٹ بنائیں — فریم ورک خود بخود لنک ہونے چاہئیں

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 انضمامدستی (گھسیٹیں اور چھوڑیں)ورک اسپیس کے ذریعےبلٹ ان
عبوری انحصارخودکارخودکارخودکار
لائبریری رجسٹریکوئی نہیں (Git ریپوزٹریاں)Specs میں 100,000+~65,000
وسائل کی معاونتنہیںہاں (ریسورس بنڈل)ہاں (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 کیا ہے اور یہ CocoaPods سے کیسے مختلف ہے؟

Carthage Apple پلیٹ فارمز کے لیے ایک وکندریقرت انحصار مینیجر ہے۔ CocoaPods کے برعکس، Carthage مرکزی لائبریری رجسٹری استعمال نہیں کرتا، Xcode پروجیکٹ کو خود بخود تبدیل نہیں کرتا اور .xcworkspace نہیں بناتا۔ Carthage انحصار کو بائنری فریم ورک میں بناتا ہے جسے ڈیولپر دستی طور پر Xcode میں شامل کرتا ہے۔ CocoaPods، اس کے برعکس، Podfile کے ذریعے پورے عمل کو خودکار کرتا ہے۔

macOS پر Carthage کیسے نصب کریں؟

Carthage Homebrew کے ذریعے نصب ہوتا ہے: brew install carthage۔ متبادل — GitHub Releases سے Carthage.pkg ڈاؤن لوڈ کریں یا سورس سے بنائیں۔ تنصیب کے بعد، ورژن چیک کریں: carthage version۔ Carthage کو Xcode with Command Line Tools کی ضرورت ہے۔ Apple Silicon Mac پر، اضافی طور پر Rosetta 2 کی ضرورت ہو سکتی ہے۔

Cartfile Cartfile.resolved سے کیسے مختلف ہے؟

Cartfile ایک کنفیگریشن فائل ہے جو ڈیولپر لکھتا ہے: اس میں لائبریری کے نام اور ورژن آپریٹر (~> 5.9، == 8.0.0، برانچ نام) ہوتے ہیں۔ Cartfile.resolved carthage update کے دوران خود بخود جنریٹ ہوتا ہے اور تمام نصب شدہ انحصار کے عین ورژن کو لاک کرتا ہے۔ Cartfile.resolved کو Git میں رکھنا چاہیے — یہ تمام مشینوں پر تعمیر کی تولیدی صلاحیت کو یقینی بناتا ہے۔

Carthage میرے Cartfile سے لائبریری کیوں نہیں بناتا؟

Carthage کو ضرورت ہے کہ لائبریری میں فریم ورک ہدف کے ساتھ ایک درست Xcode پروجیکٹ یا ورک اسپیس ہو۔ چیک کریں کہ ریپوزٹری قابل رسائی ہے (چابی کے بغیر نجی نہیں)، صحیح ورژن متعین کیا گیا ہے (ٹیگ یا کمٹ موجود ہے)، اور لائبریری آپ کے Xcode ورژن کو سپورٹ کرتی ہے۔ تفصیلی تشخیص کے لیے carthage build --verbose استعمال کریں۔ اگر لائبریری کے پاس فریم ورک ہدف نہیں ہے، Carthage اسے نہیں بنا سکتا۔

کیا 2025–2026 میں Carthage استعمال کرنا چاہیے؟

Carthage ان پروجیکٹس کے لیے متعلقہ رہتا ہے جنہیں وکندریقرت انحصار انتظام، انضمام پر مکمل کنٹرول اور Xcode پروجیکٹ میں کم سے کم مداخلت درکار ہوتی ہے۔ تاہم، زیادہ تر نئے پروجیکٹ Swift Package Manager (SPM) کا انتخاب کرتے ہیں — یہ Xcode میں بلٹ ان ہے، اضافی تنصیب کی ضرورت نہیں اور Apple کے ذریعے فعال طور پر تیار کیا جاتا ہے۔ Carthage ان پرانے پروجیکٹس کے لیے تجویز کیا جاتا ہے جہاں تعمیر کا پائپ لائن پہلے سے قائم ہے، یا ان لائبریریوں کے لیے جن کے مصنفین صارفین کو انضمام کا طریقہ منتخب کرنے کی آزادی دینا چاہتے ہیں۔

خلاصہ

  • Carthage iOS، macOS، watchOS اور tvOS کے لیے ایک وکندریقرت انحصار مینیجر ہے جو Git ریپوزٹری ذرائع سے فریم ورک بناتا ہے
  • Cartfile ایک کنفیگریشن فائل ہے جس کی ترکیب GitHub ریپوزٹریوں، صوابدیدی Git URLs اور سیمنٹک ورژننگ کو سپورٹ کرتی ہے
  • تنصیب brew install carthage سے کی جاتی ہے، اور انحصار کی تعمیر carthage bootstrap یا carthage update سے
  • Xcode انضمام دستی ہے: فریم ورک Embed & Sign آپشن کے ساتھ General → Frameworks, Libraries, and Embedded Content میں شامل کیے جاتے ہیں
  • Cartfile.resolved تمام انحصار کے عین ورژن کو لاک کرتا ہے، CI اور تمام ٹیم مشینوں پر تعمیر کی تولیدی صلاحیت کو یقینی بناتا ہے
  • عام مسائل (کیش، Swift عدم مطابقت، CI غلطیاں) کیش صاف کرکے، --no-use-binaries فلیگ اور CI کیش کنفیگریشن سے حل ہوتے ہیں
  • مینیجر کا انتخاب: Carthage — مکمل کنٹرول کے لیے، CocoaPods — آٹومیشن کے لیے، SPM — بلٹ ان انضمام والے نئے پروجیکٹس کے لیے

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں