Bosh sahifa Wiki CocoaPods

CocoaPods

CocoaPodsiOS, 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:

Noto‘g‘ri podspec consumer buildini buzishi mumkin.

Version constraint

Dependency versioni:

  • aniq;
  • minimum;
  • range;
  • compatible minor;
  • branch;
  • commit;
  • local path

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