CocoaPods — iOS, macOS va boshqa Apple platformalaridagi Xcode loyihalari uchun dependency manager. U external kutubxonalarni topish, versionlarini resolve qilish, source yoki binary artifactlarni yuklash va Xcode workspace’ga integratsiya qilishni avtomatlashtiradi.
CocoaPods dependencylarni Podfile orqali e’lon qiladi va aniq resolved versionlarni Podfile.lock faylida saqlaydi.
Pod
CocoaPods ekotizimidagi library yoki component pod deb ataladi.
Pod source code, resource, framework va dependencylardan tashkil topishi mumkin.
Har pod .podspec orqali tavsiflanadi.
Bitta repository bir nechta subspec taqdim etishi mumkin.
Podfile
Loyiha dependencylari Ruby DSLga yaqin sintaksisda yoziladi:
platform :ios, '15.0'
target 'App' do
pod 'ExampleLibrary', '~> 2.0'
end
Target, platform va build configuration bo‘yicha dependency tanlanadi.
Podspec
Podspec library metadata va build qoidalarini belgilaydi:
- nom;
- version;
- source;
- source files;
- resource;
- dependency;
- platform;
- license;
- framework;
- compiler setting.
Noto‘g‘ri podspec consumer buildini buzishi mumkin.
Version constraint
Dependency versioni:
bilan belgilanadi.
Juda keng constraint kutilmagan breaking update olib kelishi mumkin.
Lock file reproducibilityni saqlaydi.
Pod install
pod install Podfile va lock file asosida dependencylarni o‘rnatadi.
U:
- version resolve;
- source download;
- Pods project yaratish;
- workspace yaratish;
- integration
bajaradi.
Kundalik dependency install uchun odatda shu command ishlatiladi.
Pod update
pod update constraint doirasida yangi versionlarni qidiradi va lock file’ni yangilaydi.
Barcha podni yoki aniq podni update qilish mumkin.
Update code review va test bilan bajariladi.
Uni oddiy install o‘rnida nazoratsiz ishlatish dependency drift yaratadi.
Podfile.lock
Resolved pod va versionlarni saqlaydi.
Application loyihasida repositoryga commit qilinadi.
Barcha developer va CI bir xil versiondan foydalanadi.
Library repositorylarida lock policy loyiha turiga bog‘liq.
Workspace
CocoaPods application project va generated Pods projectni workspace ichida birlashtiradi.
Shundan keyin:
App.xcworkspace
ochiladi.
Faqat .xcodeproj ochilsa pod module yoki link topilmasligi mumkin.
Pods project
Generated project dependency targetlarini saqlaydi.
U qo‘lda tahrir qilinmaydi.
Keyingi pod install o‘zgarishlarni qayta yozadi.
Custom setting Podfile hook yoki podspec orqali beriladi.
Static va dynamic linking
Pod static library, static framework yoki dynamic framework sifatida integratsiya qilinishi mumkin.
use_frameworks! va linking optionlari natijaga ta’sir qiladi.
Dynamic framework startup va embedding overheadga ega.
Static linking binary hajmi va symbol conflictga ta’sir qiladi.
Modular header
Objective-C headerlar module sifatida import qilinishi mumkin.
Modular header Swift interoperability’ni yaxshilaydi.
Eski podlar header search path va umbrella headerga tayanishi mumkin.
Module nomi collision qilmasligi kerak.
Resource
Pod image, bundle, storyboard yoki localization saqlashi mumkin.
Resource bundle nomi unique bo‘ladi.
Library code resource’ni main bundle’dan emas, o‘z bundle’idan topishi kerak.
Aks holda Swift Package yoki framework integratsiyasida ishlamaydi.
Script phase
Ayrim pod build jarayoniga script qo‘shadi.
Masalan, code generation yoki asset processing.
Script:
- build vaqtini oshiradi;
- environmentga access qiladi;
- supply-chain xavfini yaratadi.
Noma’lum pod scriptlari review qilinadi.
Private spec repository
Tashkilot ichki podlarni private specs repository orqali tarqatishi mumkin.
Authentication va source accessi boshqariladi.
Internal va public pod bir xil nomga ega bo‘lsa dependency confusion xavfi yuz beradi.
Source priority ehtiyotkor sozlanadi.
Trunk
Public CocoaPods specification registry pod metadata’larini tarqatadi.
Pod publish qilish owner va version jarayoniga ega.
Published version immutable bo‘lishi kerak.
Source tag keyin o‘zgartirilsa reproducibility buziladi.
Cache
Downloaded podlar local cache’da saqlanishi mumkin.
Corrupt yoki stale cache build muammosi yaratishi ehtimoli bor.
Diagnostikada cache tozalanadi, ammo doimiy yechim sifatida har safar tozalash noto‘g‘ri.
CI deterministic cache key ishlatadi.
Build setting conflict
Pod va application turli deployment target, Swift version yoki compiler flag talab qilishi mumkin.
Generated xcconfig settinglarni birlashtiradi.
Application qo‘lda OTHER_LDFLAGS kabi qiymatni override qilib inherited qismni yo‘qotsa link xatosi yuz beradi.
CocoaPods va Swift Package Manager
Swift Package Manager Xcode va Swift toolchain bilan bevosita integratsiyalashgan.
CocoaPods uzoq tarix, ko‘p Objective-C library va moslashuvchan build hooklarga ega.
Bir loyihada ikkalasi ishlatilishi mumkin, ammo duplicate dependency va symbol nazorat qilinadi.
Uninstall
Podni Podfile’dan olib, pod install bajariladi.
Faqat Pods directory’ni o‘chirish project integrationini to‘liq tozalamaydi.
Generated workspace, xcconfig va build phase CocoaPods tomonidan boshqariladi.
Security
Dependency source, version, checksum, script va transitive dependency tekshiriladi.
Lock file review qilinadi.
Abandoned pod yangi platforma security va compiler o‘zgarishlariga mos kelmasligi mumkin.
Private token Podfile ichida yozilmaydi.
Post-install hook
Podfile post_install hook orqali generated project settinglarini avtomatik o‘zgartirishi mumkin. Bu deployment target yoki compiler flagni moslashtirishda ishlatiladi. Hook barcha pod targetlarga nazoratsiz bir xil qiymat qo‘ysa kelajak update’ni buzishi mumkin. Har workaround sababi hujjatlashtiriladi.
Deterministik source
Git branchga bog‘langan pod branch o‘zgarganda ayni version nomi bilan boshqa code berishi mumkin. Production dependency tag yoki commit hashga pin qilinadi. Podspec source checksum va repository accessi tekshiriladi.
Bog‘liq tushunchalar
CocoaPods, Podfile, Podspec, Podfile.lock, Dependency manager, Xcode workspace, Static framework, Dynamic framework, Swift Package Manager, iOS dependency