Як оновити один струк, не торкаючись інших залежностей


202

Я розумію , що наступна команда буде оновлюватися один стручок: pod update <podname>. Однак це також оновлює залежності інших стручків (стручки, які не були включені до команди оновлення), які ви встановили раніше. Чи є спосіб оновити один струк і залишити всі інші залежності в спокої?


1
Щоб зрозуміти різницю, потрібно спершу зрозуміти, що podfile.lockтаке. Дивіться посилання та відео, на яке він посилається.
Мед

Відповіді:


285

Переконайтеся, що у вас встановлена ​​остання версія CocoaPods. $ pod update PODбула представлена ​​нещодавно.

Дивіться цю тему для отримання додаткової інформації :

$ pod оновлення

Під час запуску pod update SomePodNameCocoaPods спробує знайти оновлену версію стручка SomePodName, не враховуючи перелічену версію Podfile.lock. Він оновить поділ до останньої можливої ​​версії (доки він відповідає обмеженням версій у вашому Podfile).

Якщо ви запускаєте оновлення pod без будь-якого імені стручка, CocoaPods оновлює кожен струк, вказаний у вашому Podfile, до останньої можливої ​​версії.


19
Дякую за відповідь @mattt, я отримав останню версію CocoaPods (0.34.2), і я спробував $ pod update SomePodName. Однак є деякі випадки, коли CocoaPods також намагатиметься оновити залежності інших стручків. Якщо коротко розповісти, SomePodName - не єдиний струк, який оновлюється в деяких випадках.
кен

2
@mattt, ти не знаєш, як встановити конкретний стручок без оновлення вже встановлених?
Шамсіддін

1
коли я сам змінюю якусь залежність і запускаю, pod installвона повертається до початкової версії. Але я не хочу втрачати свої зміни
Шамсіддін

2
@mattt, залежності, про які я мав на увазі, не були залежність стручка, який оновлювався. Я думаю, що я не структурував це питання досить добре, але припускаючи, що ми оновлюємо стручок A, деякі інші стручки, які не залежать від стручка А, також оновлюються. Це до речі старе питання, тому не впевнений, чи це було виправлено з тих пір ..
ken

8
pod updateзачіпає все. Це не робить те, що написано на жерсті, і це дуже засмучує. Випадково видаляє заголовки з інших стручків, до яких ви не казали доторкатися тощо.
Лук

185

Щоб встановити один струк без оновлення існуючих-> Додайте його до свого Podfile та скористайтеся:

pod install --no-repo-update

Для видалення / оновлення певного користування стручком:

pod update POD_NAME

Перевірено!


49

Це 2015 рік

Так тому pod update SomePod стосується всього, що в останніх версіях какаодів, я знайшов вирішення.

Виконайте наступні дії:

  1. Видалити SomePodзPodfile

  2. Біжи pod install

Тепер стручки буде видалено SomePodз нашого проекту та з Podfile.lockфайлу.

  1. Поставте назад SomePodвPodfile

  2. Біжи pod installзнову

Цього разу остання версія нашого стручка буде встановлена ​​та збережена в Podfile.lock.


Ви можете також використовувати трюк я тут відповідь stackoverflow.com/questions/29901337 / ...
Qiulang

17
Ви також можете зробити pod update somepod anotherpod thirdpodоновлення декількох стручків одночасно :)
Entea

Це дуже розумно. Ви робите їх у два незалежні дії та покладаєтеся на podfile.lock, щоб зберегти інші залежності незмінними. Мені просто цікаво, якщо SomePodоновлений до останніх залежностей, чи не оновив би спільну залежність anotherPodдо останньої? Хіба це не відбудеться незалежно від того, що знаходиться в подлоку? Інакше він не зможе задовольнити вимогиSomePod
Honey

29

просто кажу:

pod install - для встановлення нових стручків,

pod update - для оновлення наявних стручків,

pod update podName - для оновлення лише конкретних стручків, не торкаючись інших стручків,

pod update podName versionNum - для оновлення / ЗАРАЗУВАННЯ конкретних стручків без торкання інших стручків


Ви мали на увазі podзамість git?
кен

Іноді це не так, я не знаю чому. Рішення для тренувань: 1. Видаліть конкретний струк з Podfile 2 .pod install 3. Повторіть додавання конкретного pod у Podfile 4. pod install
yonivav

21

Просто невелике повідомлення.

pod update POD_NAME

працюватиме лише в тому випадку, якщо цей стручок уже встановлений. Інакше вам доведеться оновити їх усі

pod update

командування


Ви все ще можете скористатися pod installпершою, яка встановить лише ті, що відсутні, не торкаючись інших. Хоча немає жодного випадку використання бажаючих оновити стручок, який ви не встановили, чи не існує?
aramusss

18

tl; dr використання:

pod update podName

Чому? Читай нижче.

  • pod updateНЕ поважатимуть podfile.lock. Це перекриє це.
  • pod install буде поважати podfile.lock

Ця діаграма допомагає краще зрозуміти відмінності:

введіть тут опис зображення


Основна проблема пов'язана з ~>оптимістичним оператором .

Використання точних версій у програмі Podfileнедостатньо

Дехто може подумати, що вказуючи точні версії своїх стручків у своїх Podfile, якpod 'A', '1.0.0' , достатньо, щоб гарантувати, що кожен користувач матиме таку ж версію, як і інші люди в команді.

Тоді вони навіть можуть використовувати pod update, навіть додаючи новий стручок, думаючи, що це ніколи не ризикне оновити інші стручки, оскільки вони закріплені за конкретною версією в Podfile.

Але насправді цього недостатньо, щоб гарантувати, що user1 та user2 у нашому вищезгаданому сценарії завжди отримають абсолютно таку ж версію всіх своїх стручків.

Один з типових прикладів, якщо стручок Aмає залежність від стручка A2- заявили в A.podspecякостіdependency 'A2', '~> 3.0' . У такому випадку використання pod 'A', '1.0.0'у вашому Podfile дійсно змусить user1 та user2 обидва завжди використовувати версію 1.0.0 стручка A, але:

  • user1 може закінчитися поділом A2 у версії 3.4(тому що це булоA2 остання версія на той час)
  • тоді як, коли user2 працює pod installпід час приєднання до проекту пізніше, вони можуть отримати струк A2у версії 3.5(тому що тех, хто підтримує, A2можливо, тим часом випустив нову версію). Ось чому єдиний спосіб забезпечити роботу кожного члена команди з однаковими версіями всіх стручків на комп'ютері кожного - це використовувати Podfile.lockта правильно використовувати pod installvs.pod update .

Наведений вище уривок був похідний встановлення pod та порівняння pod

Я також настійно рекомендую подивитися, що podfile.lockробити


9

Я використовую cocoapods version 1.0.1і використовую pod update name-of-podроботи ідеально. Жодна інша стручка не оновлюється, лише конкретна, яку ви ввели.


2

Це трохи чуже і, швидше за все, не те, чим займалася ОП, але pod update <podname> не буде працювати у всіх випадках, якщо ви використовуєте локальний стручок на комп’ютері.

У цій ситуації єдине, що призведе pod updateдо спрацьовування, - це зміни файлу podspec. Однак внесення змін також дозволитьpod install працювати також.

У цій ситуації ви можете просто змінити щось незначне, наприклад, опис або резюме одним листом, і тоді ви зможете успішно запустити команду встановлення або оновлення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.