CocoaPods: کلیدی تصورات، iOS کے لیے انحصار مینیجر

مصنف: IT Sectr اشاعت: 2026-02-12 مطالعے کا وقت: 10 منٹ

CocoaPods iOS، macOS، watchOS اور tvOS منصوبوں کے لیے ایک اوپن سورس انحصار مینیجر ہے۔ CocoaPods Ruby زبان میں بنایا گیا ہے اور 100,000 سے زیادہ لائبریریوں پر مشتمل ایک تصریحی رجسٹری (Specs) استعمال کرتا ہے۔ انضمام Podfile فائل کے ذریعے ہوتا ہے، جو منصوبے کے تمام انحصارات کو بیان کرتی ہے۔ تنصیب کا نتیجہ .xcworkspace ہے، جو اہم منصوبے اور تمام منسلک ماڈیولز کو یکجا کرتا ہے۔ CocoaPods iOS ڈیولپمنٹ میں سب سے مقبول انحصار مینیجر بنا ہوا ہے: Stack Overflow Survey (2025) کے مطابق، 34% iOS ڈیولپر اسے استعمال کرتے ہیں۔

اہم نکات

  • CocoaPods — 100,000+ لائبریریوں اور 10 بلین ڈاؤن لوڈز کے ساتھ iOS کے لیے سب سے مقبول انحصار مینیجر
  • Podfile — ایک Ruby کنفیگریشن فائل جو انحصارات، ان کے ورژن اور انضمام کے پیرامیٹرز کی فہرست دیتی ہے
  • Podspec — ایک لائبریری تصریحی فائل جس میں میٹا ڈیٹا، سورس کوڈ اور پلیٹ فارم کی ضروریات ہوتی ہیں
  • تنصیب pod install کے ذریعے .xcworkspace تخلیق کرتی ہے — Xcode میں صرف یہی کھولنا چاہیے
  • Podfile.lock انحصارات کے عین ورژن مقفل کرتا ہے، بلڈ تولیدی صلاحیت کو یقینی بناتا ہے
  • CocoaPods بمقابلہ SPM: CocoaPods انضمام پر زیادہ کنٹرول دیتا ہے، SPM Xcode میں شامل ہے اور تیسرے فریق کے ٹولز کی ضرورت نہیں

CocoaPods کیا ہے؟

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+ (تمام Macs پر پہلے سے انسٹال) اور Xcode with Command Line Tools ضروری ہے۔ اعدادوشمار: 2025 میں، CocoaPods نے 10 بلین سے زیادہ pod ڈاؤن لوڈز پراسیس کیے، اور اوسط iOS منصوبے میں CocoaPods کے ذریعے 15 سے 40 انحصارات ہوتے ہیں۔

CocoaPods کیسے کام کرتا ہے

CocoaPods ہر لائبریری کو علیحدہ Git ریپوزٹری کے طور پر ڈاؤن لوڈ کرتا ہے، اس کی .podspec تصریح کی تصدیق کرتا ہے اور اسے ایک جامد فریم ورک یا متحرک لائبریری میں کمپائل کرتا ہے۔ Pods دوسرے pods پر منحصر ہو سکتے ہیں — CocoaPods ایک انحصار گراف بناتا ہے اور ورژن تنازعات حل کرتا ہے۔ اگر دو لائبریریاں ایک ہی انحصار کے مختلف ورژن کی ضرورت ہوتی ہیں، تو CocoaPods ایک مطابقت پذیر ورژن تلاش کرنے کی کوشش کرتا ہے یا خرابی کی اطلاع دیتا ہے۔ تمام انحصارات اور ان کے ورژن Podfile.lock فائل میں ریکارڈ کیے جاتے ہیں، جسے ورژن کنٹرول میں شامل کیا جانا چاہیے۔

دستی انضمام پر CocoaPods کے فوائد: خودکار انحصار انتظام، مرکزی لائبریری رجسٹری، ذیلی تصریحات (subspecs) کے لیے معاونت، نجی ریپوزٹریاں بنانے کی صلاحیت اور معنوی ورژننگ۔ ڈیولپمنٹ ٹیم کے لیے، CocoaPods یقینی بناتا ہے کہ تمام اراکین ایک جیسے لائبریری ورژن استعمال کریں — Podfile.lock کسی بھی مشین پر بلڈ تولیدی صلاحیت کو یقینی بناتا ہے۔

Podfile: ساخت، نحو اور مثالیں

Podfile ایک Ruby کنفیگریشن فائل ہے جو Xcode منصوبے کے انحصارات کی وضاحت کرتی ہے۔ Podfile .xcodeproj کے ساتھ منصوبے کی جڑ میں رکھی جاتی ہے۔ CocoaPods نحو Ruby DSL (ڈومین مخصوص زبان) پر مبنی ہے، جو متغیرات، شرائط اور لوپس کے استعمال کی اجازت دیتا ہے۔ ایک کم سے کم Podfile میں ایک پلیٹ فارم اور کم از کم ایک انحصار ہوتا ہے۔

ruby
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'۔

ruby
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
end

use_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 .podspec ایکسٹینشن والی Ruby فائل ہے جو CocoaPods کے لیے لائبریری بیان کرتی ہے۔ Podspec میں میٹا ڈیٹا (نام، ورژن، مصنف)، سورس کوڈ، انحصارات، سسٹم فریم ورک اور پلیٹ فارم کی ضروریات ہوتی ہیں۔ CocoaPods رجسٹری میں شائع کرنے سے پہلے pod spec lint سے podspec کی تصدیق کرتا ہے۔

ruby
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'
end

s.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 lintpodspec کی صداقت کی تصدیق
pod trunk registerCocoaPods Trunk میں رجسٹریشن
pod trunk pushرجسٹری میں podspec شائع کریں
pod repo pushنجی رجسٹری میں شائع کریں
pod lib lintمقامی لائبریری کی تصدیق

CocoaPods انسٹال اور کنفیگر کرنا

CocoaPods RubyGems — Ruby کے معیاری پیکیج مینیجر کے ذریعے انسٹال کیا جاتا ہے۔ macOS پر Ruby پہلے سے انسٹال ہے، لہذا ایک ٹرمینل کمانڈ کافی ہے۔ ایک متبادل Homebrew ہے، جو CocoaPods کو علیحدہ فارمولے کے طور پر انسٹال کرتا ہے۔ تنصیب کے بعد، منصوبے کی ابتدا pod init سے کی جاتی ہے، جو بنیادی کنفیگریشن کے ساتھ Podfile تخلیق کرتا ہے۔ Podfile کو انحصاروں سے بھرنے کے بعد، ڈیولپر pod install چلاتا ہے — CocoaPods لائبریریاں ڈاؤن لوڈ کرتا ہے اور ورک اسپیس تخلیق کرتا ہے۔

ruby
# انسٹالیشن 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 والے منصوبوں کے لیے بہتر انحصار گراف حل کارکردگی ہے۔

ruby
# تمام pods کو تازہ ترین ورژن میں اپ ڈیٹ کرنا
pod update

# مخصوص pod کو اپ ڈیٹ کرنا
pod update Alamofire

# پرانی انحصاروں کی جانچ کرنا
pod outdated

# حذف CocoaPods پروجیکٹ سے
pod deintegrate

pod 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 ورژن شامل کیے جا سکتے ہیں۔

ruby
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'
end

abstract_target کسی مخصوص Xcode ہدف سے منسلک ہوئے بغیر مشترکہ انحصار کے لیے ایک ورچوئل ہدف تخلیق کرتا ہے۔ Ruby مشروط تعمیرات Debug اور Release کنفیگریشنز کے لیے مختلف لائبریریاں شامل کرنے کی اجازت دیتی ہیں۔ مقامی لائبریری کے ساتھ :path ڈیولپمنٹ کو تیز کرتا ہے — تبدیلیاں pod install کو دوبارہ شروع کیے بغیر لاگو ہوتی ہیں۔ :branch موڈ سرکاری ریلیز سے پہلے تبدیلیوں کی جانچ کے لیے مفید ہے۔

CocoaPods بمقابلہ Swift Package Manager بمقابلہ Carthage

CocoaPods، Swift Package Manager (SPM) اور Carthage iOS ڈیولپمنٹ میں تین اہم انحصار مینیجر ہیں۔ ہر ایک کا اپنا آرکیٹیکچر، انضمام کا طریقہ اور کنٹرول کی سطح ہے۔ CocoaPods لائبریریوں کی تعداد میں سرفہرست ہے، SPM Xcode میں شامل سپورٹ کے ساتھ جیتتا ہے، Carthage مقبولیت میں پیچھے ہے لیکن زیادہ سے زیادہ کنٹرول فراہم کرتا ہے۔

معیارCocoaPodsSPMCarthage
کنفیگریشن زبانRuby DSLPackage.swift (Swift)Cartfile
Xcode انضمامورک اسپیس کے ذریعےشاملدستی (xcframeworks)
لائبریریوں کی تعداد100,000 سے زیادہ~65,000~20,000
عبوری انحصارخودکارخودکاردستی
وسائل کی معاونتہاں (resource bundles)ہاں (Resources)نہیں
تنصیب کی رفتاردرمیانیتیزتیز
ورژننگGemfile.lockPackage.resolvedCartfile.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 ہکس کے ذریعے کسٹم بلڈ مراحل۔

عام مسائل اور ان کے حل

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 syncPodfile.lock تبدیلpod install
Specs ریپوزٹری خرابGit خرابیSpecs دوبارہ انسٹال کریں
نقل شدہ علامتیںلائبریری تنازعuse_frameworks! :static
Apple Silicon پر خرابیRosetta کے تحت RubyHomebrew / rbenv ARM
سست تنصیببڑا انحصار گرافمتوازی ڈاؤن لوڈ، کیش

اکثر پوچھے گئے سوالات

CocoaPods کیا ہے اور iOS ڈیولپر کو اس کی ضرورت کیوں ہے؟

CocoaPods Apple منصوبوں (iOS، macOS، watchOS، tvOS) کے لیے ایک انحصار مینیجر ہے۔ یہ تیسرے فریق کی لائبریریوں کو ڈاؤن لوڈ، کنفیگر اور ضم کرنے کو خودکار کرتا ہے۔ دستی طور پر فائلیں کاپی کرنے اور کمپائلر فلیگز کنفیگر کرنے کے بجائے، Podfile میں ایک سطر pod 'LibraryName' شامل کرنا اور pod install چلانا کافی ہے۔

Podfile اور Podfile.lock میں کیا فرق ہے؟

Podfile ایک کنفیگریشن فائل ہے جو ڈیولپر لکھتا ہے: اس میں لائبریری کے نام اور ورژن آپریٹر (~> 5.9، >= 2.0، عین ورژن) ہوتے ہیں۔ Podfile.lock خودکار طور پر تخلیق ہوتا ہے اور تمام نصب شدہ انحصاروں کے عین ورژن مقفل کرتا ہے۔ Podfile.lock کو Git میں رکھنا چاہیے — یہ یقینی بناتا ہے کہ ٹیم کے تمام اراکین ایک جیسے ورژن استعمال کریں۔

CocoaPods سے Swift Package Manager میں کیسے منتقل ہوں؟

منصوبے کے فولڈر سے ٹرمینل میں pod deintegrate چلائیں — CocoaPods .xcworkspace، کنفیگریشن فائلیں اور بلڈ سیٹنگز ہٹا دے گا۔ پھر Xcode میں .xcodeproj کھولیں، File → Add Package Dependencies پر جائیں اور ضروری پیکیجز شامل کریں۔ SPM Apple کا شامل حل ہے جس میں اضافی تنصیب کی ضرورت نہیں۔

کیا CocoaPods اور Swift Package Manager ایک ہی منصوبے میں استعمال کیے جا سکتے ہیں؟

ہاں، CocoaPods اور SPM ایک ہی منصوبے میں ایک ساتھ رہ سکتے ہیں۔ CocoaPods .xcworkspace کے ذریعے انحصار کے ایک حصے کا انتظام کرتا ہے، جبکہ SPM Xcode میں Package Dependencies کو سنبھالتا ہے۔ تاہم، عبوری انحصار کے تنازعات ممکن ہیں: اگر دونوں نظام ایک ہی لائبریری کے مختلف ورژن شامل کرنے کی کوشش کریں تو بلڈ ناکام ہو جائے گا۔ تمام انحصاروں کے لیے ایک مینیجر استعمال کرنے کی سفارش کی جاتی ہے۔

CocoaPods کے ذریعے اپنی لائبریری کیسے بنائیں اور شائع کریں؟

لائبریری کو بیان کرنے والی .podspec فائل بنائیں۔ مقامی تصدیق کے لیے pod spec lint چلائیں۔ pod trunk register email name کے ذریعے رجسٹر ہوں۔ pod trunk push YourLib.podspec کے ذریعے spec شائع کریں۔ CocoaPods خود بخود آپ کی لائبریری کو مرکزی Specs رجسٹری میں شامل کر دے گا — اشاعت کے بعد، یہ تمام ڈیولپرز کے لیے pod 'YourLib' کے ذریعے دستیاب ہوگی۔

خلاصہ

  • CocoaPods — 100,000+ لائبریریوں اور Podfile انضمام کے ساتھ iOS کے لیے سب سے مقبول انحصار مینیجر
  • Podfile — Ruby کنفیگریشن جو ورژننگ، مشروط شمولیت، مقامی انحصار اور post_install ہکس کو سپورٹ کرتی ہے
  • Podspecpod trunk push کے ذریعے رجسٹری میں لائبریری شائع کرنے کے لیے تصریحی فائل
  • Podfile.lock عین ورژن مقفل کرتا ہے، ٹیم کی تمام مشینوں پر بلڈ تولیدی صلاحیت کو یقینی بناتا ہے
  • تنصیب gem install cocoapods کے ذریعے، سیٹ اپ pod init اور pod install کے ذریعے
  • CocoaPods بمقابلہ SPM بمقابلہ Carthage: CocoaPods لائبریری تعداد میں سرفہرست، SPM Xcode انضمام میں سرفہرست، Carthage ہر پہلو میں پیچھے
  • عام مسائل (sandbox sync، Specs خرابی، نقل شدہ علامتیں) pod install، کیش صفائی اور فریم ورک کنفیگریشن سے حل ہوتے ہیں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں