Я понимаю, что следующая команда обновит один модуль: pod update <podname>
. Однако это также обновляет зависимости других модулей (модулей, которые не были включены в команду обновления), которые вы ранее установили. Есть ли способ обновить один модуль и оставить все остальные зависимости в покое?
Как обновить один модуль, не затрагивая другие зависимости
Ответы (9)
Убедитесь, что у вас установлена последняя версия CocoaPods.
$ pod update PODNAME
был представлен недавно.
Дополнительную информацию см. в этой теме:
обновление пакета $
Когда вы запустите
pod update SomePodName
, CocoaPods попытается найти обновленную версию pod SomePodName, не принимая во внимание версию, указанную вPodfile.lock
. Он обновит модуль до последней возможной версии (при условии, что она соответствует ограничениям версии в вашем подфайле).Если вы запустите обновление модуля без имени модуля, CocoaPods обновит каждый модуль, указанный в вашем подфайле, до последней возможной версии.
$ pod update SomePodName
. Однако в некоторых случаях CocoaPods также пытается обновить зависимости других модулей. Короче говоря, SomePodName — не единственный модуль, который в некоторых случаях будет обновляться.
- person ken; 14.10.2014
pod install
, она возвращается к исходной версии. Но я не хочу потерять свои изменения
- person Shamsiddin; 21.05.2015
pod install
вместо pod update
. да. Он по-прежнему обновляет кучу файлов в каталоге Pods, НО, если вы внимательно посмотрите: это все служебные файлы для модулей, а не настоящий код, поэтому единственным измененным модулем будет тот, который вы удалили из Podfile.
- person Andrei Konstantinov; 19.08.2015
pod update
касается всего. Он не делает того, что написано на банке, и это очень расстраивает. Случайным образом удаляет заголовки из других модулей, которые вы не сказали трогать, и т. д.
- person Luke; 24.11.2015
Чтобы установить один модуль без обновления существующих, добавьте этот модуль в свой подфайл и используйте:
pod install --no-repo-update
Чтобы удалить/обновить конкретный модуль, выполните следующие действия:
pod update POD_NAME
Проверено!
It's 2015
Так как pod update SomePod
затрагивает все в последних версиях Cocopods, я нашел обходной путь.
Выполните следующие шаги:
Удалить
SomePod
изPodfile
Беги
pod install
модули теперь удалят SomePod
из нашего проекта и из файла Podfile.lock
.
Верните
SomePod
вPodfile
Запустите
pod install
еще раз
На этот раз последняя версия нашего модуля будет установлена и сохранена в папке Podfile.lock
.
pod update somepod anotherpod thirdpod
для одновременного обновления нескольких модулей :)
- person Entea; 05.04.2016
SomePod
будет обновлен до последних зависимостей, не обновит ли он общую зависимость anotherPod
до последней? Разве это не произойдет независимо от того, что находится в подлоке? В противном случае он не сможет удовлетворить требования SomePod
- person Honey; 16.09.2019
просто говорю:
pod install
- для установки новых подов,
pod update
- для обновления существующих модулей,
pod update podName
- для обновления только определенного модуля, не касаясь других модулей,
pod update podName versionNum
- для обновления / ПОНИЖЕНИЯ определенного модуля, не касаясь других модулей.
pod
вместо git
?
- person ken; 11.12.2018
Вы никогда не сможете получить 100% изоляцию. Поскольку у модуля могут быть некоторые общие зависимости, и если вы попытаетесь обновить свой единственный модуль, он также обновит зависимости других модулей. Если это нормально, то:
тл; др использовать:
pod update podName
Почему? Читай ниже.
pod update
НЕ будет уважатьpodfile.lock
. Он переопределит его, относящийся к этому отдельному пакету.pod install
будет уважатьpodfile.lock
, но попытается установить каждый pod, упомянутый в podfile, на основе версий, к которым он заблокирован (в Podfile.lock).
Эта диаграмма помогает лучше понять различия:
Основная проблема связана с ~>
, также известным как оптимистичный оператор.
Использование точных версий в Podfile
недостаточно
Некоторые могут подумать, что указания точных версий своих модулей в их Podfile
, например pod 'A', '1.0.0'
, достаточно, чтобы гарантировать, что у каждого пользователя будет та же версия, что и у других людей в команде.
Затем они могут даже использовать pod update
, даже просто добавляя новый модуль, думая, что никогда не рискуют обновить другие модули, потому что они привязаны к определенной версии в Podfile
.
Но на самом деле этого недостаточно, чтобы гарантировать, что user1 и user2 в нашем вышеприведенном сценарии всегда будут получать одну и ту же версию всех своих модулей.
Один типичный пример: модуль A
имеет зависимость от модуля A2
, объявленного в A.podspec
как dependency 'A2', '~> 3.0'
. В таком случае использование модуля 'A', '1.0.0'
в вашем подфайле действительно заставит пользователей user1 и user2 всегда использовать версию 1.0.0 модуля A, но:
- user1 может получить модуль
A2
версии3.4
(поскольку это была последняя версияA2
на тот момент) - в то время как когда user2 запускает
pod install
при присоединении к проекту позже, он может получить podA2
в версии3.5
(поскольку сопровождающийA2
мог тем временем выпустить новую версию). Вот почему единственный способ убедиться, что каждый член команды работает с одними и теми же версиями всех модулей на каждом компьютере, — это использоватьPodfile.lock
и правильно использоватьpod install
вместоpod update
.
Весь приведенный выше отрывок был получен из установки модуля и обновления модуля.
Я также настоятельно рекомендую посмотреть что делает podfile.lock
Просто небольшое уведомление.
pod update POD_NAME
будет работать, только если этот модуль уже установлен. В противном случае вам придется обновить их все с помощью
pod update
команда
pod install
, который установит только отсутствующие, не трогая остальные. Хотя нет смысла обновлять модуль, который вы не установили, не так ли?
- person aramusss; 18.12.2019
Я использую cocoapods version 1.0.1
, а pod update name-of-pod
работает отлично. Никакие другие модули не обновляются, только тот, который вы вводите.
Это немного необычно и вряд ли это то, с чем имел дело OP, но pod update <podname>
не будет работать во всех случаях, если вы используете локальный модуль на своем компьютере.
В этой ситуации единственное, что заставит pod update
работать, — это изменение файла podspec. Однако внесение изменений также позволит pod install
работать.
В этой ситуации вы можете просто изменить что-то незначительное, например описание или сводку, на одну букву, а затем успешно запустить команду установки или обновления.
pod update POD_NAME
обновит последний модуль, но не обновит файл Podfile.lock
.
Таким образом, вы можете обновить свой подфайл определенной версией вашего модуля, например pod 'POD_NAME', '~> 2.9.0'
, а затем использовать команду pod install
Позже вы можете удалить конкретное наименование версии из своего подфайла и снова использовать pod install
. Это поможет обновлять Podfile.lock
.
podfile.lock
есть. Смотрите ссылку и видео, на которое она ссылается. - person Honey   schedule 23.07.2019