CocoaPods iOS, macOS, watchOS और tvOS प्रोजेक्ट्स के लिए एक ओपन-सोर्स निर्भरता प्रबंधक है। CocoaPods Ruby भाषा में बनाया गया है और 100,000 से अधिक लाइब्रेरीज़ वाले एक विशिष्टता रजिस्ट्री (Specs) का उपयोग करता है। एकीकरण Podfile फ़ाइल के माध्यम से होता है, जो प्रोजेक्ट की सभी निर्भरताओं का वर्णन करती है। स्थापना का परिणाम .xcworkspace है, जो मुख्य प्रोजेक्ट और सभी जुड़े मॉड्यूल को जोड़ता है। CocoaPods iOS विकास में सबसे लोकप्रिय निर्भरता प्रबंधक बना हुआ है: Stack Overflow Survey (2025) के अनुसार, 34% iOS डेवलपर इसका उपयोग करते हैं।
मुख्य बिंदु
pod install के माध्यम से .xcworkspace बनाती है — केवल इसे Xcode में खोलना चाहिएCocoaPods Apple इकोसिस्टम के लिए एक निर्भरता प्रबंधक है, जो Ruby में लिखा गया है और 2011 में Eladio Lopez द्वारा जारी किया गया था। CocoaPods Xcode प्रोजेक्ट्स में तृतीय-पक्ष लाइब्रेरीज़ को एकीकृत करने की समस्या को हल करता है: मैन्युअल रूप से फ़ाइलों की प्रतिलिपि बनाने और लिंकर फ़्लैग्स कॉन्फ़िगर करने के बजाय, डेवलपर Podfile में निर्भरताओं का वर्णन करता है और pod install चलाता है। CocoaPods स्वचालित रूप से स्रोत फ़ाइलों को डाउनलोड करता है, कंपाइलर फ़्लैग्स कॉन्फ़िगर करता है और .xcworkspace वर्कस्पेस बनाता है।
CocoaPods आर्किटेक्चर में तीन घटक शामिल हैं: CocoaPods.app (CLI टूल), Specs (GitHub पर केंद्रीय विशिष्टता रजिस्ट्री), और Podfile (प्रोजेक्ट कॉन्फ़िगरेशन)। Specs रजिस्ट्री में संस्करण इतिहास के साथ 100,000 से अधिक लाइब्रेरीज़ हैं। pod install चलाने पर, CocoaPods नवीनतम रजिस्ट्री संस्करण डाउनलोड करता है (pod repo update), निर्भरताएँ ढूंढता है, संस्करण ट्री हल करता है और सभी pod एकीकरणों के साथ .xcworkspace उत्पन्न करता है। प्रत्येक लाइब्रेरी को एक अलग लक्ष्य के रूप में संकलित किया जाता है, जो निर्भरता पृथक्करण और नाम विरोध से बचने की अनुमति देता है।
CocoaPods Xcode के साथ निकटता से एकीकृत है: यह हेडर पथ और लिंकर फ़्लैग्स के साथ Pods.xcconfig फ़ाइलें उत्पन्न करता है, और User Script Sandboxing कॉन्फ़िगर करता है। macOS पर CocoaPods का उपयोग करने के लिए Ruby 2.6+ (सभी Mac पर पूर्व-स्थापित) और Xcode with Command Line Tools आवश्यक है। आँकड़े: 2025 में, CocoaPods ने 10 बिलियन से अधिक pod डाउनलोड संसाधित किए, और औसत iOS प्रोजेक्ट में CocoaPods के माध्यम से 15 से 40 निर्भरताएँ होती हैं।
CocoaPods प्रत्येक लाइब्रेरी को एक अलग Git रिपॉजिटरी के रूप में डाउनलोड करता है, इसकी .podspec विशिष्टता की जाँच करता है और इसे एक स्थिर फ्रेमवर्क या गतिशील लाइब्रेरी में संकलित करता है। Pods अन्य pods पर निर्भर हो सकते हैं — CocoaPods एक निर्भरता ग्राफ बनाता है और संस्करण विरोध को हल करता है। यदि दो लाइब्रेरीज़ को एक ही निर्भरता के विभिन्न संस्करणों की आवश्यकता होती है, तो CocoaPods एक संगत संस्करण खोजने का प्रयास करता है या त्रुटि की रिपोर्ट करता है। सभी निर्भरताएँ और उनके संस्करण Podfile.lock फ़ाइल में दर्ज किए जाते हैं, जिसे संस्करण नियंत्रण में जोड़ा जाना चाहिए।
मैन्युअल एकीकरण की तुलना में CocoaPods के लाभ: स्वचालित निर्भरता प्रबंधन, केंद्रीकृत लाइब्रेरी रजिस्ट्री, उप-विशिष्टताओं (subspecs) के लिए समर्थन, निजी रिपॉजिटरी बनाने की क्षमता और सिमैंटिक वर्जनिंग। एक विकास टीम के लिए, CocoaPods सुनिश्चित करता है कि सभी सदस्य समान लाइब्रेरी संस्करणों का उपयोग करें — Podfile.lock किसी भी मशीन पर बिल्ड पुनरुत्पादनशीलता सुनिश्चित करता है।
Podfile एक Ruby कॉन्फ़िगरेशन फ़ाइल है जो Xcode प्रोजेक्ट की निर्भरताओं को परिभाषित करती है। Podfile को .xcodeproj के बगल में प्रोजेक्ट रूट में रखा जाता है। CocoaPods सिंटैक्स Ruby DSL (Domain Specific Language) पर आधारित है, जो वेरिएबल्स, शर्तों और लूप्स के उपयोग की अनुमति देता है। एक न्यूनतम Podfile में एक प्लेटफ़ॉर्म और कम से कम एक निर्भरता होती है।
platform :ios, '15.0'
target 'MyApp' do
pod 'Alamofire', '~> 5.9'
pod 'SnapKit', '~> 5.7'
pod 'Kingfisher', '~> 8.0'
endमुख्य पंक्ति platform :ios, '15.0' न्यूनतम iOS संस्करण सेट करती है। target 'MyApp' निर्देश एक विशिष्ट लक्ष्य के लिए निर्भरताओं को समूहित करता है। प्रत्येक pod 'Name', '~> version' पंक्ति लाइब्रेरी नाम और संस्करण निर्दिष्ट करती है। ऑपरेटर '~> 5.9' का अर्थ है "5.9 से 6.0 तक कोई भी संस्करण, 6.0 को छोड़कर" — यह सिमैंटिक वर्जनिंग है जो ब्रेकिंग चेंजेस से बचाता है।
CocoaPods लचीले संस्करण ऑपरेटरों का समर्थन करता है: '= 1.0' (सटीक संस्करण), '>= 1.0' (न्यूनतम), '< 2.0' (अधिकतम), '~> 1.2.3' (केवल पैच)। किसी लाइब्रेरी को स्थानीय फ़ोल्डर से शामिल करने के लिए pod 'MyLib', :path => '../MyLib' का उपयोग करें। Git से शामिल करने के लिए — pod 'MyLib', :git => 'https://github.com/user/MyLib.git', :tag => '1.0.0'।
platform :ios, '15.0'
use_frameworks! :linkage => :static
inhibit_all_warnings!
target 'MyApp' do
pod 'Alamofire', '~> 5.9'
pod 'Firebase/Crashlytics', '~> 11.0'
target 'MyAppTests' do
inherit! :search_paths
pod 'Nimble', '~> 13.0'
end
end
target 'MyWatchExtension' do
platform :watchos, '9.0'
pod 'Alamofire', '~> 5.9'
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
end
end
enduse_frameworks! स्थिर लाइब्रेरीज़ के बजाय फ्रेमवर्क के रूप में pods बनाने में सक्षम बनाता है (Xcode 15+ से डिफ़ॉल्ट व्यवहार)। :linkage => :static विशेषता फ्रेमवर्क को स्थिर बनाती है, जिससे ऐप का आकार कम होता है। inhibit_all_warnings! pods से चेतावनियों को दबाता है — साफ बिल्ड लॉग के लिए उपयोगी। inherit! :search_paths के साथ नेस्टेड लक्ष्य (उदाहरण परीक्षण के लिए) सभी निर्भरताओं को पुनः संकलित किए बिना केवल खोज पथ प्राप्त करते हैं। post_install ब्लॉक सभी pod लक्ष्यों के लिए बिल्ड सेटिंग्स कॉन्फ़िगर करता है — यह एकीकृत न्यूनतम iOS संस्करण सेट करने के लिए एक मानक पैटर्न है।
Podfile.lock pod install के दौरान स्वचालित रूप से उत्पन्न होता है। यह ट्रांज़िटिव सहित सभी स्थापित निर्भरताओं के सटीक संस्करणों को लॉक करता है। लॉक फ़ाइल को रिपॉजिटरी में रखा जाना चाहिए — इसके बिना, किसी अन्य मशीन पर pod install विभिन्न संस्करण स्थापित कर सकता है। कमांड pod update PodName एक विशिष्ट pod को अपडेट करता है, Podfile.lock को संशोधित करता है। pod outdated नए संस्करणों वाले pods की सूची दिखाता है।
Podspec .podspec एक्सटेंशन वाली Ruby फ़ाइल है जो CocoaPods के लिए एक लाइब्रेरी का वर्णन करती है। Podspec में मेटाडेटा (नाम, संस्करण, लेखक), स्रोत कोड, निर्भरताएँ, सिस्टम फ्रेमवर्क और प्लेटफ़ॉर्म आवश्यकताएँ होती हैं। CocoaPods रजिस्ट्री में प्रकाशित करने से पहले pod spec lint के साथ podspec को मान्य करता है।
Pod::Spec.new do |s|
s.name = 'NetworkingKit'
s.version = '1.2.0'
s.summary = 'Lightweight HTTP client for iOS'
s.description = 'NetworkingKit is a Swift HTTP client with async/await support, built-in caching, and automatic retry logic.'
s.homepage = 'https://github.com/user/NetworkingKit'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'Developer' => 'dev@example.com' }
s.source = { :git => 'https://github.com/user/NetworkingKit.git', :tag => s.version.to_s }
s.ios.deployment_target = '15.0'
s.swift_version = '5.9'
s.source_files = 'Sources/**/*.swift'
s.dependency 'Alamofire', '~> 5.9'
ends.name — रजिस्ट्री में अद्वितीय लाइब्रेरी नाम। s.version Git टैग से मेल खाता है (प्रकाशन के लिए महत्वपूर्ण)। s.source_files — स्रोत फ़ाइलों को शामिल करने के लिए ग्लोब पैटर्न। s.dependency एक संस्करण के साथ अन्य pods पर निर्भरता निर्दिष्ट करता है। s.ios.deployment_target न्यूनतम समर्थित iOS संस्करण सेट करता है — यदि प्रोजेक्ट पुराने संस्करण का उपयोग करता है तो CocoaPods स्वचालित रूप से चेतावनी देगा। निजी pods के लिए, रजिस्ट्री में प्रकाशित करने के बजाय Podfile में :path का उपयोग किया जा सकता है।
केंद्रीय Specs रजिस्ट्री में लाइब्रेरी प्रकाशित करना pod trunk push NetworkingKit.podspec के माध्यम से किया जाता है। pod trunk register dev@example.com 'Developer' के माध्यम से पूर्व पंजीकरण आवश्यक है। CocoaPods podspec को मान्य करता है और Specs रिपॉजिटरी में पुल रिक्वेस्ट भेजता है। आंतरिक कंपनी लाइब्रेरीज़ के लिए pod repo push के माध्यम से निजी रजिस्ट्री एक विकल्प है।
उप-विशिष्टताएँ (Subspecs) एक लाइब्रेरी को मॉड्यूल में विभाजित करने की अनुमति देती हैं जिन्हें उपयोगकर्ता चुनिंदा रूप से शामिल कर सकते हैं। उदाहरण के लिए, Firebase उप-विशिष्टताओं का उपयोग करता है: pod 'Firebase/Crashlytics' बिना अन्य Firebase मॉड्यूल के केवल Crashlytics शामिल करता है। उप-विशिष्टताएँ आधार कॉन्फ़िगरेशन प्राप्त करती हैं और अपने स्वयं के source_files और निर्भरताएँ जोड़ सकती हैं।
| कमांड | कार्य |
|---|---|
pod spec lint | podspec वैधता की जाँच करें |
pod trunk register | CocoaPods Trunk में पंजीकरण |
pod trunk push | रजिस्ट्री में podspec प्रकाशित करें |
pod repo push | निजी रजिस्ट्री में प्रकाशित करें |
pod lib lint | स्थानीय लाइब्रेरी सत्यापन |
CocoaPods RubyGems के माध्यम से स्थापित किया जाता है — Ruby का मानक पैकेज प्रबंधक। macOS पर Ruby पूर्व-स्थापित है, इसलिए एक टर्मिनल कमांड पर्याप्त है। एक विकल्प Homebrew है, जो CocoaPods को एक अलग फॉर्मूला के रूप में स्थापित करता है। स्थापना के बाद, प्रोजेक्ट आरंभीकरण pod init के साथ किया जाता है, जो मूल कॉन्फ़िगरेशन के साथ Podfile बनाता है। Podfile को निर्भरताओं से भरने के बाद, डेवलपर pod install चलाता है — CocoaPods लाइब्रेरीज़ डाउनलोड करता है और वर्कस्पेस उत्पन्न करता है।
# इंस्टॉल करना CocoaPods के माध्यम से RubyGems
sudo gem install cocoapods
# वैकल्पिक इंस्टॉलेशन के माध्यम से Homebrew
brew install cocoapods
# आरंभीकरण Podfile प्रोजेक्ट में
cd /path/to/Project
pod init
# निर्भरताएँ स्थापित करना
pod installमहत्वपूर्ण नियम: pod install के बाद, हमेशा .xcworkspace खोलें, .xcodeproj नहीं। यदि आप .xcodeproj खोलते हैं, तो Xcode pods नहीं देखेगा और बिल्ड लिंकर त्रुटियों के साथ विफल हो जाएगा। pod install कमांड केवल तभी निर्भरताएँ डाउनलोड करता है जब Podfile बदलता है या पहली बार चलने पर। सभी pods को जबरन पुनः स्थापित करने के लिए, pod install --repo-update या pod deintegrate && pod install का उपयोग करें।
CocoaPods को अपडेट करना sudo gem update cocoapods या brew upgrade cocoapods के माध्यम से किया जाता है। CocoaPods संस्करण pod --version कमांड से जाँचा जाता है। संस्करण 1.12 (2024) से, CocoaPods सख्त मॉड्यूल सत्यापन सेटिंग्स और बेहतर ट्रांज़िटिव निर्भरता समाधान के साथ Xcode 15 का समर्थन करता है। मध्य-2025 तक नवीनतम स्थिर संस्करण 1.16 है जो Swift 6 समर्थन और 50+ pods वाले प्रोजेक्ट्स के लिए बेहतर निर्भरता ग्राफ समाधान प्रदर्शन के साथ है।
# सभी pods को नवीनतम संस्करणों में अपडेट करना
pod update
# विशिष्ट pod को अपडेट करना
pod update Alamofire
# पुरानी निर्भरताओं की जाँच करना
pod outdated
# हटाना CocoaPods प्रोजेक्ट से
pod deintegratepod update बिना तर्कों के Podfile के अनुसार सभी pods को नवीनतम संगत संस्करणों में अपडेट करता है (~> ऑपरेटरों का सम्मान करते हुए)। pod outdated Podfile.lock में वर्तमान संस्करण और नवीनतम उपलब्ध संस्करण के बीच अंतर दिखाता है। pod deintegrate प्रोजेक्ट से CocoaPods को पूरी तरह से हटा देता है — .xcworkspace, कॉन्फ़िगरेशन फ़ाइलें और बिल्ड सेटिंग्स हटाता है। Swift Package Manager पर माइग्रेट करते समय यह उपयोगी है।
निर्भरता प्रबंधन CocoaPods में चार पहलू शामिल हैं: संस्करण लॉकिंग, विरोध समाधान, बिल्ड ऑप्टिमाइज़ेशन और ट्रांज़िटिव निर्भरताओं को संभालना। CocoaPods Podfile.lock के आधार पर एक निर्भरता ग्राफ बनाता है — यदि कोई प्रोजेक्ट A और B लाइब्रेरीज़ का उपयोग करता है, दोनों C पर निर्भर करती हैं, तो CocoaPods C का एक संस्करण ढूंढता है जो दोनों आवश्यकताओं को पूरा करता हो।
विरोध तब उत्पन्न होते हैं जब दो निर्भरताएँ एक ही लाइब्रेरी के असंगत संस्करणों की आवश्यकता होती हैं। CocoaPods विरोधी आवश्यकताओं को इंगित करते हुए एक त्रुटि की रिपोर्ट करता है। समाधान: किसी एक निर्भरता को संगत संस्करण में अपडेट करें, एक विशिष्ट कमिट के साथ pod 'Lib', :git => ... का उपयोग करें, या संशोधित निर्भरता के साथ किसी एक लाइब्रेरी को फोर्क करें। बड़े प्रोजेक्ट्स के लिए, प्रत्येक पुल रिक्वेस्ट पर pod lib lint के साथ CI सत्यापन सेट करने की अनुशंसा की जाती है।
CocoaPods कई उन्नत सुविधाएँ प्रदान करता है: स्थानीय लाइब्रेरी विकास के लिए :path, फोर्क्स को जोड़ने के लिए :git, विकास शाखाओं के परीक्षण के लिए :branch। :linkage => :static के साथ use_frameworks! निर्देश अंतिम बाइनरी आकार को कम करता है। A/B परीक्षण और फ़ीचर फ़्लैग्स के लिए, Podfile में Ruby सशर्त निर्माणों के माध्यम से विभिन्न pod संस्करण शामिल किए जा सकते हैं।
platform :ios, '15.0'
use_frameworks!
# पर्यावरण परिभाषित करना
is_debug = defined?(DEBUG) && DEBUG
target 'MyApp' do
# मुख्य निर्भरताएँ
pod 'Alamofire', '~> 5.9'
pod 'SnapKit', '~> 5.7'
# विकास के लिए स्थानीय लाइब्रेरी
pod 'MyInternalLib', :path => '../MyInternalLib'
# डिबगिंग के लिए सशर्त निर्भरता
if is_debug
pod 'SwiftyBeaver', '~> 2.0'
else
pod 'CocoaLumberjack', '~> 3.8'
end
# बग फिक्स के साथ फोर्क
pod 'Kingfisher', :git => 'https://github.com/user/Kingfisher.git', :branch => 'fix-memory-leak'
end
abstract_target 'Pods' do
pod 'Alamofire'
endabstract_target किसी विशिष्ट Xcode लक्ष्य से बंधे बिना साझा निर्भरताओं के लिए एक आभासी लक्ष्य बनाता है। Ruby सशर्त निर्माण Debug और Release कॉन्फ़िगरेशन के लिए विभिन्न लाइब्रेरीज़ शामिल करने की अनुमति देते हैं। स्थानीय लाइब्रेरी के साथ :path विकास को गति देता है — pod install को पुनरारंभ किए बिना परिवर्तन लागू होते हैं। :branch मोड आधिकारिक रिलीज़ से पहले परिवर्तनों के परीक्षण के लिए उपयोगी है।
CocoaPods, Swift Package Manager (SPM) और Carthage iOS विकास में तीन मुख्य निर्भरता प्रबंधक हैं। प्रत्येक की अपनी आर्किटेक्चर, एकीकरण दृष्टिकोण और नियंत्रण स्तर है। CocoaPods लाइब्रेरीज़ की संख्या में अग्रणी है, SPM Xcode में निर्मित समर्थन के साथ जीतता है, Carthage लोकप्रियता में पीछे है लेकिन अधिकतम नियंत्रण प्रदान करता है।
| मानदंड | CocoaPods | SPM | Carthage |
|---|---|---|---|
| कॉन्फ़िगरेशन भाषा | Ruby DSL | Package.swift (Swift) | Cartfile |
| Xcode एकीकरण | वर्कस्पेस के माध्यम से | अंतर्निर्मित | मैन्युअल (xcframeworks) |
| लाइब्रेरीज़ की संख्या | 100,000+ | ~65,000 | ~20,000 |
| ट्रांज़िटिव निर्भरताएँ | स्वचालित | स्वचालित | मैन्युअल |
| संसाधन समर्थन | हाँ (resource bundles) | हाँ (Resources) | नहीं |
| स्थापना गति | मध्यम | तेज़ | तेज़ |
| संस्करण नियंत्रण | Gemfile.lock | Package.resolved | Cartfile.resolved |
CocoaPods उन प्रोजेक्ट्स के लिए विकल्प बना हुआ है जिन्हें अधिकतम लाइब्रेरी अनुकूलता की आवश्यकता होती है (कई विरासत लाइब्रेरीज़ केवल CocoaPods के माध्यम से उपलब्ध हैं)। SPM नए प्रोजेक्ट्स के लिए अनुशंसित है — यह Xcode में निर्मित है, अतिरिक्त टूल की आवश्यकता नहीं है और Apple द्वारा समर्थित है। Carthage का उपयोग शायद ही कभी किया जाता है, मुख्य रूप से उन प्रोजेक्ट्स के लिए जिन्हें Xcode कॉन्फ़िगरेशन में न्यूनतम हस्तक्षेप की आवश्यकता होती है। 2024 से, Apple सक्रिय रूप से SPM विकसित कर रहा है, और कई लोकप्रिय लाइब्रेरीज़ (Alamofire, Firebase, SnapKit) पहले से ही CocoaPods के साथ इसका समर्थन करती हैं।
CocoaPods से SPM में माइग्रेशन pod deintegrate (CocoaPods हटाना) और Xcode में File → Add Package Dependencies के माध्यम से पैकेज जोड़कर किया जाता है। मुख्य चुनौतियाँ: संसाधनों वाली लाइब्रेरीज़ (फ़ॉन्ट, इमेज, स्टोरीबोर्ड) अलग व्यवहार कर सकती हैं, और CocoaPods प्लगइन्स (उदाहरण कोड जनरेशन के लिए) का SPM में कोई समकक्ष नहीं है। CocoaPods-विशिष्ट सुविधाओं की आवश्यकता वाले प्रोजेक्ट्स के लिए CocoaPods रखने की अनुशंसा की जाती है: कोड जनरेशन, resource bundles और post_install hooks के माध्यम से कस्टम बिल्ड चरण।
CocoaPods एक स्थिर उपकरण है, लेकिन डेवलपर्स समय-समय पर विशिष्ट समस्याओं का सामना करते हैं। अधिकांश Ruby संस्करणों, कैशिंग या निर्भरता विरोध से संबंधित हैं। नीचे सबसे सामान्य परिदृश्य और उनके समाधान दिए गए हैं।
त्रुटि "The sandbox is not in sync with the Podfile.lock" — तब होती है जब pod install चलाने से पहले Podfile.lock को रिपॉजिटरी में बदल दिया जाता है। समाधान: pod install या pod deintegrate && pod install चलाएँ। CI वातावरण के लिए, बिल्ड स्क्रिप्ट में pod install जोड़ने की अनुशंसा की जाती है। एक और सामान्य कारण डेवलपर्स के बीच CocoaPods संस्करण में अंतर है: सभी मशीनों पर pod --version जाँचें।
Specs रजिस्ट्री अपडेट करने में त्रुटि — आमतौर पर नेटवर्क समस्याओं या पुरानी Git रिपॉजिटरी के कारण होती है। समाधान: pod repo update --verbose विवरण दिखाता है। यदि Specs दूषित है: rm -rf ~/.cocoapods/repos/master && pod repo add master https://github.com/CocoaPods/Specs.git। धीमे इंटरनेट के लिए, आप CDN का उपयोग कर सकते हैं — यह CocoaPods 1.8+ से डिफ़ॉल्ट रूप से सक्षम है।
डुप्लिकेट सिंबल त्रुटि — तब होती है जब कोई लाइब्रेरी दो बार शामिल की जाती है या pods के बीच सिंबल विरोध होता है। समाधान: डुप्लिकेट के लिए Podfile जाँचें, सिंबल को अलग करने के लिए use_frameworks! :linkage => :static का उपयोग करें। यदि समस्या लाइब्रेरी में है, तो लेखक को रिपोर्ट करें। कभी-कभी Derived Data साफ करना और Xcode पुनरारंभ करना मदद करता है।
Apple Silicon Mac पर CocoaPods स्थापित नहीं होता — macOS पर पूर्व-स्थापित Ruby Rosetta 2 के माध्यम से चलता है, जिससे संकलन त्रुटियाँ होती हैं। समाधान: मूल ARM64 आर्किटेक्चर के लिए rbenv या asdf के माध्यम से Ruby स्थापित करें। विकल्प: Homebrew का उपयोग करें — brew install cocoapods स्वचालित रूप से ARM64 के लिए बनाता है। यदि gems x86_64 के लिए स्थापित हैं, तो कमांड arch -arm64 sudo gem install cocoapods समस्या हल करता है।
धीमी pod स्थापना — बड़े प्रोजेक्ट्स पर, pod install में मिनट लग सकते हैं। समाधान: निदान के लिए --verbose सक्षम करें। यदि Specs पहले से अपडेट है तो --no-repo-update का उपयोग करें। CI सर्वर के लिए, Pods/ फ़ोल्डर और ~/.cocoapods कैश करें। CocoaPods 1.12+ में, install! 'cocoapods', :parallel_download => true के माध्यम से समानांतर डाउनलोड उपलब्ध है।
| समस्या | कारण | समाधान |
|---|---|---|
| Sandbox not in sync | Podfile.lock बदला | pod install |
| Specs रिपॉजिटरी दूषित | Git त्रुटि | Specs पुनः स्थापित करें |
| डुप्लिकेट सिंबल | लाइब्रेरी विरोध | use_frameworks! :static |
| Apple Silicon पर त्रुटि | Rosetta के तहत Ruby | Homebrew / rbenv ARM |
| धीमी स्थापना | बड़ा निर्भरता ग्राफ | समानांतर डाउनलोड, कैश |
अक्सर पूछे जाने वाले प्रश्न
CocoaPods Apple प्रोजेक्ट्स (iOS, macOS, watchOS, tvOS) के लिए एक निर्भरता प्रबंधक है। यह तृतीय-पक्ष लाइब्रेरीज़ को डाउनलोड, कॉन्फ़िगर और एकीकृत करने को स्वचालित करता है। मैन्युअल रूप से फ़ाइलों की प्रतिलिपि बनाने और कंपाइलर फ़्लैग्स कॉन्फ़िगर करने के बजाय, Podfile में एक पंक्ति pod 'LibraryName' जोड़ना और pod install चलाना पर्याप्त है।
Podfile एक कॉन्फ़िगरेशन फ़ाइल है जो डेवलपर लिखता है: इसमें लाइब्रेरी नाम और संस्करण ऑपरेटर (~> 5.9, >= 2.0, सटीक संस्करण) होते हैं। Podfile.lock स्वचालित रूप से उत्पन्न होता है और सभी स्थापित निर्भरताओं के सटीक संस्करणों को लॉक करता है। Podfile.lock को Git में रखा जाना चाहिए — यह सुनिश्चित करता है कि टीम के सभी सदस्य समान संस्करणों का उपयोग करें।
प्रोजेक्ट फ़ोल्डर से टर्मिनल में pod deintegrate चलाएँ — CocoaPods .xcworkspace, कॉन्फ़िगरेशन फ़ाइलें और बिल्ड सेटिंग्स हटा देगा। फिर Xcode में .xcodeproj खोलें, File → Add Package Dependencies पर जाएँ और आवश्यक पैकेज जोड़ें। SPM Apple का अंतर्निर्मित समाधान है जिसमें अतिरिक्त स्थापना की आवश्यकता नहीं है।
हाँ, CocoaPods और SPM एक ही प्रोजेक्ट में सह-अस्तित्व में रह सकते हैं। CocoaPods .xcworkspace के माध्यम से निर्भरताओं के हिस्से का प्रबंधन करता है, जबकि SPM Xcode में Package Dependencies को संभालता है। हालांकि, ट्रांज़िटिव निर्भरता विरोध संभव है: यदि दोनों सिस्टम एक ही लाइब्रेरी के विभिन्न संस्करणों को शामिल करने का प्रयास करते हैं, तो बिल्ड विफल हो जाएगा। सभी निर्भरताओं के लिए एक प्रबंधक का उपयोग करने की अनुशंसा की जाती है।
लाइब्रेरी का वर्णन करने वाली .podspec फ़ाइल बनाएँ। स्थानीय सत्यापन के लिए pod spec lint चलाएँ। pod trunk register email name के माध्यम से पंजीकरण करें। pod trunk push YourLib.podspec के माध्यम से spec प्रकाशित करें। CocoaPods स्वचालित रूप से आपकी लाइब्रेरी को केंद्रीय Specs रजिस्ट्री में जोड़ देगा — प्रकाशन के बाद, यह pod 'YourLib' के माध्यम से सभी डेवलपर्स के लिए उपलब्ध होगी।
सारांश
pod trunk push के माध्यम से रजिस्ट्री में लाइब्रेरी प्रकाशित करने के लिए विशिष्टता फ़ाइलgem install cocoapods के माध्यम से, सेटअप pod init और pod install के माध्यम सेpod install, कैश सफाई और फ्रेमवर्क कॉन्फ़िगरेशन से हल होती हैंहम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।