CocoaPods kullanıyorsanız .gitignore'unuza ne olur?


388

Birkaç aydır iOS geliştirme yapıyorum ve bağımlılık yönetimi için umut verici CocoaPods kütüphanesini öğrendim .

Kişisel bir proje üzerinde bunu denedik: Bir bağımlılık eklendi kivi benim Podfile, ran için pod install CocoaPodsTest.xcodeprojve işte , harika çalıştı.

Merak ettiğim tek şey: Neyi kontrol ederim ve sürüm kontrolü için neyi görmezden gelirim? Podfile kendisini ve muhtemelen .xcworkspace dosyasını kontrol etmek istiyorum; ama Pod'ları / dizini yoksayıyorum? .Gitignore'a da eklemem gereken (başka bağımlılıklar eklediğimde) yolda oluşturulacak başka dosyalar var mı?

Yanıtlar:


261

Şahsen ben Pods dizini ve içeriğini kontrol etmiyorum. Sonuçları düşünerek uzun yıllar harcadığımı söyleyemem ama akıl yürütmem şöyle bir şey:

Podfile, her bir bağımlılığın belirli bir etiketine veya / veya taahhüdüne atıfta bulunur, böylece Pod'ların kendileri pod dosyasından oluşturulabilir, çünkü bunlar bir kaynaktan daha fazla bir ara ürüne benziyorlar ve bu nedenle projemde sürüm kontrolüne ihtiyaç duymuyorlar.


70
CocoaPods projesinin örnekte Pods dizinini göz ardı ettiğini belirtmek gerekebilir .
Joshhepworth

34
Podfile.lock dosyasını eklemeyi düşünürüm, çünkü o zaman belirli bir derleme için kullandığınız kütüphanelerin tam olarak hangi sürümlerini kaydedersiniz ve tam olarak diğer ekip üyeleri için yeniden üretebilirsiniz. "Hangi X sürümünü kullandığınızı" sormak çok can sıkıcı olabilir. İşte yakut Gemfile eşdeğeri hakkında iyi bir tartışma: yehudakatz.com/2010/12/16/…
Matt Connolly

12
Podfile.lock'u neden yürüttüğünüzü anlamıyorum, Podfile'nizde tam olarak hangi sürümlere bağımlı olduğunuz konusunda daha spesifik olmamalısınız? Neyi anlamıyorum?
Michael Baltaks

9
İşte nasıl görüyorum: Podfile her bölmenin tam sürümlerini belirtirse, güncellemeleri almanın tek yolu güncellemelerin var olduğunu bilmek ve bunları manuel olarak belirtmektir. Bu, popüler veya kritik bir uygulama için tercih edilebilir. Daha önceki geliştirme için, Podfile.lock'u güncellendikten sonra fark ederseniz ve muhtemelen çoğu zaman yapacağınız güncellemeleri isteyip istemediğinize karar verirseniz önemli güncellemelerin gelmesi çok daha kolaydır.
davidkovsky

43
Bahsetmek önemlidir Podfile.lock: Cocoapods tarafından sürüm kontrolü altında olması tavsiye edilir.
cbowns

383

Pod dizinimi taahhüt ediyorum. Pods dizininin bir yapı artefaktı olduğu konusunda hemfikir değilim. Aslında kesinlikle söyleyemem. Uygulama kaynağınızın bir parçası: onsuz oluşturulmaz!

CocoaPods'u bir oluşturma aracı yerine bir geliştirici aracı olarak düşünmek daha kolaydır. Projenizi oluşturmaz, basitçe sizin için bağımlılıklarınızı klonlar ve kurar. Projenizi kolayca oluşturabilmek için CocoaPod'ların kurulu olması gerekmez.

CocoaPod'ları derlemenize bağımlı hale getirerek, şimdi projenizi oluşturmak için ihtiyaç duyabileceğiniz her yerde kullanılabilir olduğundan emin olmanız gerekir ... bir ekip yöneticisinin buna ihtiyacı var, CI sunucunuzun buna ihtiyacı var. Kural olarak, her zaman kaynak havuzunuzu klonlayabilmeli ve daha fazla çaba sarf etmeden inşa edebilmelisiniz.

Kapsül dizininizi işlemiyorsanız, sık sık şubeleri değiştirirseniz büyük bir baş ağrısı da yaratır. Şimdi, bağımlılıklarınızın doğru olduğundan emin olmak için dalları her değiştirdiğinizde kapsül yüklemesini çalıştırmanız gerekir. Bağımlılıklarınız dengelendiği için bu daha az güçlük çekebilir, ancak bir projenin başlarında bu büyük bir zaman alıcıdır.

Peki, ne görmezden gelirim? Hiçbir şey değil. Podfile, kilit dosyası ve Pods dizini tamamlanır. Güven bana, size çok fazla güçlük kazandıracak. Eksileri nelerdir? Biraz daha büyük bir repo? Dünyanın sonu değil.


33
Bu kesinlikle CocoaPod'ları kullanmanın bir yoludur. Sadece kaynağınızın bir parçası değildir, çünkü onsuz inşa edemezsiniz, ancak "temel uygulamanız" da CocoaPods'daki koda oldukça bağlıdır. Bir bölmenin hangi sürümünün kullanıldığını tam olarak bilmek, sürüm oluşturma için çok önemlidir ve sadece Lockfile kullanmak onu kesmez.
Joshua Gross

35
Şube değiştirirken ve zamanda geriye giderken daha kolay… Bu çok büyük bir argüman.
MonsieurDart

5
Evet, bu konu hakkında daha fazla ayrıntı verebilirdim, ama bana göre repodaki bir taahhüt, zaman içinde kaynağınızın bir anlık görüntüsünü temsil eder ve Pods dizininizi taahhüt etmezseniz, bu anlık görüntünün büyük bir kısmı eksiktir. Pod sürümlerinize çok özel olarak bunu hafifletebilirsiniz, ancak bunu da göz önünde bulundurun ... Pod'larınızdan birini güncellerseniz, Pod'larınız deponuzda ise, bu güncelleme bir taahhütte yakalanır ve tamamen değişken olacaktır. Bir Pod'un güncellenmesi bir hataya neden oluyorsa, temel değişikliğin kendi repolarınızda neden yakalandığını çok daha kolay bir şekilde görebilirsiniz.
Luke Redpath

5
Sanırım şimdi kişisel bir zevk meselesi. Seamus gibi insanlar tartışmayı kutuplaştırıyorlar ... Podsdizini eklememenin acı çekmesine neden olacağını söylemek gerçekten adil değil , kontrol ederken de kendi sorunları ile geliyor. Örneğin bir geliştirici Podfile, Pod'larda güncellenmiş kaynakları kontrol etmeyi hatırlamadan bir bağımlılığın bir sürümünü engeller. Murphy kanunu. pod installşubeyi her değiştirdiğinizde size kıymetli ... ONLAR saniye - ama bu problem sınıfını tamamen ortadan kaldırıyor.
fatuhoku

14
It won't build without it!Siz de XCode'u uygulayabilirsiniz
Sourabh

155

GitHub'ın Objective-C gitignore komutunu kullanmanızı öneririm . Ayrıntılı olarak, en iyi uygulamalar şunlardır:

  • Podfile zorunluluk zaman kaynak kontrolü altında .
  • Podfile.lock zorunluluk zaman kaynak kontrolü altında .
  • CocoaPods tarafından oluşturulan çalışma alanı olmalıdır kaynak kontrol altında tutulmalıdır.
  • Herhangi Pod ile başvurulan :pathseçeneği olmalıdır kaynak kontrol altında tutulmalıdır.
  • ./PodsKlasör edebilir kaynak kontrol altında tutulmalıdır.

Daha fazla bilgi için resmi kılavuza bakabilirsiniz. .

Kaynak: CocoaPods çekirdek ekibinin üyesiyim, @alloy gibi


Podlar klasörü bir yapı artefaktı olmasına rağmen, kaynak kontrolü altında tutup tutmayacağınıza karar verirken göz önünde bulundurmanız gereken nedenler vardır:

  • CocoaPods bir paket yöneticisi değildir, bu nedenle kütüphanenin orijinal kaynağı gelecekte yazar tarafından kaldırılabilir.
  • Podlar klasörü kaynak denetimine dahil edilmişse, projeyi çalıştırmak için ödeme yeterli olacağı için CocoaPod'ları yüklemeniz gerekmez.
  • CocoaPods hala devam ediyor ve her zaman aynı sonuca yol açmayan seçenekler var (örneğin :headve :gitşu anda seçenekler depolanan taahhütleri kullanmıyor Podfile.lock).
  • Orta / uzun bir süreden sonra bir projede çalışmaya devam edebiliyorsanız daha az başarısızlık noktası vardır.

5
Neden çalışma alanı dosyasını saklamak zahmetine girsin? Zaten Cocoapods tarafından üretildi.
fatuhoku

1
@fatuhoku Benim deneyimlerime göre Cocoapods kör sürekli entegrasyon test sunucuları için. Hepsini kontrol ediyorum çünkü CI ana bilgisayarım (iş kuralı) için oluşturma komut dosyasına erişimim yok ve CocoaPods'u bir geliştirme sistemi veya paket yöneticisi değil, bir geliştirici aracı olarak görüyorum.
kodpoet

1
. / Pod klasörü CocoaPods tarafından kaynak kontrolü altında tutulmamalıdır (otomatik olarak oluşturulur). Kapsüller klasörü oluşturma işleminin bir eseridir. Çalışma alanı, CocoaPods ile yönetilmeyen başka projeleri olmadığı sürece kaynak kontrolünden de kaldırılabilir.
Vlad

Ben kontrol edilmelidir düşünüyorum çünkü bir çekme yapmak her yaptığımda bir pod yüklemek için bir acı.
mskw

45

.gitignore dosyası

Hiçbir cevap aslında bir teklif .gitignore, bu yüzden burada iki lezzet.


Bölme dizinini kontrol etme ( Avantajlar )

Xcode / iOS dostu git yoksay, Mac OS sistem dosyalarını atlar, Xcode, derlemeler, diğer depolar ve yedeklemeler.

.gitignore:

# Mac OS X Finder
.DS_Store

# Private Keys
*.pem

# Xcode legacy
*.mode1
*.mode1v3
*.mode2v3
*.perspective
*.perspectivev3
*.pbxuser

# Xcode
xcuserdata/
project.xcworkspace/
DerivedData/

# build products
build/
*.[oa]

# repositories
.hg
.svn
CVS

# automatic backup files
*~.nib
*.swp
*~
*(Autosaved).rtfd/
Backup[ ]of[ ]*.pages/
Backup[ ]of[ ]*.key/
Backup[ ]of[ ]*.numbers/

Bölme dizinini yoksayma ( Yararları )

.gitignore: (önceki listeye ekle )

# Cocoapods
Pods/

Pods dizininde kontrol edip etmemeniz, Podfile ve Podfile.lock her zaman sürüm kontrolü altında tutulmalıdır.

Eğer Podscheck-in edilmez, senin Podfilemuhtemelen her Cocoapod için açık sürüm numaraları talep etmelidir. Cocoapods.org tartışması burada .


38

Genellikle müşterilerin uygulamalarında çalışıyorum. Bu durumda, herhangi bir zamanda herhangi bir geliştiricinin bir ödeme yapmasını ve oluşturup çalışmasını sağlamak için Pods dizinini de repoya ekliyorum.

Kendi uygulamamız olsaydı, bir süre üzerinde çalışmayacak olana kadar Pods dizinini hariç tutacağım.

Aslında, saf kullanıcıların görüşleri karşısında, sorunuzu cevaplayacak en iyi kişi olamayacağım sonucuna varmalıyım :) Bu soru hakkında tweet göndereceğim: https://twitter.com/CocoaPodsOrg .


Bunu da yankılarım. CocoaPod'ları, diğer geliştiricilerin Pods klasörünü kontrol ederek (ihtiyaç duysalar da) kullanmaya ihtiyaç duymadan kullanabilirsiniz. Bir kez CocoaPods her yerde bulunur, bakla taşlar benzer olacak, aynı durumlarda yakut taşlar "satıcı" olurdu onları kontrol.
Ben Scheirman

2
Ben de bazen bakla veya bakla (iyi sürüm) mevcut olmayabilir düşünmek zorunda olduğunu düşünüyorum. Dahası, farklı pod yardımcı programı sürümüne sahip iki kullanıcı, aynı Podspec için yardımcı programı çalıştırırsa, çıkış farklı olabilir.
Adrian

1
Ödeme, oluşturma ve çalıştırma en önemli husustur. Yapınızı ve inşa etme kabiliyetinizi neden herhangi bir dış etkene bağlı hale getiresiniz? Tüm bölmeleri kontrol ediyorum. Doğru geliştiricileri aramak için diğer geliştiricilerin (veya gelecekteki kendinizin) saatlerini kurtarabilirsiniz. Ben de onları kontrol etmek için herhangi bir dezavantajı görmüyorum.
n13

18

Her şeyi kontrol ediyorum. ( Pods/ve Podfile.lock.)

Depoyu klonlamak ve her şeyi uygulamayı son kullandığım gibi çalışacağını bilmek istiyorum.

Gemin farklı bir sürümünden veya Pod'un deposunda geçmişi yeniden yazan birinin neden olabileceği farklı sonuçlara sahip olma riskinden ziyade şeyleri satmayı tercih ederim.


4
Bunu yapmanın diğer güzel yanı bir güncellemeden sonra, check-in işleminden önce diff'e bakabilir ve bakladaki dosyaların tam olarak değiştiğini görebilirsiniz.
funroll

2
Ek olarak, projeniz tüm geliştiricilerinizin CocoaPod'ları yüklemesini gerektirmez (bu, bağımlılıkların kim / nasıl eklendiğini ve güncellendiğini kontrol etmek istiyorsanız iyi bir şey olabilir).
Tony Arnold

18

Bunun cevabı doğrudan Cocoapod belgelerinde verilmektedir. " Http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control " adresine bakabilirsiniz.

İş akışları projeden projeye değiştiğinden, Pod klasörünüzü kontrol edip etmediğiniz size bağlıdır. Bölme dizinini kaynak denetimi altında tutmanızı ve .gitignore klasörünüze eklememenizi öneririz. Ama sonuçta bu karar size kalmış:

Kapsüller dizininde kontrol etmenin faydaları

  • Repoyu klonladıktan sonra, proje, CocoaPod'ların makineye takılı olmasa bile derhal inşa edilip çalıştırılabilir. Kapsül yüklemesini çalıştırmaya gerek yoktur ve Internet bağlantısı gerekmez.
  • Pod kaynağı (kod / kitaplıklar), Pod kaynağı (örneğin GitHub) aşağı inse bile her zaman kullanılabilir.
  • Pod yapılarının, repoyu klonladıktan sonra orijinal kurulumdakilerle aynı olduğu garanti edilir.

Bölme dizinini görmezden gelmenin faydaları

  • Kaynak kontrol deposu daha küçük olacak ve daha az yer kaplayacaktır.

  • Tüm Pod'lar için kaynaklar (örn. GitHub) mevcut olduğu sürece, CocoaPods genellikle aynı kurulumu yeniden oluşturabilir. (Teknik olarak, pod kurulumunun, Podfile'da bir taahhütlü SHA kullanılmadığında aynı yapay nesneleri getireceğine ve yeniden oluşturacağına dair bir garanti yoktur. Bu, özellikle Podfile'da zip dosyaları kullanıldığında geçerlidir.)

  • Farklı Pod sürümleriyle şubeleri birleştirme gibi kaynak kontrol işlemleri gerçekleştirilirken başa çıkacak herhangi bir çakışma olmayacaktır.

Pods dizininde kontrol edip etmemeniz, Podfile ve Podfile.lock her zaman sürüm kontrolü altında tutulmalıdır.


13

Başka bir yerde mevcut iyi bir kopyamız olduğunu varsayarak, kütüphanelere giriş yapmayan geliştiriciler kampındayım. Yani, .gitignore'mda CocoaPod'lara özgü aşağıdaki satırları ekliyorum:

Pods/
#Podfile.lock  # changed my mind on Podfile.lock

Daha sonra güvenli bir yerde kütüphanelerin bir kopyasının bulunduğundan emin olurum. Aksine (yanlış-) bir projenin kod deposu bağımlılıkları depolamak için kullanmak (derlenmiş ya da değil) Ben bunu yapmanın en iyi yolu yapıları arşivlemek olduğunu düşünüyorum. Yapılarınız için bir CI sunucusu kullanıyorsanız (Jenkins gibi) sizin için önemli olan yapıları kalıcı olarak arşivleyebilirsiniz. Tüm üretim yapılarınızı yerel Xcode'unuzda yaparsanız, saklamanız gereken tüm yapılar için projenizin arşivini alma alışkanlığı edinin. Gibi bir şey: 1. Ürün -> Arşiv

  1. Dağıt ... iOS App Store'a gönderin / Kurumsal veya Geçici Dağıtım için Kaydet / ne var

  2. Finder'da proje klasörünüzü gösterin

  3. Sağ tıklayın ve "WhateverProject" sıkıştır

Bu, uygulamayı oluşturmak için kullanılan tüm proje ve çalışma alanı ayarları ile CocoaPod'ları kullansalar da kullanmasalar da ikili dağıtımları (Sparkle, TestFlight gibi tescilli SDK'ler vb.) İçeren tüm projenin yerleşik bir görüntüsünü sağlar.

Güncelleme: Bu konuda fikrimi değiştirdim ve şimdi Podfile.lockkaynak kontrolünü taahhüt ediyorum . Bununla birlikte, bölmelerin kendilerinin yapay nesneler oluşturduğuna ve CI sunucunuz gibi başka bir yöntemle veya yukarıda açıkladığım gibi bir arşivleme işlemiyle kaynak kontrolü dışında yönetilmesi gerektiğine inanıyorum.


23
Cocoapods özellikle check-in yapılmasını önerir Podfile.lock: docs.cocoapods.org/guides/working_with_teams.html
cbowns

İlginç. Yana Podfile.lockyerel kapsüllere yollarında sufleler, ben sürüm kontrolü eklemeden kabul etmemişti. Ancak, şimdi düşündüğüme göre, yaptığım yerel değişikliklerden farklı değil Podfileama asla taahhüt etmiyorum . Bunu işaret ettiğiniz için teşekkürler.
Alex Nauda

Ekiplerle çalışma bağlantısı değişti mi? Podfile.lockDosya hakkında hiçbir şeyden bahsetmez .
ingh.am

4
@ ing0 Yeni bağlantının bu
phi

Podfile.lock içinde kontrol etmenin avantajı, kapsüllerinizden veya bağımlılıklarından herhangi birinin yükseltilip yükseltilmediğinin açık olmasıdır.
Tim Potter

11

Birlikte Podsdizini yürütmeyi Podfileve Podfile.lockekibimdeki herhangi bir kişinin kaynağı her zaman kontrol edebildiğinden emin olmak için tercih ediyorum ve hiçbir şey için endişelenmeleri veya çalışmasını sağlamak için ek şeyler yapmaları gerekmiyor.

Bu ayrıca, kapsüllerden birinin içindeki bir hatayı düzelttiğiniz veya ihtiyaçlarınıza göre bazı davranışları değiştirdiğiniz bir senaryoda yardımcı olur, ancak bu değişiklikler taahhüt edilmezse diğer makinelerde kullanılamaz.

Ve gereksiz dizinleri yok saymak için:

xcuserdata/

10

Şunu söylemeliyim ki, depoya bakla bakma hayranıyım. Zaten belirtilen bir bağlantıyı takip etmek, Pod'lara izin vermek için iOS için Xcode projelerinizi almak için iyi bir .gitignore dosyası verecektir, ancak isterseniz bunları kolayca hariç tutmanız için: https://github.com/github/gitignore/ leke / ana / Amaç-C.gitignore

Depoya Pod'ları ekleme hayranı olduğumun sebebi, kimsenin almayacağı temel bir nedendir, projemizin bu kadar bağımlı olduğu bir kütüphane aniden web'den kaldırılırsa ne olur?

  • Belki de ev sahibi artık GitHub hesabını açık tutmak istemediklerine karar veriyor Kütüphane birkaç yaşındaysa (örneğin 5 yaşından daha eski gibi) projenin artık kaynakta mevcut olmayacağı konusunda yüksek bir risk var
  • Ayrıca başka bir nokta, deponun URL'si değişirse ne olur? Bakalım Pod'a GitHub hesabından hizmet veren kişi, kendilerini farklı bir tanıtıcı altında göstermeye karar verdi - Pods URL'leriniz kırılacak.
  • Sonunda başka bir nokta. Benim gibi ülkeler arasında uçuş yaparken çok fazla kodlama yapan bir geliştirici olup olmadığınızı söyleyin. Havaalanında otururken, 'ana' dalı hızlı bir şekilde çekiyorum, o dalda bir kapsül kurulumu yapıyorum ve kendimi yaklaşan 8 saatlik uçuşa ayarlıyorum. Uçuşumda 3 saat var ve başka bir şubeye geçmem gerektiğini anlıyorum .... 'DOH' - sadece 'ana' dalda bulunan Pod bilgilerini eksik.

Not ... geliştirme için 'ana' dalın sadece örneklere yönelik olduğunu, açıkçası sürüm kontrol sistemlerindeki 'ana' dalların temiz ve konuşlandırılabilir / oluşturulabileceğini unutmayın.

Bunlardan, kod depolarınızdaki anlık görüntülerin kesinlikle depo boyutunda katı olmaktan daha iyi olduğunu düşünüyorum. Daha önce de belirtildiği gibi, podfile.lock dosyası - kontrol edilen sürüm size Pod sürümlerinizin iyi bir geçmişini verecektir.

Günün sonunda, acil bir son teslim tarihiniz, sıkı bir bütçeniz varsa, zaman çok önemlidir - mümkün olduğunca becerikli olmalıyız ve katı ideolojilere zaman kaybetmemeliyiz ve bunun yerine birlikte çalışmak için bir dizi araç kullanmalıyız - hayatımızı daha verimli hale getirmek.


2
Bu, "Kaynak kontrolüne bağımlılıklarımı kontrol ediyor muyum?" Yaşlanmayan sorunun en iyi yanıtlarından biridir. İlk olarak, akıl yürütmeniz için somut, riske dayalı, iş gerekçelerini açıklarsınız. İkincisi, herkese günün sonunda, en iyi çözümün işi yapan ve insanları birlikte çalıştıran şey olduğunu hatırlatıyorsunuz. Dini denklemden çıkarıyorsunuz. İyi iş!
Brandon

8

Sonunda aldığınız yaklaşım size kalmış.

Cocoapods ekibi bunun hakkında düşünüyor:

İş akışları projeden projeye değiştiğinden, Pod klasörünüzü kontrol edip etmediğiniz size bağlıdır. Bölme dizinini kaynak denetimi altında tutmanızı ve .gitignore klasörünüze eklememenizi öneririz. Ama nihayetinde bu karar size kalmış.

Şahsen ben tutmak istiyorum Pod'umuz olarak, dışarı node_modules ben kullanıyormuş Düğüm ya bower_components ben kullanıyormuş Bower . Bu, hemen hemen her Bağımlılık Yöneticisi için geçerlidir ve git alt modüllerinin arkasındaki felsefedir .

Ancak bazen belirli bir bağımlılığın son teknoloji ürünü olduğundan gerçekten emin olmak isteyebilirsiniz , bu şekilde projenizdeki bağımlılığı kendiniz taşırsınız. Elbette bunu yaparsanız geçerli olan bazı dezavantajlar vardır, ancak endişeler sadece Cocoapod'lar için geçerli değildir, bunlar herhangi bir Bağımlılık Yöneticisi için geçerlidir.

Aşağıda, Cocoapods ekibi tarafından yapılan iyi bir artılar / eksiler listesi ve daha önce bahsedilen teklifin tam metni var.

Cocoapods ekibi: Pods dizinini kaynak kontrolünde kontrol etmeli miyim?


8

Kişisel olarak şunlara bağlıdır:

Kapsüller neden repo'nun bir parçası olmalı (kaynak kontrolü altında) ve göz ardı edilmemelidir

  • Kaynak aynı
  • Hemen olduğu gibi inşa edebilirsiniz (kakao olmadan bile)
  • Bir bölme silinmiş olsa bile, hala bir kopyasına sahibiz (Evet, bu olabilir ve oldu. Sadece küçük bir değişiklik istediğiniz eski bir projede, inşa edebilmek için yeni bir kitaplık uygulamanız gerekir).
  • pods.xcodeprojayarlar da kaynak kontrolünün bir parçasıdır. Bu, örneğin, projeniz varsa swift 4, ancak swift 3.2henüz güncellenmedikleri için bazı bölmelerin içinde olması gerektiği anlamına gelir , bu ayarlar kaydedilecektir. Aksi takdirde repoyu klonlayan kişi hatalarla sonuçlanacaktı.
  • Bölmeleri her zaman projeden silebilir ve çalıştırabilirsiniz pod install, tersi yapılamaz.
  • Cocoapod'ların yazarları bile bunu tavsiye ediyor.

Bazı eksileri: daha büyük depo, kafa karıştırıcı farklar (çoğunlukla ekip üyeleri için), potansiyel olarak daha fazla çatışma.


2

Benim için en büyük endişe kaynağınızı gelecekte kanıtlamak. Projenizin bir süre devam etmesini planlıyorsanız ve CocoaPods hiç kaybolursa veya kapsüllerden birinin kaynağı azalırsa, bir arşivden yeni bir şeyler oluşturmaya çalışırsanız tamamen şansınız kalmaz.

Bu, periyodik tam kaynak arşivlerle hafifletilebilir.


2

Bölmeleri kontrol edin.

Bunun bir yazılım geliştirme ilkesi olması gerektiğini düşünüyorum

  • Tüm yapılar tekrar üretilebilir olmalıdır
  • Yapıların tekrarlanabilir olmasını sağlamanın tek yolu tüm bağımlılıkların kontrolünde olmaktır; bu nedenle tüm bağımlılıkları kontrol etmek şarttır.
  • Sıfırdan başlayan yeni bir geliştirici projenizi kontrol edebilecek ve çalışmaya başlayabilecektir.

Neden?

CocoaPod'lar veya diğer harici kütüphaneler değişebilir ve bu da işleri bozabilir. Veya hareket edebilir veya yeniden adlandırılabilir veya tamamen kaldırılabilirler. Sizin için bir şeyler saklamak için internete güvenemezsiniz. Dizüstü bilgisayarınız ölmüş olabilir ve üretimde düzeltilmesi gereken kritik bir hata vardır. Ana geliştirici bir otobüse çarpabilir ve yerine acele etmek gerekir. Ve sonuncunun teorik bir örnek olmasını isterdim ama aslında birlikte olduğum bir başlangıçta oldu. HUZUR İÇİNDE YATSIN.

Şimdi, gerçekçi olarak, TÜM bağımlılıkları gerçekten kontrol edemezsiniz. Derlemeler oluşturmak için kullandığınız makinenin görüntüsünü kontrol edemezsiniz; derleyicinin tam sürümünü kontrol edemezsiniz. Ve bunun gibi. Gerçekçi sınırlar var. Ama yapabileceğiniz her şeyi kontrol edin - bunu yapmamak sadece hayatınızı zorlaştırır. Ve bunu istemiyoruz.

Son kelime: Kapsüller yapı değildir. Yapı yapıları, yapılarınızdan üretilen şeydir. Yapınız Pod'ları kullanıyor, onları değil. Bunun neden tartışılması gerektiğinden bile emin değilim.


2

Sürüm kontrolünü kontrol etmemenin artıları Pods/(öznel önem sırasına göre):

  1. Taahhütleri birleştirmek ve kod farklarını gözden geçirmek çok daha kolay. Birleştirme, kod tabanındaki yaygın bir sorun kaynağıdır ve bu yalnızca uygun olan şeylere odaklanmanızı sağlar.
  2. Bazı rastgele katkıda bulunanların bağımlılıkları kendileri düzenlemeleri ve asla yapmamaları gereken değişiklikleri kontrol etmesi imkansızdır (ve farkın büyük olup olmadığını tekrar tanımlamak zor olacaktır). Bağımlılıkları düzenlemek çok kötü bir uygulamadır çünkü gelecek pod installdeğişiklikleri değiştirebilir.
  3. Arasındaki farklılıklar Podfileve Pods/dizine çabuk ekip üyeleri arasında bulunurlar. Check-in yapar Pods/ve örneğin, bir sürümü güncellerseniz Podfileancak pod installdeğişiklikleri çalıştırmayı veya kontrol etmeyi unutursanız Pods/, tutarsızlığın kaynağını fark etmek için çok daha zor zamanınız olacaktır. Check- Pods/in yapılmazsa, her zaman pod installyine de çalıştırmanız gerekir .
  4. Daha küçük repo boyutu. Daha küçük bir bayt ayak izine sahip olmak güzeldir, ancak büyük şemada bu önemli değildir. Daha da önemlisi, repoda daha fazla şeye sahip olmak da bilişsel yükünüzü artırır. Depoda bakmamanız gereken şeyler olması için hiçbir neden yok. Kodda değil (uygulamada) bir şeyin nasıl çalıştığını öğrenmek için belgelere (soyutlama) bakın.
  5. Birinin ne kadar katkıda bulunduğunu fark etmek daha kolaydır (katkıda bulunduğu kod satırları yazmadıkları bağımlılıkları içermez)
  6. JARdosyaları, .venv/(sanal ortamlar) ve node_modules/asla sürüm denetimine dahil edilmez. Söz konuda tamamen agnostik olsaydı, değil kontrol Podsemsal dayalı varsayılan olacaktır.

Kontrol etmeme eksileriPods/

  1. Sen çalıştırmalısınız pod installdalları arasında geçiş yapma ve hareketin geri alırken.
  2. Sadece depoyu klonlayarak bir proje yürütemezsiniz. Bölme aracını yüklemeniz ve ardından çalıştırmanız gerekir pod install.
  3. Çalıştırmak için İnternet bağlantınızın olması pod installve kapsüllerin kaynağının kullanılabilir olması gerekir.
  4. Bir bağımlılığın sahibi paketini kaldırırsa, başınız belada demektir.

Özetle, dahil değilPods dizin daha kötü uygulamalara karşı bir oto korkuluk olduğunu. DahilPods kolay projeyi çalışan dizin yapar. Birincisini ikincisine tercih ederim. Sen "hakkında bir proje üzerinde her yeni kişi sorguya çekmek gerekmez değil ilk etapta bazı hatalar yapmak için bir olasılık yoksa yapmak". Ayrıca PodsEksilerini hafifleten ayrı bir sürüm kontrolüne sahip olma fikrini seviyorum .


1

Teorik olarak, Pods dizinini kontrol etmelisiniz. Uygulamada, her zaman işe yaramayacaktır. Birçok bölme de github dosyalarının boyut sınırını aşar, bu nedenle github kullanıyorsanız, Pods dizininde kontrol sorunları yaşayacaksınız.


1

TL; DR: Pods/klasörü izlediğinizde, projenin alınması daha kolaydır. İzlemediğinizde, bir ekipte çalışırken geliştirmeniz daha kolaydır.

Cocoapods organizasyonu Pods/dizini izlememizi teşvik etse de , bu artıları ve eksileri temel alarak yapılıp yapılmayacağına karar vermenin geliştiricilere bağlı olduğunu söylüyorlar:  http://guides.cocoapods.org/using/using-cocoapods.html #-i-kontrol etmelisiniz--pod-dizinini-içine-kaynak-kontrol

Şahsen, genellikle Pods/bir süre üzerinde çalışmayacağım projeler için klasörü izlerim . Bu şekilde, herhangi bir geliştirici hızlı bir şekilde ondan alabilir ve kokoapodların uygun sürümünü kullanarak çalışmaya devam edebilir.

Öte yandan, taahhüt geçmişi daha temiz ve Pods/klasörü birleştirmek değilken kodu birleştirmek ve başka bir kişinin kodunu incelemek daha kolay olduğunu düşünüyorum . Herkesin benimle aynı sürümleri kullanarak projeyi yükleyebildiğinden emin olmak için yüklediğimde genellikle cocoapod kütüphanesinin sürümünü ayarladım.

Ayrıca, Pods/dizin izlenirken, tüm geliştiriciler, pod installbir kapsül eklemek / kaldırmak için her çalıştırdığımızda düzinelerce dosyayı değiştirmesini önlemek için Cocoapod'ların aynı sürümünü kullanmalıdır .

Alt satır : Pods/klasörü izlediğinizde, projenin seçilmesi daha kolaydır. İzlemediğinizde iyileştirmek daha kolaydır.


0

Bu yapılandırmak için iyi bir yol gibi görünüyor gerçekten bir git alt modül / ayrı proje olarak "Pod" dizini olması olurdu, İşte nedeni.

  • Proje deponuzda bölmelere sahip olmak, birkaç geliştiriciyle çalışırken, insanların değiştirdiği gerçek işi görmenin neredeyse imkansız olduğu çekme isteklerinde ÇOK BÜYÜK farklara neden olabilir (kütüphaneler için birkaç yüz ila binlerce dosyanın değiştiğini düşünün ve fiili projede çok azı değişti).

  • Gitmek için hiçbir şey yapmama konusunu görüyorum, çünkü kütüphaneye sahip olan kişi her zaman indirebilir ve aslında SOL'sunuz, bu da bunu çözüyor.


0

İş akışları projeden projeye değiştiğinden, Pod klasörünüzü kontrol edip etmediğiniz size bağlıdır. Bölme dizinini kaynak denetimi altında tutmanızı ve .gitignore klasörünüze eklememenizi öneririz. Ama sonuçta bu karar size kalmış:

Kapsüller dizininde kontrol etmenin faydaları

  1. Repoyu klonladıktan sonra, proje, CocoaPod'ların makineye takılı olmasa bile derhal inşa edilip çalıştırılabilir. Kapsül yüklemesini çalıştırmaya gerek yoktur ve Internet bağlantısı gerekmez.
  2. Pod kaynağı (kod / kitaplıklar), Pod kaynağı (örneğin GitHub) aşağı inse bile her zaman kullanılabilir.
  3. Pod yapılarının, repoyu klonladıktan sonra orijinal kurulumdakilerle aynı olduğu garanti edilir.

Bölme dizinini görmezden gelmenin faydaları

  1. Kaynak kontrol deposu daha küçük olacak ve daha az yer kaplayacaktır. Tüm Pod'lar için kaynaklar (örn. GitHub) mevcut olduğu sürece, CocoaPods genellikle aynı kurulumu yeniden oluşturabilir. Bu özellikle Pod dosyasında zip dosyaları kullanırken geçerlidir.)
  2. Farklı Pod sürümleriyle şubeleri birleştirmek gibi kaynak kontrol işlemleri gerçekleştirilirken başa çıkmak için herhangi bir çakışma olmayacaktır. Pods dizininde kontrol edip etmemeniz, Podfile ve Podfile.lock her zaman sürüm kontrolü altında tutulmalıdır.

Bu bağlantıyı herhangi bir şüphe için kullanabilirsiniz: guides.cocoapods.org/using/…
Mahna
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.