CocoaPods Trunk হলো CocoaPods ইকোসিস্টেমের একটি সার্ভার-সাইড সেবা যা pod-লাইব্রেরি প্রকাশ, হোস্টিং এবং পরিচালনার জন্য ডিজাইন করা হয়েছে। Trunk GitHub রিপোজিটরি এবং ফর্কের মাধ্যমে প্রকাশের পুরনো পদ্ধতি প্রতিস্থাপন করেছে, যার ফলে প্রমাণীকরণ, সেশন ব্যবস্থাপনা, ভার্সনিং এবং প্রকাশের আগে বৈধতা সহ একটি কেন্দ্রীভূত পরিকাঠামো প্রদান করেছে। iOS এবং macOS ডেভেলপাররা পাবলিক রেজিস্ট্রিতে লাইব্রেরি পাঠাতে pod trunk push ব্যবহার করে।
মূল বিষয়
pod trunk register এর মাধ্যমে এককালীন প্রমাণীকরণpod trunk push কমান্ড বৈধতা, লিন্টিং এবং রেজিস্ট্রিতে আপলোডের মধ্য দিয়ে যায়pod trunk me, pod trunk add-owner, pod trunk deprecateCocoaPods Trunk হলো ২০১৫ সালে 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 জেমের সাথে ইনস্টল হয়।
আজ পর্যন্ত, Trunk-এর মাধ্যমে ১০০,০০০-এরও বেশি pod প্রকাশিত হয়েছে, মোট ডাউনলোড ৫০ বিলিয়ন ছাড়িয়েছে। সেবাটি প্রতিদিন বিশ্বজুড়ে ডেভেলপারদের কাছ থেকে হাজার হাজার প্রকাশ এবং আপডেট অনুরোধ প্রক্রিয়া করে।
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.
কারণ: সেশন টোকেন অনুপস্থিত বা মেয়াদোত্তীর্ণ। টোকেনগুলির সীমিত বৈধতা সময়কাল রয়েছে (ডিফল্টরূপে কার্যকলাপ ছাড়া ৩০ দিন)।
সমাধান: পুনরায় 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 সার্চে ৫-১৫ মিনিটের মধ্যে উপস্থিত হয়। বিরল ক্ষেত্রে, ইনডেক্সিং এক ঘন্টা পর্যন্ত সময় নিতে পারে। তবে, 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন