CocoaPods Trunk: यह क्या है, Trunk के माध्यम से लाइब्रेरी प्रकाशित करना

लेखक: IT Sectr प्रकाशित: 2026-02-13 पढ़ने का समय: 9 मिनट

CocoaPods Trunk CocoaPods पारिस्थितिकी तंत्र की एक सर्वर-साइड सेवा है जो pod लाइब्रेरी प्रकाशित करने, होस्ट करने और प्रबंधित करने के लिए डिज़ाइन की गई है। Trunk ने GitHub रिपॉजिटरी और forks के माध्यम से प्रकाशन की पुरानी प्रणाली को बदल दिया, जिससे प्रमाणीकरण, सत्र प्रबंधन, वर्जनिंग और प्रकाशन से पहले सत्यापन के साथ एक केंद्रीकृत बुनियादी ढाँचा प्रदान किया गया। iOS और macOS डेवलपर सार्वजनिक रजिस्ट्री में लाइब्रेरी भेजने के लिए pod trunk push का उपयोग करते हैं।

मुख्य बातें

  • CocoaPods Trunk — pod लाइब्रेरी प्रकाशित करने के लिए केंद्रीय सेवा, Git रिपॉजिटरी बाइंडिंग को बदल दिया
  • पंजीकरण — ईमेल पुष्टिकरण के साथ pod trunk register के माध्यम से एक बार का प्रमाणीकरण
  • प्रकाशनpod trunk push कमांड सत्यापन, लिंटिंग और रजिस्ट्री में अपलोड से गुज़रता है
  • प्रबंधन — pod प्रशासन के लिए pod trunk me, pod trunk add-owner, pod trunk deprecate
  • सुरक्षा — सत्र टोकन, API कुंजियाँ, प्रकाशन से पहले podspec सत्यापन

CocoaPods Trunk क्या है?

CocoaPods Trunk 2015 में pod लाइब्रेरी के केंद्रीकृत प्रकाशन के लिए लॉन्च किया गया एक सर्वर बुनियादी ढाँचा है। Trunk से पहले, प्रत्येक pod Git रिपॉजिटरी के माध्यम से वितरित किया जाता था: डेवलपर को एक सार्वजनिक रिपॉजिटरी बनानी होती थी, podspec फ़ाइल जोड़नी होती थी और केंद्रीय रिपॉजिटरी CocoaPods/Specs में Pull Request भेजना होता था। इस दृष्टिकोण में मैन्युअल मॉडरेशन की आवश्यकता थी और अपडेट प्रकाशित करने में देरी होती थी।

Trunk ने प्रकाशन, अद्यतन और pod प्रबंधन के लिए एक एकीकृत API प्रदान करके इन समस्याओं को हल किया। सेवा में चार प्रमुख घटक शामिल हैं:

  • प्रमाणीकरण — ईमेल पुष्टिकरण के साथ पंजीकरण और सत्र टोकन प्रबंधन। प्रत्येक डेवलपर को अपने खाते और उपकरणों से जुड़ा एक अद्वितीय टोकन मिलता है।
  • सत्यापन — प्रकाशन से पहले podspec की स्वचालित जाँच, जिसमें सिंटैक्स विश्लेषण, निर्भरता लिंटिंग और प्लेटफ़ॉर्म संगतता जाँच शामिल है।
  • होस्टिंग — CocoaPods सर्वर पर pod मेटाडेटा और संस्करणों का भंडारण। स्रोत कोड डेवलपर की Git रिपॉजिटरी में ही रहता है, Trunk केवल podspec फ़ाइलें और लिंक संग्रहीत करता है।
  • पहुँच प्रबंधन — pod मालिकों को जोड़ने और हटाने, प्रकाशन अधिकार स्थानांतरित करने, pod को अप्रचलित के रूप में चिह्नित करने की क्षमता।

Trunk की आर्किटेक्चर PostgreSQL डेटाबेस के साथ Ruby on Rails स्टैक पर बनाई गई है। सेवा सभी संचालन के लिए JSON प्रारूप के साथ HTTP API का उपयोग करती है, और CLI क्लाइंट pod trunk CocoaPods वितरण का हिस्सा है, जो मुख्य cocoapods gem के साथ स्थापित होता है।

आज तक, Trunk के माध्यम से 100,000 से अधिक pod प्रकाशित हो चुके हैं, कुल डाउनलोड 50 बिलियन से अधिक हैं। सेवा प्रतिदिन दुनिया भर के डेवलपर्स से हजारों प्रकाशन और अद्यतन अनुरोधों को संसाधित करती है।

पंजीकरण और प्रमाणीकरण

pod प्रकाशित करने से पहले, आपको Trunk में पंजीकरण करना होगा। प्रक्रिया में एक ही चरण है — pod trunk register कमांड:

bash
pod trunk register your@email.com 'Your Name' --description='MacBook Pro, iOS विकास'

कमांड चलाने के बाद, निर्दिष्ट ईमेल पर एक पुष्टिकरण लिंक भेजा जाता है। लिंक पर क्लिक करने से खाता सक्रिय हो जाता है और एक सत्र टोकन बनता है जो सिस्टम कीचेन (macOS पर Keychain, Linux पर gnome-keyring या समकक्ष) में संग्रहीत होता है। टोकन स्वचालित रूप से सभी बाद के pod trunk संचालन में उपयोग होता है।

--description पैरामीटर वैकल्पिक है लेकिन अनुशंसित है — यह pod trunk me के माध्यम से सक्रिय सत्र देखते समय सत्र की पहचान करने में मदद करता है। यदि आप कई मशीनों (वर्कस्टेशन, CI सर्वर) से काम करते हैं, तो विवरण एक सत्र को दूसरे से अलग करने में मदद करता है।

प्रमाणीकरण स्थिति जाँचने के लिए, कमांड का उपयोग करें:

bash
pod trunk me

आउटपुट ईमेल, नाम, आपकी pod सूची (यदि आपने प्रकाशित किया है) और सक्रिय सत्र दिखाता है। परिणाम का उदाहरण:

bash
  - Name: Your Name
  - Email: your@email.com
  - Since: 2024-03-15 10:30 UTC
  - Pods:
    - MyLibrary
    - AnotherPod
  - Sessions:
    - 2024-03-15 10:30 UTC - MacBook Pro, iOS विकास

CI सर्वर (GitHub Actions, GitLab CI, Jenkins) पर, प्रमाणीकरण COCOAPODS_TRUNK_TOKEN पर्यावरण चर के माध्यम से पारित टोकन के साथ किया जाता है। टोकन कमांड से प्राप्त किया जा सकता है:

bash
pod trunk me --token-only

यह टोकन CI सेटिंग्स में एक गुप्त चर के रूप में संग्रहीत किया जाता है, और बार-बार पंजीकरण के बिना प्रकाशन चरण में उपयोग किया जाता है। GitHub Actions के लिए उदाहरण:

bash
env:
  COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}

महत्वपूर्ण: टोकन खाते से जुड़े pod के प्रबंधन के लिए पूर्ण पहुँच प्रदान करता है। इसे कभी भी सार्वजनिक रिपॉजिटरी में प्रकाशित न करें या तीसरे पक्ष के साथ साझा न करें। यदि समझौता होता है, तो टोकन को pod trunk remove-session के माध्यम से या CocoaPods वेबसाइट नियंत्रण कक्ष के माध्यम से सभी सत्र हटाकर रद्द किया जा सकता है।

Podspec तैयार करना

podspec फ़ाइल (.podspec या .podspec.json) लाइब्रेरी का मैनिफेस्ट है जिसमें मेटाडेटा, निर्भरताएँ, प्लेटफ़ॉर्म जानकारी और स्रोत कोड विवरण होते हैं। Trunk इस फ़ाइल का उपयोग सत्यापन और pod पंजीकरण के लिए करता है। प्रकाशन के लिए एक न्यूनतम podspec इस तरह दिखता है:

bash
Pod::Spec.new do |s|
  s.name         = 'MyLibrary'
  s.version      = '0.1.0'
  s.summary      = 'लाइब्रेरी का संक्षिप्त विवरण'
  s.description  = 'क्षमताओं के स्पष्टीकरण के साथ विस्तृत विवरण'
  s.homepage     = 'https://github.com/username/MyLibrary'
  s.license      = { :type => 'MIT', :file => 'LICENSE' }
  s.author       = { 'Your Name' => 'your@email.com' }
  s.source       = { :git => 'https://github.com/username/MyLibrary.git', :tag => s.version.to_s }
  s.source_files = 'Sources/**/*.{swift,h,m}'
  s.platform     = :ios, '12.0'
  s.swift_version = '5.7'
end

podspec के प्रमुख फ़ील्ड:

  • name — pod का नाम, Trunk रजिस्ट्री में अद्वितीय होना चाहिए। नाम पहले आओ-पहले पाओ के आधार पर पंजीकृत होते हैं — यदि नाम लिया गया है, तो प्रकाशन अस्वीकार कर दिया जाएगा।
  • versionMAJOR.MINOR.PATCH प्रारूप में सिमैंटिक संस्करण। Trunk एक ही संस्करण का पुनः प्रकाशन स्वीकार नहीं करता — संख्या बढ़ानी होगी।
  • source — Git रिपॉजिटरी लिंक और टैग। Trunk स्रोत कोड संग्रहीत नहीं करता, इसलिए रिपॉजिटरी क्लोनिंग के लिए उपलब्ध होनी चाहिए।
  • platform — लक्ष्य प्लेटफ़ॉर्म (iOS, macOS, tvOS, watchOS) और न्यूनतम SDK संस्करण।
  • license — लाइसेंस प्रकार। MIT, Apache-2.0, BSD या अन्य ओपन-सोर्स लाइसेंस निर्दिष्ट करने की अनुशंसा की जाती है।

प्रकाशन से पहले, लिंटर से podspec की शुद्धता जाँचें:

bash
pod lib lint MyLibrary.podspec

लिंटर सिंटैक्स, आवश्यक फ़ील्ड, फ़ाइल पथों की शुद्धता और निर्भरता समाधान की जाँच करता है। यदि लिंटिंग प्रक्रिया में निजी स्रोतों का उपयोग किया जाता है, तो --sources फ़्लैग जोड़ा जाता है। नेटवर्क डाउनलोड छोड़ने के लिए (केवल स्थानीय जाँच), --local-only फ़्लैग का उपयोग करें।

pod trunk push के माध्यम से प्रकाशन

pod प्रकाशित करने का मुख्य कमांड pod trunk push है। यह podspec फ़ाइल Trunk सर्वर को भेजता है, जहाँ यह पूर्ण सत्यापन से गुज़रती है और सार्वजनिक रजिस्ट्री में पंजीकृत होती है। सिंटैक्स:

bash
pod trunk push MyLibrary.podspec

--allow-warnings फ़्लैग चेतावनियों के साथ प्रकाशन की अनुमति देता है। डिफ़ॉल्ट रूप से, कोई भी चेतावनी प्रकाशन को अवरुद्ध करती है। यदि आपकी लाइब्रेरी में ज्ञात चेतावनियाँ हैं जो कार्यक्षमता को प्रभावित नहीं करतीं, तो आप इस फ़्लैग का उपयोग कर सकते हैं। महत्वपूर्ण: त्रुटियाँ हमेशा प्रकाशन को अवरुद्ध करती हैं, भले ही फ़्लैग कुछ भी हों।

--synchronous फ़्लैग अनुरोध को सिंक्रोनस बनाता है — टर्मिनल सर्वर-साइड सत्यापन पूरा होने की प्रतीक्षा करता है। डिफ़ॉल्ट रूप से, कमांड सबमिशन के तुरंत बाद नियंत्रण वापस कर देता है, और सर्वर प्रकाशन को एसिंक्रोनस रूप से संसाधित करता है। सिंक्रोनस मोड CI/CD में उपयोगी है जब अगला पाइपलाइन चरण सफल प्रकाशन पर निर्भर करता है।

--skip-import-validation फ़्लैग टेस्ट प्रोजेक्ट में लाइब्रेरी आयात की जाँच को छोड़ देता है। यह प्रकाशन को गति देता है लेकिन यह गारंटी नहीं देता कि लाइब्रेरी वास्तव में कंपाइल होती है। इस फ़्लैग का उपयोग केवल तभी करें जब आप बिल्ड शुद्धता के प्रति आश्वस्त हों।

सामान्य विकल्पों के साथ प्रकाशन का उदाहरण:

bash
pod trunk push MyLibrary.podspec \
  --allow-warnings \
  --synchronous \
  --skip-import-validation

सफल प्रकाशन के बाद, Trunk विवरण के साथ JSON लौटाता है:

bash
  Congrats

  MyLibrary (0.1.0) successfully published

  Pod URL: https://cocoapods.org/pods/MyLibrary

लाइब्रेरी किसी भी iOS या macOS प्रोजेक्ट में Podfile के माध्यम से स्थापना के लिए उपलब्ध हो जाती है। आमतौर पर, CocoaPods खोज सूचकांक कुछ मिनटों में अपडेट हो जाता है, लेकिन दुर्लभ मामलों में इंडेक्सिंग में एक घंटे तक लग सकता है।

महत्वपूर्ण सीमा: एक बार प्रकाशित pod संस्करण हटाया नहीं जा सकता। यह उन परियोजनाओं को टूटने से रोकने के लिए है जो पहले से इस संस्करण का उपयोग कर रही हैं। यदि प्रकाशन त्रुटिपूर्ण था, तो आप सुधार के साथ अगला संस्करण प्रकाशित कर सकते हैं, लेकिन रोलबैक असंभव है। अपवाद pod trunk delete है, जो केवल CocoaPods कर्मचारियों के लिए उपलब्ध है और चरम मामलों (लाइसेंस उल्लंघन, दुर्भावनापूर्ण कोड) में उपयोग किया जाता है।

रिलीज़ और पहुँच प्रबंधन

CocoaPods Trunk प्रकाशित pod के प्रशासन के लिए कई कमांड प्रदान करता है:

मालिक जोड़ना

किसी अन्य डेवलपर को प्रकाशन अधिकार हस्तांतरित करने के लिए, कमांड का उपयोग करें:

bash
pod trunk add-owner MyLibrary developer@email.com

निष्पादन के बाद, नए मालिक को pod प्रबंधन तक पूर्ण पहुँच मिलती है: नए संस्करण प्रकाशित करना, अन्य मालिकों को जोड़ना और हटाना, pod को अप्रचलित के रूप में चिह्नित करना। कोई भी पंजीकृत Trunk उपयोगकर्ता मालिक हो सकता है — पूर्व पंजीकरण अनिवार्य है।

मालिक हटाना

यदि कोई डेवलपर प्रोजेक्ट छोड़ चुका है या उसकी pod तक पहुँच नहीं होनी चाहिए:

bash
pod trunk remove-owner MyLibrary developer@email.com

केवल वर्तमान मालिक ही किसी मालिक को हटा सकता है। किसी pod के अंतिम मालिक को नहीं हटाया जा सकता — पहले एक नया मालिक जोड़ना होगा। यह pod को बिना मालिक के और परित्यक्त होने से रोकता है।

pod को अप्रचलित के रूप में चिह्नित करना

यदि लाइब्रेरी अब समर्थित नहीं है, तो आप इसे अप्रचलित (deprecated) के रूप में चिह्नित कर सकते हैं। यह pod को रजिस्ट्री से नहीं हटाता, लेकिन स्थापना के दौरान उपयोगकर्ताओं के लिए एक चेतावनी जोड़ता है:

bash
pod trunk deprecate MyLibrary

वैकल्पिक रूप से, आप एक प्रतिस्थापन pod निर्दिष्ट कर सकते हैं:

bash
pod trunk deprecate MyLibrary --in-favor-of=NewLibrary

अप्रचलित pod स्थापित करते समय, CocoaPods टर्मिनल में एक चेतावनी प्रदर्शित करता है और निर्दिष्ट प्रतिस्थापन पर स्विच करने की अनुशंसा करता है। मौजूदा प्रोजेक्ट बिल्ड को तोड़े बिना लाइब्रेरी समर्थन समाप्त करने का यह सही तरीका है।

pod जानकारी देखना

pod जानकारी pod trunk info कमांड के माध्यम से उपलब्ध है:

bash
pod trunk info MyLibrary

कमांड सभी pod संस्करण, प्रकाशन तिथियाँ, मालिक सूची और स्थिति (सक्रिय/अप्रचलित) दिखाता है। किसी विशिष्ट संस्करण के विवरण देखने के लिए, pod spec cat MyLibrary 0.1.0 का उपयोग करें।

त्रुटियाँ और समाधान

Trunk के साथ काम करते समय, डेवलपर्स अक्सर सामान्य त्रुटियों का सामना करते हैं। आइए सबसे सामान्य त्रुटियों की समीक्षा करें:

प्रमाणीकरण त्रुटि

लक्षण: [!] Authentication failed. You need to register a session first.
कारण: सत्र टोकन गायब या समाप्त हो गया है। टोकन की सीमित वैधता अवधि होती है (डिफ़ॉल्ट रूप से बिना गतिविधि के 30 दिन)।
समाधान: pod trunk register your@email.com 'Your Name' फिर से चलाएँ। यदि आप CI का उपयोग कर रहे हैं, तो COCOAPODS_TRUNK_TOKEN पर्यावरण चर की वैधता जाँचें और यदि आवश्यक हो तो नया टोकन जनरेट करें।

संस्करण विरोध

लक्षण: [!] You have already pushed version 0.1.0 for MyLibrary.
कारण: मौजूदा संस्करण को पुनः प्रकाशित करने का प्रयास। Trunk संस्करणों को अधिलेखित करने की अनुमति नहीं देता।
समाधान: सिमैंटिक वर्जनिंग के अनुसार podspec में संस्करण बढ़ाएँ। यदि आपने podspec में गलती की है, तो सुधार के साथ अगला संस्करण प्रकाशित करें।

Podspec सत्यापन त्रुटि

लक्षण: [!] The spec did not pass validation. ERROR | [iOS] file patterns: Source files did not match any file.
कारण: source_files फ़ील्ड में स्रोत फ़ाइलों का गलत पथ।
समाधान: podspec में पथ जाँचें, सभी त्रुटियों के हल होने तक स्थानीय रूप से pod lib lint चलाएँ, फिर प्रकाशन दोहराएँ। ग्लोब पैटर्न का उपयोग करें: Classes/**/*.{h,m}, Sources/MyLibrary/**/*.swift

कनेक्शन टाइमआउट

लक्षण: [!] Connection to trunk.cocoapods.org failed. Timeout.
कारण: नेटवर्क समस्याएँ या Trunk सर्वर की अस्थायी अनुपलब्धता।
समाधान: सर्वर उपलब्धता जाँचें: curl -I https://trunk.cocoapods.org। यदि सर्वर उत्तर देता है, तो कुछ मिनटों में कमांड दोहराएँ। आपका IP अवरुद्ध हो सकता है — किसी अन्य कनेक्शन या VPN से प्रयास करें।

pod तक पहुँच नहीं

लक्षण: [!] You do not have permission to push to MyLibrary.
कारण: आप pod के मालिक नहीं हैं। ऐसा तब होता है जब किसी ने पहले से उस नाम से pod पंजीकृत कर लिया हो।
समाधान: वर्तमान pod मालिक से संपर्क करें (pod trunk info MyLibrary के माध्यम से पता करें) और उन्हें pod trunk add-owner के माध्यम से आपको जोड़ने के लिए कहें। यदि pod नाम लिया गया है, तो वैकल्पिक नाम पर विचार करें।

अक्सर पूछे जाने वाले प्रश्न

CocoaPods Trunk और Specs रिपॉजिटरी के माध्यम से पुरानी प्रकाशन विधि में क्या अंतर है?

पुरानी विधि में CocoaPods/Specs रिपॉजिटरी में मैन्युअल Pull Request की आवश्यकता थी। Trunk प्रक्रिया को स्वचालित करता है: आप एक ही pod trunk push कमांड चलाते हैं, और सर्वर podspec को सत्यापित करता है, उसे रजिस्ट्री में जोड़ता है और खोज सूचकांक अपडेट करता है। Trunk ने पहुँच प्रबंधन (एकाधिक मालिक), सत्र टोकन और केंद्रीकृत मेटाडेटा भंडारण भी जोड़ा।

प्रकाशित pod संस्करण को कैसे रद्द करूँ?

यह संभव नहीं है — Trunk निर्भरता अखंडता बनाए रखने के लिए प्रकाशित संस्करणों को हटाने पर रोक लगाता है। यदि किसी संस्करण में गंभीर बग है, तो सुधार के साथ एक नया संस्करण प्रकाशित करें और समस्या वाले संस्करण को pod trunk deprecate के माध्यम से अप्रचलित के रूप में चिह्नित करें। पूर्ण हटाना केवल असाधारण मामलों में CocoaPods प्रशासकों के लिए उपलब्ध है।

क्या मैं podspec में ईमेल निर्दिष्ट किए बिना pod प्रकाशित कर सकता हूँ?

नहीं, s.author फ़ील्ड में एक ईमेल होना चाहिए। Trunk इसका उपयोग pod को मालिक के खाते से जोड़ने के लिए करता है। पता pod trunk register के दौरान उपयोग किए गए ईमेल से मेल खाना चाहिए। यदि podspec में ईमेल अलग है, तो प्रकाशन अस्वीकार कर दिया जाएगा।

प्रकाशन के बाद pod इंडेक्सिंग में कितना समय लगता है?

आमतौर पर, pod CocoaPods खोज में 5–15 मिनट में दिखाई देता है। दुर्लभ मामलों में, इंडेक्सिंग में एक घंटे तक लग सकता है। हालाँकि, Trunk से सफल प्रतिक्रिया के तुरंत बाद pod Podfile के माध्यम से स्थापना के लिए उपलब्ध होता है — आपको बस Podfile में सटीक संस्करण या सीमा निर्दिष्ट करनी होती है।

यदि मैंने पंजीकरण के दौरान उपयोग किए गए ईमेल तक पहुँच खो दी तो क्या करूँ?

यदि आपके पास सक्रिय सत्र है (टोकन समाप्त नहीं हुआ), तो pod trunk register new@email.com के माध्यम से अपना ईमेल बदलें — नया पंजीकरण pod को नए पते से जोड़ देगा। यदि सत्र समाप्त हो गया है, तो GitHub Issues के माध्यम से CocoaPods समर्थन से संपर्क करें। pod स्वामित्व का प्रमाण pod की Git रिपॉजिटरी में कमिट बनाने की क्षमता हो सकती है।

सारांश

  • CocoaPods Trunk — pod लाइब्रेरी प्रकाशित और प्रबंधित करने के लिए एक केंद्रीकृत सर्वर सेवा, जिसने मैन्युअल Specs रिपॉजिटरी प्रक्रिया को बदल दिया
  • पंजीकरण — ईमेल पुष्टिकरण और स्वचालित सत्र टोकन भंडारण के साथ pod trunk register के माध्यम से एक बार किया जाता है
  • Podspec — Ruby DSL या JSON प्रारूप में लाइब्रेरी मैनिफेस्ट जिसमें मेटाडेटा, निर्भरताएँ और प्लेटफ़ॉर्म सेटिंग्स शामिल हैं
  • प्रकाशनpod trunk push कमांड सर्वर-साइड सत्यापन से गुज़रता है; एक बार प्रकाशित होने पर, संस्करण हटाया नहीं जा सकता
  • पहुँच प्रबंधन — मालिक pod trunk add-owner और pod trunk remove-owner के माध्यम से जोड़े और हटाए जाते हैं
  • CI/CD एकीकरण — पाइपलाइनों में स्वचालित प्रकाशन के लिए COCOAPODS_TRUNK_TOKEN पर्यावरण चर के माध्यम से प्रमाणीकरण
  • सुरक्षा — सीमित जीवनकाल वाले सत्र टोकन, संस्करण हटाने की असंभवता, पुनः प्रकाशन से सुरक्षा

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें