CocoaPods Plugin হল Kotlin Multiplatform Mobile-এর জন্য একটি Gradle প্লাগইন যা CocoaPods নির্ভরতা ম্যানেজারকে সরাসরি KMM প্রকল্পের বিল্ড সিস্টেমে একীভূত করে। প্লাগইন আপনাকে build.gradle.kts-এ সরাসরি iOS নির্ভরতা (pods) ঘোষণা করতে, স্বয়ংক্রিয়ভাবে Podfile জেনারেট করতে, pods ইনস্টল করতে এবং সেগুলিকে Kotlin কোডের সাথে লিঙ্ক করতে দেয়। ম্যানুয়ালি .xcworkspace পরিচালনা করার পরিবর্তে, ডেভেলপার Gradle-এর মাধ্যমে iOS নির্ভরতাগুলি পরিচালনা করে, যা KMM প্রকল্প সেটআপকে সম্পূর্ণরূপে পুনরুৎপাদনযোগ্য করে তোলে। JetBrains, 2025-এর মতে, প্লাগইনটি 20% KMM প্রকল্পে iOS লাইব্রেরি পরিচালনা করতে ব্যবহৃত হয়।
মূল পয়েন্ট
CocoaPods Plugin (kotlin.cocoapods নামেও পরিচিত) হল CocoaPods-কে Kotlin Multiplatform Mobile-এর সাথে একীভূত করার জন্য JetBrains-এর একটি অফিসিয়াল প্লাগইন। প্লাগইনটি Kotlin Gradle DSL-এর অংশ এবং সরাসরি KMM মডিউলের build.gradle.kts-এ কনফিগার করা হয়। এটি Podfile তৈরি ও রক্ষণাবেক্ষণ, .xcworkspace জেনারেশন এবং pod নির্ভরতা ব্যবস্থাপনা স্বয়ংক্রিয় করে, ম্যানুয়াল Xcode প্রকল্প কনফিগারেশনের প্রয়োজনীয়তা দূর করে।
CocoaPods Plugin-এর আগে, KMM ডেভেলপারদের ম্যানুয়ালি Podfile তৈরি করতে, pod install চালাতে, bridge হেডার কনফিগার করতে এবং Gradle নির্ভরতা থেকে আলাদাভাবে pod সংস্করণ ট্র্যাক করতে হত। এর ফলে সংস্করণ অসম synchronization এবং CI/CD পাইপলাইনে অসুবিধা সৃষ্টি হত। প্লাগইন iOS নির্ভরতা ব্যবস্থাপনাকে Android মডিউলে Gradle নির্ভরতা ব্যবস্থাপনার মতো সহজ করে এই সমস্যাগুলি সমাধান করেছে।
প্লাগইন CocoaPods Trunk থেকে পাবলিক pods এবং প্রাইভেট রিপোজিটরি থেকে কাস্টম pods উভয়ই সমর্থন করে। স্থানীয় Podspec এবং git-ভিত্তিক রিপোজিটরির সাথে কাজ করাও সমর্থিত। প্লাগইনটি Kotlin 1.6.0 এবং তার উপরে সংস্করণগুলির সাথে সামঞ্জস্যপূর্ণ, এবং ডেভেলপমেন্ট মেশিনে CocoaPods (gem install cocoapods) ইনস্টল করা প্রয়োজন।
CocoaPods Plugin Gradle টাস্ক-গ্রাফ স্তরে কাজ করে, CocoaPods-এর সাথে কাজ করার জন্য বিশেষায়িত টাস্ক যুক্ত করে। প্রধান টাস্কগুলির মধ্যে রয়েছে podInstall (pods ইনস্টল করা), podGenXcodeWorkspace (.xcworkspace জেনারেট করা) এবং podBuildDebugFramework (ফ্রেমওয়ার্কের Debug সংস্করণ তৈরি করা)। প্লাগইন build.gradle.kts-এ cocoapods বিভাগ বিশ্লেষণ করে, ঘোষিত নির্ভরতার ভিত্তিতে Podfile তৈরি করে এবং প্রয়োজনীয় প্যারামিটার সহ pod install চালায়।
প্লাগইনের আর্কিটেকচারে তিনটি উপাদান রয়েছে: build.gradle.kts-এর জন্য DSL এক্সটেনশন, Podfile তৈরি করার জন্য Podfile জেনারেটর এবং .xcworkspace কনফিগার করার জন্য Xcode ইন্টিগ্রেশন লেয়ার। DSL এক্সটেনশন নির্ভরতা ঘোষণা করার জন্য নেস্টেড pod() ফাংশন, প্রাইভেট রিপোজিটরি নির্দিষ্ট করার জন্য specRepo() এবং আউটপুট ফ্রেমওয়ার্ক কনফিগার করার জন্য framework { } সহ একটি cocoapods { } ব্লক প্রদান করে। Podfile জেনারেটর এই ঘোষণাগুলিকে CocoaPods-এর বোধগম্য Ruby সিনট্যাক্সে অনুবাদ করে।
kotlin {
cocoapods {
summary = "Shared module for iOS project"
homepage = "https://itsectr.com"
framework {
baseName = "Shared"
isStatic = true
export(project(":core"))
}
pod("Alamofire") {
version = "~> 5.9"
}
pod("Kingfisher") {
version = "7.12"
}
}
}
podInstall নির্বাহ করার সময়, প্লাগইন ক্রমানুসারে: প্রকল্প রুটে Podfile জেনারেট করে, কমান্ড লাইনের মাধ্যমে pod install চালায়, .xcworkspace জেনারেট করে, নিশ্চিত করে যে pod সংস্করণ ঘোষিত সংস্করণগুলির সাথে মেলে এবং Podfile.lock ক্যাশ করে। পরবর্তী রানে কনফিগারেশন পরিবর্তন ছাড়া, Podfile.lock পরিবর্তিত না হলে podInstall এড়িয়ে যায়। এটি CI/CD-তে সময় বাঁচায়, যেখানে pod install একটি পরিষ্কার ইনস্টলেশনে 2-3 মিনিট পর্যন্ত সময় নিতে পারে।
CocoaPods Plugin সেটআপ করার জন্য বেশ কয়েকটি ধাপ প্রয়োজন। ডেভেলপমেন্ট মেশিনে CocoaPods ইনস্টল করা (gem install cocoapods) একটি পূর্বশর্ত। তারপর, শেয়ার্ড মডিউলের build.gradle.kts-এ, ফ্রেমওয়ার্ক কনফিগারেশন এবং নির্ভরতা সহ একটি cocoapods { } ব্লক যুক্ত করা হয়। কনফিগারেশনের পরে, podInstall টাস্ক নির্বাহ করুন, যা Podfile তৈরি করবে এবং pods ইনস্টল করবে। জেনারেট করা .xcworkspace Podfile-এর পাশে প্রকল্প রুটে অবস্থিত হবে।
প্লাগইন Xcode বিল্ড ফেজ-এর সাথে একীভূত হয়। iOS অ্যাপ তৈরি করার সময়, Xcode embedAndSignAppleFrameworkForXcode চালায় — একটি টাস্ক যা Kotlin/Native ফ্রেমওয়ার্ককে অ্যাপ বান্ডলে কপি করে। CocoaPods Plugin .xcworkspace জেনারেট করার সময় স্বয়ংক্রিয়ভাবে এই বিল্ড ফেজ যুক্ত করে। যদি .xcworkspace জেনারেট করা হয়, তাহলে pod নির্ভরতা সহ সঠিক বিল্ডের জন্য এটি .xcodeproj-এর পরিবর্তে খোলা আবশ্যক।
| ধাপ | বিবরণ | কমান্ড / কাজ |
|---|---|---|
| 1 | CocoaPods ইনস্টল করুন | gem install cocoapods |
| 2 | build.gradle.kts-এ প্লাগইন যোগ করুন | kotlin { cocoapods { ... } } |
| 3 | pods ঘোষণা করুন | pod("Alamofire") { version = "5.9.0" } |
| 4 | Podfile জেনারেট করুন | ./gradlew :shared:podInstall (স্বয়ংক্রিয়ভাবে) |
| 5 | .xcworkspace খুলুন | .xcodeproj-এর পরিবর্তে |
| 6 | iOS অ্যাপ তৈরি করুন | Xcode Build (⌘B) |
CocoaPods Plugin-এ pods ঘোষণা করার বিভিন্ন পরিস্থিতি দেখি। মৌলিক ক্ষেত্রে নির্দিষ্ট সংস্করণ সহ CocoaPods Trunk থেকে একটি পাবলিক pod সংযোগ করা। আরও জটিল পরিস্থিতিতে কাস্টম podspec, স্থানীয় pods এবং git রিপোজিটরি থেকে pods ব্যবহার অন্তর্ভুক্ত।
kotlin {
iosArm64()
iosSimulatorArm64()
cocoapods {
framework {
baseName = "Shared"
isStatic = false
}
// CocoaPods Trunk থেকে পাবলিক pod
pod("Alamofire") { version = "5.9.0" }
// অপারেটর সহ কাস্টম সংস্করণ
pod("SnapKit") { version = "~> 5.6" }
// প্রাইভেট রিপোজিটরি থেকে pod
specRepo("https://git.itsectr.com/specs.git",
"internal-specs")
pod("InternalAnalyticsPod")
// পাথ সহ স্থানীয় pod
pod(name = "CustomPod",
localPath = "./ios-pods/CustomPod")
// git রিপোজিটরি থেকে pod
pod(name = "PrivateSDK",
git = "https://git.itsectr.com/ios/sdk.git",
tag = "2.1.0")
}
}
pods সংযোগ করা কনফিগারেশনের শুধুমাত্র একটি অংশ। প্লাগইন আপনাকে অন্যান্য Kotlin মডিউল থেকে iOS ফ্রেমওয়ার্কে নির্ভরতা এক্সপোর্ট করার অনুমতি দেয়। export(project(":core")) ফাংশন নির্দিষ্ট করে যে :core মডিউলের সমস্ত পাবলিক API জেনারেট করা ফ্রেমওয়ার্কের Objective-C হেডার থেকে অ্যাক্সেসযোগ্য হওয়া উচিত। এটি প্রয়োজনীয় যখন শেয়ার্ড Kotlin কোড অন্য মডিউল থেকে ক্লাস ব্যবহার করে এবং সেগুলি Swift থেকে অ্যাক্সেসযোগ্য হতে প্রয়োজন।
cocoapods {
framework {
baseName = "Shared"
// iOS ফ্রেমওয়ার্কে মডিউল এক্সপোর্ট করুন
export(project(":network"))
export(project(":domain"))
// স্ট্যাটিক বা ডায়নামিক লিঙ্কিং
isStatic = true
}
// এক্সপোর্ট করা মডিউলের জন্য প্রয়োজনীয় pod
pod("Moya") { version = "15.0" }
}
কনফিগারেশনের পরে, Podfile জেনারেট করতে এবং নির্ভরতা ইনস্টল করতে podInstall চালানো প্রয়োজন। তারপর জেনারেট করা .xcworkspace Xcode-এ খোলা হয়, যেখানে স্ট্যান্ডার্ড পদ্ধতিতে অ্যাপ তৈরি করা যায়। CI/CD-এর জন্য, নিশ্চিত করুন যে বিল্ড মেশিনে CocoaPods এবং Ruby ইনস্টল আছে। প্লাগইন CI পরিবেশে কাজ করার জন্য --no-daemon ফ্ল্যাগ সমর্থন করে।
// pods ইনস্টল করলে Podfile + xcworkspace জেনারেট হয়
./gradlew :shared:podInstall
// পরীক্ষার জন্য debug ফ্রেমওয়ার্ক তৈরি করুন
./gradlew :shared:podBuildDebugFramework
// কমান্ড লাইন থেকে সম্পূর্ণ iOS বিল্ড
xcodebuild -workspace ios-app.xcworkspace \
-scheme ios-app -configuration Debug
Swift Package Manager (SPM) হল Apple-এর একটি বিকল্প নির্ভরতা ম্যানেজার যা জনপ্রিয়তা অর্জন করছে এবং ধীরে ধীরে iOS কমিউনিটিতে CocoaPods-কে প্রতিস্থাপন করছে। তবে, CocoaPods Plugin বিভিন্ন কারণে প্রাসঙ্গিক রয়ে গেছে: SPM KMM প্রসঙ্গে ডায়নামিক ফ্রেমওয়ার্ক সমর্থন করে না, এবং SPM-এর মাধ্যমে Kotlin/Native ফ্রেমওয়ার্ক একীভূত করার জন্য অতিরিক্ত সেটআপ প্রয়োজন। CocoaPods Plugin আরও পরিপক্ক এবং ডকুমেন্টেড ইন্টিগ্রেশন পাথ প্রদান করে।
CocoaPods Plugin এবং সরাসরি SPM ইন্টিগ্রেশনের তুলনা দেখায় যে প্রথমটি অটোমেশনে জয়ী হয়, যখন দ্বিতীয়টি নেটিভ Apple সমর্থনে জয়ী হয়। CocoaPods Plugin স্বয়ংক্রিয়ভাবে Podfile জেনারেট করে, সংস্করণ পরিচালনা করে এবং Xcode বিল্ড ফেজ কনফিগার করে। SPM-এর জন্য Package.swift-এর মাধ্যমে Kotlin ফ্রেমওয়ার্ক ম্যানুয়ালি সংযোগ করতে হয়, যা বড় KMM প্রকল্পের জন্য রক্ষণাবেক্ষণ করা কঠিন। JetBrains Kotlin/Native-এর জন্য SPM সমর্থনে কাজ করছে, কিন্তু 2025 সাল পর্যন্ত SPM ইন্টিগ্রেশন পরীক্ষামূলক রয়ে গেছে।
| বৈশিষ্ট্য | CocoaPods Plugin | Swift Package Manager |
|---|---|---|
| পরিপক্কতা | প্রোডাকশন-রেডি | পরীক্ষামূলক |
| Podfile জেনারেশন | স্বয়ংক্রিয় | প্রযোজ্য নয় |
| ডায়নামিক ফ্রেমওয়ার্ক | সমর্থিত | সীমিত |
| CI/CD সেটআপ | সহজ (Gradle টাস্ক) | ম্যানুয়াল ধাপ প্রয়োজন |
| প্রাইভেট রিপোজিটরি | সমর্থিত (specRepo) | সমর্থিত (URL) |
| নেটিভ Apple সমর্থন | CocoaPods-এর মাধ্যমে | নেটিভ |
CocoaPods Plugin ব্যবহার করার সময়, KMM ডেভেলপাররা বেশ কয়েকটি সাধারণ সমস্যার সম্মুখীন হন। pod সংস্করণ দ্বন্দ্ব সবচেয়ে সাধারণ সমস্যা, যখন দুটি pods একই নির্ভরতার বিভিন্ন সংস্করণ প্রয়োজন। সমাধান হল pod("Dependency") { version = "x.x" }-এর মাধ্যমে দ্বন্দ্বকারী নির্ভরতার সংস্করণ স্পষ্টভাবে নির্দিষ্ট করা। দ্বিতীয় সাধারণ ঘটনা হল সংস্করণ অসামঞ্জস্যতা, যখন একটি pod-এর KMM প্রকল্পের ন্যূনতম সংস্করণের চেয়ে নতুন iOS SDK প্রয়োজন।
.xcworkspace-এর সাথে সমস্যা দেখা দেয় যদি প্লাগইন কনফিগার করার পরে .xcodeproj .xcworkspace-এর পরিবর্তে খোলা হয়। প্লাগইন podInstall লগে এই সম্পর্কে সতর্ক করে। আরেকটি ঘন ঘন ত্রুটি হল ডেভেলপমেন্ট মেশিনে CocoaPods-এর অনুপস্থিতি। প্লাগইন podInstall চালানোর আগে pod কমান্ডের উপস্থিতি পরীক্ষা করে এবং একটি স্পষ্ট ত্রুটি বার্তা দেখায়। CI/CD-এর জন্য, CocoaPods ইনস্টল করুন: gem install cocoapods.
// সংস্করণ দ্বন্দ্ব সমাধান করুন
cocoapods {
pod("Alamofire") { version = "5.9.0" }
// স্পষ্টভাবে দ্বন্দ্ব সমাধান করুন
pod("Alamofire") {
version = "5.9.0"
options[name] = mapOf("force" to true)
}
}
// Gradle-এর মাধ্যমে CocoaPods ইনস্টলেশন পরীক্ষা করুন
tasks.register("checkCocoapods") {
doLast {
val result = "pod --version".runCommand()
println("CocoaPods সংস্করণ: $result")
}
}
যদি podInstall ব্যর্থ হয়, বিস্তারিত আউটপুটের জন্য --info ফ্ল্যাগ ব্যবহার করুন: ./gradlew podInstall --info। প্লাগইন প্রতিটি ধাপ লগ করে: Podfile জেনারেশন, pod install এক্সিকিউশন, Podfile.lock পার্সিং। বেশিরভাগ সময়, ত্রুটিগুলি নেটওয়ার্ক সমস্যা (CocoaPods Trunk অনুপলব্ধ) বা ভুল Podfile সিনট্যাক্সের সাথে সম্পর্কিত। এই ধরনের ক্ষেত্রে, CocoaPods থেকে আরও বিস্তারিত ত্রুটি বার্তা পেতে প্রকল্প রুটে ম্যানুয়ালি pod install চালানোর চেষ্টা করুন।
সচরাচর জিজ্ঞাসিত প্রশ্ন
যদি সমস্ত iOS নির্ভরতা SPM-এর মাধ্যমে পরিচালিত হয়, তাহলে CocoaPods Plugin প্রয়োজন নেই। প্লাগইনটি CocoaPods-এর সাথে একীকরণের জন্য প্রয়োজন। JetBrains SPM সমর্থনে কাজ করছে, কিন্তু 2025 সাল পর্যন্ত এটি পরীক্ষামূলক।
বিল্ড সময় শুধুমাত্র প্রথম podInstall রানের সময় (Podfile জেনারেশন + pod ইনস্টলেশন) বাড়ে। পরবর্তী বিল্ডগুলি Podfile.lock ক্যাশ ব্যবহার করে। Kotlin/Native ফ্রেমওয়ার্ক বিল্ড নিজে pods-এর উপর নির্ভর করে না।
হ্যাঁ, প্লাগইন প্রাইভেট রিপোজিটরি সংযোগের জন্য specRepo বৈশিষ্ট্য সমর্থন করে। specRepo-তে রিপোজিটরি URL এবং নাম নির্দিষ্ট করুন, তারপর সেই রিপোজিটরি থেকে pods ঘোষণার জন্য উপলব্ধ হবে।
বিস্তারিত ত্রুটি বার্তার জন্য প্রকল্প রুটে ম্যানুয়ালি pod install চালান। CocoaPods Trunk-এর সাথে সংযোগ, pod সংস্করণের সঠিকতা এবং মেশিনে Ruby-এর উপস্থিতি পরীক্ষা করুন।
হ্যাঁ, পুনরুৎপাদনযোগ্য বিল্ডের জন্য Podfile.lock কমিট করা উচিত। CocoaPods Plugin Podfile জেনারেট করে, কিন্তু Podfile.lock pod install-এর সময় ইনস্টল করা সঠিক pod সংস্করণগুলি লক করে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন