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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন