Diğer bağımlılıklara dokunmadan tek bir kapsülü güncelleme


202

Aşağıdaki komutu tek pod güncelleyecektir anlıyoruz: pod update <podname>. Ancak bu, daha önce yüklediğiniz diğer kapsüllerin (güncelleme komutunda bulunmayan kapsüllerin) bağımlılıklarını da güncelleştirir. Tek bir kapsülü güncellemenin ve diğer tüm bağımlılıkları tek başına bırakmanın bir yolu var mı?


1
Aradaki farkı anlamak için gereken öncelikle bir anlamak podfile.lockolduğunu. Bağlantıya ve referans aldığı videoya bakın.
Bal

Yanıtlar:


287

CocoaPods'un en son sürümünün kurulu olduğundan emin olun. $ pod update PODyakın zamanda tanıtıldı.

Daha fazla bilgi için bu konu başlığına bakın :

$ kapsül güncellemesi

Çalıştırdığınızda pod update SomePodName, CocoaPods, listelenen sürümü dikkate almadan SomePodName bölmesinin güncellenmiş bir sürümünü bulmaya çalışır Podfile.lock. Bölmeyi mümkün olan en son sürüme güncelleyecektir (Pod dosyanızdaki sürüm kısıtlamalarına uyduğu sürece).

Kapsül güncellemesini herhangi bir bölme adı olmadan çalıştırırsanız, CocoaPods Pod dosyalarınızda listelenen her bölmeyi mümkün olan en son sürüme güncelleyecektir.


19
@Mattt yanıtı için teşekkürler, CocoaPods'un en son sürümünü aldım (0.34.2) ve denedim $ pod update SomePodName. Bununla birlikte, CocoaPods'un diğer kapsüllerin bağımlılıklarını da güncellemeye çalışacağı bazı durumlar vardır. Uzun lafın kısası, SomePodName bazı durumlarda güncellenecek tek kapsül değildir.
ken

2
@mattt, önceden kurulu olanları güncellemeden belirli bölmeyi nasıl kuracağınızı bilmiyor musunuz?
Shamsiddin

1
kendimi biraz bağımlılık değiştirdiğimde ve çalıştırdığımda pod installorijinal sürümüne geri döner. Ama değişikliklerimi kaybetmek istemiyorum
Shamsiddin

2
@mattt, bahsettiğim bağımlılıklar güncellenen kapsülün bağımlılıkları değildi. Soruyu yeterince iyi yapılandırmadım, ancak A bölmesini güncellediğimizi varsayarsak, A bölmesinin bağımlılıkları olmayan diğer bölmeler de güncellenir. Bu arada eski bir soru, bu yüzden o zamandan beri düzeltilip düzeltilmediğinden emin değilim ..
ken

8
pod updateher şeye dokunur. Kalayda söylediklerini yapmaz ve çok sinir bozucudur. Rastgele, dokunmanızı söylemediğiniz diğer bölmelerdeki başlıkları rastgele kaldırır.
Luke

187

Mevcut olanları güncellemeden tek bir bölme kurmak için -> Bölmeyi Pod dosyalarınıza ekleyin ve kullanın:

pod install --no-repo-update

Belirli bir kapsülü kaldırmak / güncellemek için:

pod update POD_NAME

Test!


49

2015

Bu nedenle pod update SomePod, kakaapodların en son sürümlerindeki her şeye dokunduğundan, bir çözüm buldum.

Sonraki adımları izleyin:

  1. Kaldır SomePoddanPodfile

  2. Çalıştırmak pod install

kapsüller şimdi SomePodprojemizden ve Podfile.lockdosyadan kaldırılacak .

  1. SomePodİçine koymakPodfile

  2. pod installTekrar koş

Bu sefer bölmemizin en son sürümü yüklenecek ve kaydedilecektir Podfile.lock.


Burada cevapladığım hileyi de kullanabilirsiniz stackoverflow.com/questions/29901337/…
Qiulang

17
Aynı pod update somepod anotherpod thirdpodanda birden fazla
kapsülü

Bu çok zekice. Bunları iki bağımsız adımda yapıyorsunuz ve diğer bağımlılıkları sağlam tutmak için podfile.lock'a güveniyorsunuz. Diye merak ediyorum SomePodpaylaşılan bir bağımlılık içinde güncelleme olmaz en son bağımlılıkları için güncellenir anotherPodson için? Podlock'ta ne olduğuna bakılmaksızın bu gerçekleşmeyecek mi? Aksi takdirdeSomePod
Bal

29

sadece söylüyorum:

pod install - yeni kapsüller kurmak için,

pod update - mevcut kapsülleri güncellemek için,

pod update podName - diğer bölmelere dokunmadan yalnızca belirli bölmeyi güncellemek için,

pod update podName versionNum - diğer bölmelere dokunmadan belirli bölmeyi güncellemek / indirmek için


Şunu mu demek istediniz podyerine git?
ken

Bazen olmaz, nedenini bilmiyorum. Egzersiz çözümü: 1. Podfile 3. Yeniden eklenti belirli pod yüklemek .pod Podfile 2 Belirli pod çıkarın 4. pod yüklemek
yonivav

21

Sadece küçük bir uyarı.

pod update POD_NAME

yalnızca bu bölme önceden yüklenmişse çalışır. Aksi takdirde hepsini güncellemeniz gerekir

pod update

komuta


Hala kullanabilirsiniz pod installbaşkalarını dokunmadan, sadece eksik bir (s) kuracak olan ilk. Kurmadığınız bir kapsülü güncellemek istemek için bir kullanım durumu olmamasına rağmen, var mı?
aramusss

18

tl; dr kullanımı:

pod update podName

Neden? Alttarafı oku.

  • pod updatesaygı duymayacak podfile.lock. Geçersiz kılar.
  • pod install saygı duyacak podfile.lock

Bu diyagram farklılıkları daha iyi anlamaya yardımcı olur:

resim açıklamasını buraya girin


En büyük sorun ~>aka iyimser operatörden geliyor .

Sürümünde tam sürümleri kullanmak Podfileyeterli değildir

Bazıları onların kendi bölmelerin tam sürümlerini belirterek düşünebilir Podfilegibi pod 'A', '1.0.0', her kullanıcı ekibindeki diğer insanlarla aynı sürüme sahip olacağı garanti için yeterlidir.

Daha sonra pod update, sadece yeni bir kapsül eklerken bile, diğer bölmeleri güncellemeyi riske atmayacağını düşünerek bile kullanabilirler çünkü Podfile.

Ama aslında, yukarıdaki senaryomuzdaki user1 ve user2'nin her zaman tüm kapsüllerinin tam olarak aynı sürümünü alacağını garanti etmek yeterli değildir.

Tipik bir örnek, kapsülün A, olarak A2bildirilen kapsüle bağımlı olup olmadığıdır . Bu durumda, Pod dosyasında bölme kullanmak gerçekten de user1 ve user2'yi her zaman A bölmesinin 1.0.0 sürümünü kullanmaya zorlar, ancak:A.podspecdependency 'A2', '~> 3.0''A', '1.0.0'

  • user1 A2sürümü pod ile sonuçlanabilir 3.4(çünkü A2o zamanın en son sürümü idi)
  • user2 pod installprojeye daha sonra katıldığında çalıştığında A2, sürümde kapsül alabilirler 3.5(çünkü A2bakıcı bu arada yeni bir sürüm yayınlamış olabilir). Bu nedenle, her ekip üyesinin her bir bilgisayarın bilgisayarındaki tüm kapsülün aynı sürümleriyle çalışmasını sağlamanın tek yolu, vs. yöntemini Podfile.lockkullanmaktır .pod installpod update

Yukarıdaki alıntı, kapsül kurulumuna karşı kapsül güncellemesinden türetilmiştir.

Ayrıca ne işe yaradığını izlemenizi tavsiye ederimpodfile.lock


9

Çalışmaları mükemmel kullanıyorum cocoapods version 1.0.1ve kullanıyorum pod update name-of-pod. Başka hiçbir kapsül güncellenmez, yalnızca girdiğiniz özel bölme.


2

Bu biraz aykırı bir durumdur ve OP'nin uğraştığı şey pod update <podname>değildir , ancak bilgisayarınızda yerel bir bölme kullanıyorsanız her durumda çalışmayacaktır.

Bu durumda, pod updateçalışmayı tetikleyecek tek şey podspec dosyasında bir değişiklik olup olmadığıdır. Bununla birlikte, bir değişiklik yapmak da pod installçalışmaya izin verecektir .

Bu durumda, açıklama veya özet gibi küçük bir şeyi tek bir harfle değiştirebilir ve ardından install veya update komutunu başarıyla çalıştırabilirsiniz.

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.