Podfile — iOS və macOS layihələrində istifadə olunan CocoaPods asılılıq meneceri üçün konfiqurasiya faylı. O, kitabxanaların, versiyaların və platforma parametrlərinin siyahısını ehtiva edir, tətbiqin qurulmasını müəyyənləşdirir. CocoaPods, 2025 məlumatlarına görə, 3 milyondan çox layihə bu vasitədən istifadə edir. Podfile faylları əl ilə kopyalamadan Xcode Workspace vasitəsilə üçüncü tərəf kitabxanalarını avtomatik inteqrasiya edir.
Əsas məlumatlar
Podfile — iOS, macOS, tvOS və ya watchOS layihəsi üçün xarici asılılıqların sadalandığı Ruby dilində deklarativ skriptdir. O, layihənin kök qovluğunda yerləşir və CocoaPods paket meneceri üçün yeganə konfiqurasiya nöqtəsi kimi xidmət edir. Podfile olmadan tərtibatçılar kitabxanaları əl ilə yükləməli, onları layihəyə kopyalamalı və Xcode-da linker parametrlərini konfiqurasiya etməli olardılar.
CocoaPods Podfile-i analiz edir və quraşdırılmış kitabxanaların dəqiq versiyalarını müəyyən edən qapalı Podfile.lock faylı yaradır. Bu, komandanın bütün maşınlarında qurmaların təkrarlanmasını təmin edir: əgər bir tərtibatçı Alamofire-i 5.9 versiyasına yeniləyərsə, Podfile.lock bu dəyişikliyi qeyd edəcək və pod install icra edən hər kəs eyni versiyanı alacaq. Bu mexanizm olmadan müxtəlif tərtibatçıların fərqli versiyaları ola bilər ki, bu da çətin aşkarlanan səhvlərə gətirib çıxarır.
Podfile üç əsas vəzifəni həll edir: versiya nəzarəti ilə asılılıqların idarə edilməsi, minimal OS versiyası ilə hədəf platformanın konfiqurasiyası və Xcode Workspace vasitəsilə kitabxanaların avtomatik inteqrasiyası. Hər quraşdırmada CocoaPods Pods.xcodeproj faylı yaradır ki, bu da workspace vasitəsilə əsas layihə ilə əlaqələndirilir. Tərtibatçı kitabxanaların necə qoşulduğu barədə düşünməməlidir — onları Podfile-da göstərmək kifayətdir.
Podfile Ruby sintaksisindən istifadə edir, lakin minimal dil bilgisi tələb edir. Əsas struktur platformanı, qurma hədəflərini və asılılıq siyahısını müəyyən edən direktivlərdən ibarətdir. Hər bir direktiv Ruby interpretatoru kontekstində icra olunur, buna görə də Podfile mürəkkəb konfiqurasiyalar üçün şərti konstruksiyaları, dövrləri və dəyişənləri dəstəkləyir.
Tətbiqin hər bir qurma hədəfi target bloku daxilində təsvir edilir. Standart Xcode layihəsi üçün bu adətən tətbiqin adı ilə bir hədəfdir. İç-içə targetlər modul testləri, UI testləri və genişləndirmələr üçün istifadə oluna bilər. Müxtəlif targetlərin asılılıqlarını təcrid etmək tövsiyə olunur: əsas kitabxanalar əsas targetdə, test frameworkları test targetində — beləliklə, artıq asılılıqların istehsal buraxılışına düşməsinin qarşısı alınır.
# iOS layihəsi üçün minimal Podfile nümunəsi
target 'MyApp' do
use_frameworks!
pod 'Alamofire', '~> 5.8'
pod 'Kingfisher', '~> 7.10'
pod 'SnapKit', '~> 5.6'
end
Platform direktivi layihənin yığıldığı minimal OS versiyasını təyin edir. Bu, kitabxanaların uyğunluğuna təsir edən məcburi parametrdir. CocoaPods-dakı kitabxanalar adətən podspec-də öz minimal OS versiyalarını göstərir və layihə platforması tələb olunandan aşağı olarsa, pod install xəta verəcək. iOS layihələri üçün minimal versiya adətən 15.0 və yuxarı, macOS üçün isə 12.0 və yuxarıdır.
platform :ios, '15.0'
platform :macos, '12.0'
platform :tvos, '16.0'
Asılılıqlar target bloklarından kənarda qlobal və ya konkret hədəf daxilində lokal olaraq göstərilə bilər. Qlobal podlar layihənin bütün hədəflərinə qoşulur ki, bu da loqinq üçün CocoaLumberjack kimi ümumi təyinatlı kitabxanalar üçün əlverişlidir. Lokal asılılıqlar test frameworklarını və istehsal kodunu ayırmaq üçün faydalıdır: testlər üçün Quick və Nimble, analitika üçün Firebase, məlumat saxlama üçün Realm.
# Bütün hədəflər üçün qlobal asılılıq
pod 'CocoaLumberjack'
target 'MyApp' do
# Əsas tətbiqin lokal asılılıqları
pod 'Firebase/Crashlytics'
pod 'Firebase/Analytics'
pod 'RealmSwift'
end
target 'MyAppTests' do
# Test frameworkları buraxılışa daxil olmayacaq
pod 'Quick'
pod 'Nimble'
end
CocoaPods müqayisə operatorları vasitəsilə versiyaların çevik göstərilməsini dəstəkləyir. Bu, yeniləmələrə nəzarət etməyə və uyğunsuz API dəyişikliklərindən qaçmağa imkan verir. Düzgün operatorun seçilməsi layihənin sabitliyi üçün kritikdir: çox sərt məhdudiyyətlər səhv düzəlişləri olan yeniləmələri bloklayır, çox yumşaq məhdudiyyətlər isə əsas yeniləmələrdə gözlənilməz nasazlıqlara səbəb ola bilər.
| Operator | Mənası | Nümunə |
|---|---|---|
| = 1.2.3 | Dəqiq versiya — maksimal sabitlik | pod 'Alamofire', '= 5.8.0' |
| ~> 1.2 | Uyğun versiya >= 1.2 və < 2.0 | pod 'Kingfisher', '~> 7.10' |
| >= 1.0 | Yuxarı hədd olmadan minimal versiya | pod 'SnapKit', '>= 5.0' |
| < 2.0 | Maksimal versiya | pod 'RxSwift', '< 6.5' |
Uyğun yeniləmələr üçün ~> operatorundan istifadə etmək tövsiyə olunur. O, API-nin əsas dəyişikliklərindən qoruyur, eyni zamanda yama və kiçik təkmilləşdirmələri əldə etməyə imkan verir. Məsələn, ~> 5.8 5.8.0, 5.8.1, 5.9.0 versiyalarına icazə verir, lakin kritik API dəyişiklikləri ola biləcək 6.0.0-ı bloklayır.
Podfile.lock faylı dəqiq versiyaları müəyyən edir və versiya nəzarət sistemində saxlanmalıdır. pod update əmri asılılıqları icazə verilən ən son versiyalara yeniləyir və lock faylını yenidən yazır, pod install isə kompilasyonların eyniliyini təmin etmək üçün Podfile.lock-dan artıq müəyyən edilmiş versiyalardan istifadə edir.
Podfile müxtəlif qurma sxemləri üçün direktivlər vasitəsilə konfiqurasiyaların bölünməsini dəstəkləyir. Debug və Release üçün müxtəlif kitabxana dəstləri qoşula bilər ki, bu da istehsal qurmasının ölçüsünü əhəmiyyətli dərəcədə azaldır və kompilasyonu sürətləndirir. Linterlər, kod generatorları və debug alətləri yalnız Debug konfiqurasiyasında işləməlidir.
target 'MyApp' do
# Yalnız Debug üçün: linter və debug
pod 'SwiftLint', :configurations => ['Debug']
# İstehsal: analitika və monitorinq
pod 'Fabric'
pod 'TestFairy', :configurations => ['Release']
end
inhibit_all_warnings! direktivi bütün podlardan xəbərdarlıqları söndürür. Bu, böyük layihələrdə faydalıdır, çünki üçüncü tərəf kitabxanaları qurma jurnallarında çoxlu səs-küy yaradaraq öz xəbərdarlıq və səhvlərin tapılmasını çətinləşdirir. Seçici söndürmə üçün inhibit_warnings konkret podda istifadə oluna bilər.
Yalnız tərtibat mərhələsində istifadə olunan kitabxanaları Debug konfiqurasiyaları vasitəsilə təcrid etmək tövsiyə olunur. SwiftLint, OHHTTPStubs, RevealServer və oxşar alətlər istehsal qurmasında əlçatan olmamalıdır. Bu, nəinki IPA ölçüsünü azaldır, həm də tətbiqin buraxılış versiyasında debug məlumatlarının təsadüfən açıqlanmasının qarşısını alır. Ehtiyacsız olaraq Release-də qalan hər bir pod işəsalma müddətini və yaddaş istehlakını artırır. Əlavə olaraq, CocoaPods fiziki qurma hədəfi yaratmadan ümumi asılılıqları qruplaşdıran abstract_target direktivini dəstəkləyir.
Modul arxitekturası olan böyük layihələr üçün multi-target Podfile strukturundan istifadə etmək tövsiyə olunur: tətbiqin hər bir modulu təcrid olunmuş asılılıq dəsti ilə öz targetini alır. Bu, artımlı kompilasyonu sürətləndirir, çünki bir modul dəyişdikdə yalnız onun asılılıqları yenidən yığılır. CocoaPods targetlər arasında kəsişən asılılıqları avtomatik həll edərək hər bir kitabxananın layihənin bütün modulları üçün vahid versiyada quraşdırılmasını təmin edir.
post_install hooku bütün podlar quraşdırıldıqdan sonra icra olunur. O, Xcode layihəsinin parametrlərini proqramlı şəkildə dəyişməyə imkan verir, məsələn, ayrı-ayrı targetlər üçün minimal iOS versiyasını konfiqurasiya etmək, qurma fazaları əlavə etmək və ya kitabxanaların infoplists fayllarını dəyişdirmək. Bu, güclü fərdiləşdirmə mexanizmidir, onsuz bəzi üçüncü tərəf kitabxanaları düzgün konfiqurasiya edilə bilməz.
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
# Bütün podlar üçün minimal versiyanı məcburi təyin edirik
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
end
end
end
use_frameworks! direktivi statik kitabxanalar əvəzinə dinamik frameworklərin istifadəsini aktivləşdirir. Bu, Swift layihələri və Swift-də yazılmış kitabxanalar üçün məcburi parametrdir, çünki Swift icra mühiti dinamik linkləmə tələb edir. Lakin Objective-C layihələri üçün statik frameworklərin yığılması üçün use_frameworks! :linkage => :static istifadə oluna bilər ki, bu da tətbiqin işəsalma müddətini və paket ölçüsünü azaldır.
Qurucudakı static_frameworks bayrağı statik frameworkləri yığmağa imkan verir ki, bu da tətbiqin işəsalma müddətini qısaldır. Static və dynamic arasında seçim layihənin arxitekturasından asılıdır: dinamik frameworklər daha uzun yüklənir, lakin sistemə proseslər arasında yaddaşı paylaşmağa imkan verir. Statik frameworklər daha yığcamdır, lakin hər bir surət hər bir prosesdə ayrıca yaddaş tutur.
post_install-dan əlavə, Podfile podların quraşdırılmasından əvvəl icra olunan pre_install hookunu dəstəkləyir. O, inteqrasiyadan əvvəl podspec-i dəyişdirmək, məsələn, yamalar vasitəsilə kitabxanaların mənbə kodunu dəyişmək və ya xüsusi kompilyator bayraqlarını konfiqurasiya etmək üçün faydalıdır. Hooklar Podfile-i sadəcə asılılıq siyahısı deyil, qurma prosesini avtomatlaşdıran tam hüquqlu konfiqurasiya skriptinə çevirir.
source direktivi CocoaPods Specs repozitoriyasının URL-ni göstərir. Standart olaraq rəsmi https://github.com/CocoaPods/Specs.git repozitoriyasından istifadə olunur, lakin özəl kitabxanaları olan layihələr üçün öz şəxsi Specs repozitoriyası əlavə edilə bilər. Çoxsaylı source-lar bir Podfile-da açıq və özəl podspekləri birləşdirməyə imkan verir. Source sırası vacibdir: CocoaPods podları göstərilən ardıcıllıqla axtarır və ilk tapılan nüsxədən istifadə edir ki, bu da açıq kitabxanaları özəl versiyalarla əvəz etməyə imkan verir.
Tez-tez verilən suallar
Podfile layihənin kök qovluğunda, .xcodeproj və ya .xcworkspace faylı ilə yanaşı yerləşir. CocoaPods pod init vasitəsilə işə salındıqda fayl avtomatik olaraq minimal konfiqurasiya və əsas direktivləri izah edən şərhlərlə yaradılır.
pod install əmri versiyaları dəyişmədən Podfile.lock-a uyğun olaraq asılılıqları quraşdırır — layihə ilk dəfə klonlandıqda və ya yeni podlar əlavə edildikdə istifadə olunur. pod update bütün və ya göstərilən podları Podfile tərəfindən icazə verilən ən son versiyalara yeniləyir və Podfile.lock-u yeni müəyyən edilmiş versiyalarla yenidən yazır.
Bəli, Podfile.lock mütləq repozitoriyada olmalıdır. O, bütün tərtibatçıların və CI sistemlərinin eyni asılılıq versiyalarından istifadə etməsini təmin edir, uyğunsuz qurmaların qarşısını alır. Podfile.lock olmadan hər pod install icrası müxtəlif kitabxana versiyaları quraşdıra bilər ki, bu da başqa maşında təkrarlana bilməyən səhvlərə gətirib çıxarır.
Podspec ilə lokal qovluğa yol göstərmək üçün :path direktivindən istifadə edin: pod 'MyLibrary', :path => '../MyLibrary'. Bu, monorepozitoriyalarda öz kitabxanalarınızı inkişaf etdirmək və podspec-i CocoaPods trunk-da dərc etməzdən əvvəl dəyişiklikləri sınamaq üçün əlverişlidir.
CocoaPods konflikt edən podları və onların versiya tələblərini göstərən xəta çıxarır. Həll yolu: dəqiq versiya əvəzinə ~> operatoru ilə məhdudiyyətləri yumşaltmaq, konflikt edən kitabxanaları uyğun versiyalara yeniləmək və ya ayrı-ayrı podlar üçün pod update istifadə etmək. Son çarə olaraq Podfile.lock-u silib pod install-ı yenidən icra etmək olar.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun