CocoaPods Trunk CocoaPods पारिस्थितिकी तंत्र की एक सर्वर-साइड सेवा है जो pod लाइब्रेरी प्रकाशित करने, होस्ट करने और प्रबंधित करने के लिए डिज़ाइन की गई है। Trunk ने GitHub रिपॉजिटरी और forks के माध्यम से प्रकाशन की पुरानी प्रणाली को बदल दिया, जिससे प्रमाणीकरण, सत्र प्रबंधन, वर्जनिंग और प्रकाशन से पहले सत्यापन के साथ एक केंद्रीकृत बुनियादी ढाँचा प्रदान किया गया। iOS और macOS डेवलपर सार्वजनिक रजिस्ट्री में लाइब्रेरी भेजने के लिए pod trunk push का उपयोग करते हैं।
मुख्य बातें
pod trunk register के माध्यम से एक बार का प्रमाणीकरणpod trunk push कमांड सत्यापन, लिंटिंग और रजिस्ट्री में अपलोड से गुज़रता हैpod trunk me, pod trunk add-owner, pod trunk deprecateCocoaPods Trunk 2015 में pod लाइब्रेरी के केंद्रीकृत प्रकाशन के लिए लॉन्च किया गया एक सर्वर बुनियादी ढाँचा है। Trunk से पहले, प्रत्येक pod Git रिपॉजिटरी के माध्यम से वितरित किया जाता था: डेवलपर को एक सार्वजनिक रिपॉजिटरी बनानी होती थी, podspec फ़ाइल जोड़नी होती थी और केंद्रीय रिपॉजिटरी CocoaPods/Specs में Pull Request भेजना होता था। इस दृष्टिकोण में मैन्युअल मॉडरेशन की आवश्यकता थी और अपडेट प्रकाशित करने में देरी होती थी।
Trunk ने प्रकाशन, अद्यतन और pod प्रबंधन के लिए एक एकीकृत API प्रदान करके इन समस्याओं को हल किया। सेवा में चार प्रमुख घटक शामिल हैं:
Trunk की आर्किटेक्चर PostgreSQL डेटाबेस के साथ Ruby on Rails स्टैक पर बनाई गई है। सेवा सभी संचालन के लिए JSON प्रारूप के साथ HTTP API का उपयोग करती है, और CLI क्लाइंट pod trunk CocoaPods वितरण का हिस्सा है, जो मुख्य cocoapods gem के साथ स्थापित होता है।
आज तक, Trunk के माध्यम से 100,000 से अधिक pod प्रकाशित हो चुके हैं, कुल डाउनलोड 50 बिलियन से अधिक हैं। सेवा प्रतिदिन दुनिया भर के डेवलपर्स से हजारों प्रकाशन और अद्यतन अनुरोधों को संसाधित करती है।
pod प्रकाशित करने से पहले, आपको Trunk में पंजीकरण करना होगा। प्रक्रिया में एक ही चरण है — pod trunk register कमांड:
pod trunk register your@email.com 'Your Name' --description='MacBook Pro, iOS विकास'कमांड चलाने के बाद, निर्दिष्ट ईमेल पर एक पुष्टिकरण लिंक भेजा जाता है। लिंक पर क्लिक करने से खाता सक्रिय हो जाता है और एक सत्र टोकन बनता है जो सिस्टम कीचेन (macOS पर Keychain, Linux पर gnome-keyring या समकक्ष) में संग्रहीत होता है। टोकन स्वचालित रूप से सभी बाद के pod trunk संचालन में उपयोग होता है।
--description पैरामीटर वैकल्पिक है लेकिन अनुशंसित है — यह pod trunk me के माध्यम से सक्रिय सत्र देखते समय सत्र की पहचान करने में मदद करता है। यदि आप कई मशीनों (वर्कस्टेशन, CI सर्वर) से काम करते हैं, तो विवरण एक सत्र को दूसरे से अलग करने में मदद करता है।
प्रमाणीकरण स्थिति जाँचने के लिए, कमांड का उपयोग करें:
pod trunk meआउटपुट ईमेल, नाम, आपकी pod सूची (यदि आपने प्रकाशित किया है) और सक्रिय सत्र दिखाता है। परिणाम का उदाहरण:
- 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 पर्यावरण चर के माध्यम से पारित टोकन के साथ किया जाता है। टोकन कमांड से प्राप्त किया जा सकता है:
pod trunk me --token-onlyयह टोकन CI सेटिंग्स में एक गुप्त चर के रूप में संग्रहीत किया जाता है, और बार-बार पंजीकरण के बिना प्रकाशन चरण में उपयोग किया जाता है। GitHub Actions के लिए उदाहरण:
env:
COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}महत्वपूर्ण: टोकन खाते से जुड़े pod के प्रबंधन के लिए पूर्ण पहुँच प्रदान करता है। इसे कभी भी सार्वजनिक रिपॉजिटरी में प्रकाशित न करें या तीसरे पक्ष के साथ साझा न करें। यदि समझौता होता है, तो टोकन को pod trunk remove-session के माध्यम से या CocoaPods वेबसाइट नियंत्रण कक्ष के माध्यम से सभी सत्र हटाकर रद्द किया जा सकता है।
podspec फ़ाइल (.podspec या .podspec.json) लाइब्रेरी का मैनिफेस्ट है जिसमें मेटाडेटा, निर्भरताएँ, प्लेटफ़ॉर्म जानकारी और स्रोत कोड विवरण होते हैं। Trunk इस फ़ाइल का उपयोग सत्यापन और pod पंजीकरण के लिए करता है। प्रकाशन के लिए एक न्यूनतम podspec इस तरह दिखता है:
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'
endpodspec के प्रमुख फ़ील्ड:
MAJOR.MINOR.PATCH प्रारूप में सिमैंटिक संस्करण। Trunk एक ही संस्करण का पुनः प्रकाशन स्वीकार नहीं करता — संख्या बढ़ानी होगी।MIT, Apache-2.0, BSD या अन्य ओपन-सोर्स लाइसेंस निर्दिष्ट करने की अनुशंसा की जाती है।प्रकाशन से पहले, लिंटर से podspec की शुद्धता जाँचें:
pod lib lint MyLibrary.podspecलिंटर सिंटैक्स, आवश्यक फ़ील्ड, फ़ाइल पथों की शुद्धता और निर्भरता समाधान की जाँच करता है। यदि लिंटिंग प्रक्रिया में निजी स्रोतों का उपयोग किया जाता है, तो --sources फ़्लैग जोड़ा जाता है। नेटवर्क डाउनलोड छोड़ने के लिए (केवल स्थानीय जाँच), --local-only फ़्लैग का उपयोग करें।
pod प्रकाशित करने का मुख्य कमांड pod trunk push है। यह podspec फ़ाइल Trunk सर्वर को भेजता है, जहाँ यह पूर्ण सत्यापन से गुज़रती है और सार्वजनिक रजिस्ट्री में पंजीकृत होती है। सिंटैक्स:
pod trunk push MyLibrary.podspec--allow-warnings फ़्लैग चेतावनियों के साथ प्रकाशन की अनुमति देता है। डिफ़ॉल्ट रूप से, कोई भी चेतावनी प्रकाशन को अवरुद्ध करती है। यदि आपकी लाइब्रेरी में ज्ञात चेतावनियाँ हैं जो कार्यक्षमता को प्रभावित नहीं करतीं, तो आप इस फ़्लैग का उपयोग कर सकते हैं। महत्वपूर्ण: त्रुटियाँ हमेशा प्रकाशन को अवरुद्ध करती हैं, भले ही फ़्लैग कुछ भी हों।
--synchronous फ़्लैग अनुरोध को सिंक्रोनस बनाता है — टर्मिनल सर्वर-साइड सत्यापन पूरा होने की प्रतीक्षा करता है। डिफ़ॉल्ट रूप से, कमांड सबमिशन के तुरंत बाद नियंत्रण वापस कर देता है, और सर्वर प्रकाशन को एसिंक्रोनस रूप से संसाधित करता है। सिंक्रोनस मोड CI/CD में उपयोगी है जब अगला पाइपलाइन चरण सफल प्रकाशन पर निर्भर करता है।
--skip-import-validation फ़्लैग टेस्ट प्रोजेक्ट में लाइब्रेरी आयात की जाँच को छोड़ देता है। यह प्रकाशन को गति देता है लेकिन यह गारंटी नहीं देता कि लाइब्रेरी वास्तव में कंपाइल होती है। इस फ़्लैग का उपयोग केवल तभी करें जब आप बिल्ड शुद्धता के प्रति आश्वस्त हों।
सामान्य विकल्पों के साथ प्रकाशन का उदाहरण:
pod trunk push MyLibrary.podspec \
--allow-warnings \
--synchronous \
--skip-import-validationसफल प्रकाशन के बाद, Trunk विवरण के साथ JSON लौटाता है:
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 के प्रशासन के लिए कई कमांड प्रदान करता है:
किसी अन्य डेवलपर को प्रकाशन अधिकार हस्तांतरित करने के लिए, कमांड का उपयोग करें:
pod trunk add-owner MyLibrary developer@email.comनिष्पादन के बाद, नए मालिक को pod प्रबंधन तक पूर्ण पहुँच मिलती है: नए संस्करण प्रकाशित करना, अन्य मालिकों को जोड़ना और हटाना, pod को अप्रचलित के रूप में चिह्नित करना। कोई भी पंजीकृत Trunk उपयोगकर्ता मालिक हो सकता है — पूर्व पंजीकरण अनिवार्य है।
यदि कोई डेवलपर प्रोजेक्ट छोड़ चुका है या उसकी pod तक पहुँच नहीं होनी चाहिए:
pod trunk remove-owner MyLibrary developer@email.comकेवल वर्तमान मालिक ही किसी मालिक को हटा सकता है। किसी pod के अंतिम मालिक को नहीं हटाया जा सकता — पहले एक नया मालिक जोड़ना होगा। यह pod को बिना मालिक के और परित्यक्त होने से रोकता है।
यदि लाइब्रेरी अब समर्थित नहीं है, तो आप इसे अप्रचलित (deprecated) के रूप में चिह्नित कर सकते हैं। यह pod को रजिस्ट्री से नहीं हटाता, लेकिन स्थापना के दौरान उपयोगकर्ताओं के लिए एक चेतावनी जोड़ता है:
pod trunk deprecate MyLibraryवैकल्पिक रूप से, आप एक प्रतिस्थापन pod निर्दिष्ट कर सकते हैं:
pod trunk deprecate MyLibrary --in-favor-of=NewLibraryअप्रचलित pod स्थापित करते समय, CocoaPods टर्मिनल में एक चेतावनी प्रदर्शित करता है और निर्दिष्ट प्रतिस्थापन पर स्विच करने की अनुशंसा करता है। मौजूदा प्रोजेक्ट बिल्ड को तोड़े बिना लाइब्रेरी समर्थन समाप्त करने का यह सही तरीका है।
pod जानकारी pod trunk info कमांड के माध्यम से उपलब्ध है:
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 में गलती की है, तो सुधार के साथ अगला संस्करण प्रकाशित करें।
लक्षण: [!] 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 से प्रयास करें।
लक्षण: [!] You do not have permission to push to MyLibrary.
कारण: आप pod के मालिक नहीं हैं। ऐसा तब होता है जब किसी ने पहले से उस नाम से pod पंजीकृत कर लिया हो।
समाधान: वर्तमान pod मालिक से संपर्क करें (pod trunk info MyLibrary के माध्यम से पता करें) और उन्हें pod trunk add-owner के माध्यम से आपको जोड़ने के लिए कहें। यदि pod नाम लिया गया है, तो वैकल्पिक नाम पर विचार करें।
अक्सर पूछे जाने वाले प्रश्न
पुरानी विधि में CocoaPods/Specs रिपॉजिटरी में मैन्युअल Pull Request की आवश्यकता थी। Trunk प्रक्रिया को स्वचालित करता है: आप एक ही pod trunk push कमांड चलाते हैं, और सर्वर podspec को सत्यापित करता है, उसे रजिस्ट्री में जोड़ता है और खोज सूचकांक अपडेट करता है। Trunk ने पहुँच प्रबंधन (एकाधिक मालिक), सत्र टोकन और केंद्रीकृत मेटाडेटा भंडारण भी जोड़ा।
यह संभव नहीं है — Trunk निर्भरता अखंडता बनाए रखने के लिए प्रकाशित संस्करणों को हटाने पर रोक लगाता है। यदि किसी संस्करण में गंभीर बग है, तो सुधार के साथ एक नया संस्करण प्रकाशित करें और समस्या वाले संस्करण को pod trunk deprecate के माध्यम से अप्रचलित के रूप में चिह्नित करें। पूर्ण हटाना केवल असाधारण मामलों में CocoaPods प्रशासकों के लिए उपलब्ध है।
नहीं, s.author फ़ील्ड में एक ईमेल होना चाहिए। Trunk इसका उपयोग pod को मालिक के खाते से जोड़ने के लिए करता है। पता pod trunk register के दौरान उपयोग किए गए ईमेल से मेल खाना चाहिए। यदि podspec में ईमेल अलग है, तो प्रकाशन अस्वीकार कर दिया जाएगा।
आमतौर पर, pod CocoaPods खोज में 5–15 मिनट में दिखाई देता है। दुर्लभ मामलों में, इंडेक्सिंग में एक घंटे तक लग सकता है। हालाँकि, Trunk से सफल प्रतिक्रिया के तुरंत बाद pod Podfile के माध्यम से स्थापना के लिए उपलब्ध होता है — आपको बस Podfile में सटीक संस्करण या सीमा निर्दिष्ट करनी होती है।
यदि आपके पास सक्रिय सत्र है (टोकन समाप्त नहीं हुआ), तो pod trunk register new@email.com के माध्यम से अपना ईमेल बदलें — नया पंजीकरण pod को नए पते से जोड़ देगा। यदि सत्र समाप्त हो गया है, तो GitHub Issues के माध्यम से CocoaPods समर्थन से संपर्क करें। pod स्वामित्व का प्रमाण pod की Git रिपॉजिटरी में कमिट बनाने की क्षमता हो सकती है।
सारांश
pod trunk register के माध्यम से एक बार किया जाता हैpod trunk push कमांड सर्वर-साइड सत्यापन से गुज़रता है; एक बार प्रकाशित होने पर, संस्करण हटाया नहीं जा सकताpod trunk add-owner और pod trunk remove-owner के माध्यम से जोड़े और हटाए जाते हैंCOCOAPODS_TRUNK_TOKEN पर्यावरण चर के माध्यम से प्रमाणीकरणहम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें