Cara memperbarui satu pod tanpa menyentuh dependensi lainnya


202

Saya mengerti bahwa perintah berikut akan memperbarui pod tunggal: pod update <podname>. Namun ini juga memperbarui dependensi pod lain (pod yang tidak termasuk dalam perintah pembaruan) yang telah Anda instal sebelumnya. Apakah ada cara untuk memperbarui satu pod dan membiarkan semua dependensi lainnya sendirian?


1
Untuk memahami perbedaannya, Anda harus terlebih dahulu memahami apa itu a podfile.lock. Lihat tautan dan video yang dirujuknya.
Sayang

Jawaban:


286

Pastikan Anda telah menginstal CocoaPods versi terbaru. $ pod update PODdiperkenalkan baru-baru ini.

Lihat utas masalah ini untuk informasi lebih lanjut :

$ pod pembaruan

Ketika Anda menjalankan pod update SomePodName, CocoaPods akan mencoba menemukan versi terbaru dari pod SomePodName, tanpa memperhitungkan versi yang terdaftar di Podfile.lock. Ini akan memperbarui pod ke versi terbaru yang mungkin (asalkan cocok dengan batasan versi di Podfile Anda).

Jika Anda menjalankan pembaruan pod tanpa nama pod, CocoaPods akan memperbarui setiap pod yang terdaftar di Podfile Anda ke versi terbaru.


19
Terima kasih atas tanggapannya @mattt, saya mendapatkan CocoaPods versi terbaru (0.34.2) dan saya sudah mencoba $ pod update SomePodName. Namun, ada beberapa kasus di mana CocoaPods juga akan mencoba memperbarui dependensi pod lainnya. Singkatnya, SomePodName bukan satu-satunya pod yang akan diperbarui dalam beberapa kasus.
ken

2
@mattt, tidakkah Anda tahu cara memasang pod tertentu tanpa memperbarui yang sudah diinstal?
Shamsiddin

1
ketika saya sendiri memodifikasi beberapa dependensi dan menjalankannya pod installkembali ke versi aslinya. Tetapi saya tidak ingin kehilangan perubahan saya
Shamsiddin

2
@ mattt, dependensi yang saya maksudkan bukanlah dependensi pod yang sedang diperbarui. Saya pikir saya tidak menyusun pertanyaan dengan cukup baik tetapi dengan asumsi kita memperbarui pod A, beberapa pod lain yang bukan dependensi pod A juga diperbarui. Ngomong-ngomong, ini adalah pertanyaan lama, jadi tidak yakin apakah ini sudah diperbaiki sejak saat itu ..
ken

8
pod updatemenyentuh segalanya. Itu tidak melakukan apa yang tertulis di kaleng, dan itu sangat membuat frustrasi. Secara acak menghapus tajuk dari pod lain yang belum Anda suruh disentuh, dll.
Luke

185

Untuk menginstal satu pod tanpa memperbarui yang ada-> Tambahkan pod itu ke Podfile Anda dan gunakan:

pod install --no-repo-update

Untuk menghapus / memperbarui penggunaan pod tertentu:

pod update POD_NAME

Diuji!


49

Ini tahun 2015

Jadi karena pod update SomePod menyentuh semuanya dalam versi terbaru cocoapods, saya menemukan solusinya.

Ikuti langkah selanjutnya:

  1. Hapus SomePoddariPodfile

  2. Lari pod install

pod sekarang akan dihapus SomePoddari proyek kami dan dari Podfile.lockfile.

  1. Masukkan kembali SomePodke dalamPodfile

  2. Lari pod installlagi

Kali ini versi terbaru dari pod kami akan dipasang dan disimpan di Podfile.lock.


Anda juga dapat menggunakan trik yang saya jawab di sini stackoverflow.com/questions/29901337/...
Qiulang

17
Anda juga dapat melakukan pod update somepod anotherpod thirdpodpembaruan beberapa pod sekaligus :)
Entea

Ini sangat pintar. Anda melakukannya dalam dua langkah independen dan mengandalkan podfile.lock untuk menjaga dependensi lainnya tetap utuh. Saya hanya ingin tahu apakah SomePoddiperbarui ke dependensi terbaru bukankah itu memperbarui ketergantungan bersama anotherPodke terbaru? Tidakkah itu terjadi terlepas dari apa yang ada di podlock? Kalau tidak, itu tidak akan dapat memenuhi persyaratanSomePod
Honey

29

hanya mengatakan:

pod install - untuk menginstal pod baru,

pod update - untuk memperbarui pod yang ada,

pod update podName - untuk memperbarui hanya pod tertentu tanpa menyentuh pod lainnya,

pod update podName versionNum - untuk memperbarui / MENINGKATKAN pod tertentu tanpa menyentuh pod lainnya


Apakah maksud Anda podalih-alih git?
ken

Terkadang tidak, saya tidak tahu mengapa. Solusi latihan: 1. Hapus pod spesifik dari Podfile 2 .pod install 3. Tambahkan kembali pod spesifik ke Podfile 4. instal pod
yonivav

21

Hanya pemberitahuan kecil.

pod update POD_NAME

hanya akan berfungsi jika pod ini sudah diinstal. Kalau tidak, Anda harus memperbarui semuanya dengan

pod update

perintah


Anda masih dapat menggunakan pod installpertama, yang hanya akan menginstal yang hilang, tanpa menyentuh yang lain. Meskipun tidak ada gunanya ingin memperbarui pod yang belum Anda instal, kan?
aramuss

18

tl; dr gunakan:

pod update podName

Mengapa? Baca di bawah.

  • pod updateTIDAK akan menghormati podfile.lock. Itu akan menimpanya.
  • pod install akan menghormati podfile.lock

Diagram ini membantu lebih memahami perbedaan:

masukkan deskripsi gambar di sini


Masalah utama datang dari ~>operator alias optimis .

Menggunakan versi yang tepat dalam Podfiletidak cukup

Beberapa orang mungkin berpikir bahwa dengan menentukan versi yang tepat dari pod mereka Podfile, sukaipod 'A', '1.0.0' , sudah cukup untuk menjamin bahwa setiap pengguna akan memiliki versi yang sama dengan orang lain di tim.

Maka mereka bahkan mungkin menggunakan pod update , bahkan ketika hanya menambahkan pod baru, berpikir itu tidak akan mengambil risiko untuk memperbarui pod lain karena mereka diperbaiki ke versi tertentu di Windows Podfile.

Tetapi faktanya, itu tidak cukup untuk menjamin bahwa user1 dan user2 dalam skenario kami di atas akan selalu mendapatkan versi yang sama persis dari semua pod mereka.

Salah satu contoh khas adalah jika pod Amemiliki ketergantungan pada pod A2- dinyatakan A.podspecsebagai dependency 'A2', '~> 3.0'. Dalam kasus seperti itu, gunakan pod'A', '1.0.0' di Podfile Anda memang akan memaksa user1 dan user2 untuk keduanya selalu menggunakan versi 1.0.0 dari pod A, tetapi:

  • user1 mungkin berakhir dengan A2versi pod3.4 (karena ituA2 versi terbaru saat itu)
  • sementara ketika user2 berjalan pod installketika bergabung dengan proyek nanti, mereka mungkin mendapatkan pod A2dalam versi 3.5(karena pengelola A2mungkin telah merilis versi baru sementara itu). Itu sebabnya satu-satunya cara untuk memastikan setiap pekerjaan anggota tim dengan versi yang sama dari semua polong pada setiap Ini komputer adalah dengan menggunakan Podfile.lockdan benar menggunakan pod installvs pod update.

Kutipan di atas semuanya berasal dari instal pod vs pembaruan pod

Saya juga sangat merekomendasikan menonton apa yang podfile.lockharus dilakukan


9

Saya menggunakan cocoapods version 1.0.1dan menggunakan pod update name-of-podbekerja dengan sempurna. Tidak ada pod lain yang diperbarui, hanya yang spesifik yang Anda masukkan.


2

Ini sedikit outlier dan sepertinya bukan OP yang berurusan, tapi pod update <podname> tidak akan berfungsi dalam semua kasus jika Anda menggunakan pod lokal di komputer Anda.

Dalam situasi ini, satu-satunya hal yang akan memicu pod updateuntuk berfungsi adalah jika ada perubahan pada file podspec. Namun, membuat perubahan juga akan memungkinkanpod install bekerja juga.

Dalam situasi ini, Anda bisa memodifikasi sesuatu yang minor seperti deskripsi atau ringkasan dengan satu huruf, dan kemudian Anda dapat menjalankan perintah instal atau perbarui dengan sukses.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.