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 pod لائبریریوں کی مرکزی اشاعت کے لیے 2015 میں شروع کیا گیا ایک سرور انفراسٹرکچر ہے۔ Trunk سے پہلے، ہر pod Git ریپوزٹری کے ذریعے تقسیم کیا جاتا تھا: ڈویلپر کو ایک عوامی ریپوزٹری بنانی ہوتی تھی، podspec فائل شامل کرنی ہوتی تھی اور مرکزی ریپوزٹری CocoaPods/Specs میں Pull Request بھیجنی ہوتی تھی۔ اس طریقہ کار میں دستی نگرانی درکار تھی اور اپ ڈیٹس کی اشاعت میں تاخیر ہوتی تھی۔
Trunk نے اشاعت، اپ ڈیٹ اور pod کے انتظام کے لیے ایک متحد API فراہم کرکے ان مسائل کو حل کیا۔ سروس چار اہم اجزاء پر مشتمل ہے:
Trunk کا فن تعمیر PostgreSQL ڈیٹا بیس کے ساتھ Ruby on Rails اسٹیک پر بنایا گیا ہے۔ سروس تمام کارروائیوں کے لیے JSON فارمیٹ کے ساتھ HTTP API استعمال کرتی ہے، اور CLI کلائنٹ pod trunk CocoaPods تقسیم کا حصہ ہے، جو مرکزی cocoapods جیم کے ساتھ انسٹال ہوتا ہے۔
آج تک، 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 کے اشاعت کے حقوق منتقل کرنے کے لیے، کمانڈ استعمال کریں:
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 5–15 منٹ میں CocoaPods تلاش میں ظاہر ہو جاتا ہے۔ نایاب صورتوں میں، انڈیکسنگ میں ایک گھنٹہ لگ سکتا ہے۔ تاہم، pod Trunk سے کامیاب جواب ملنے کے فوراً بعد 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں