Jak zaktualizować pojedynczy moduł bez dotykania innych zależności

201

Rozumiem, że następujące polecenie zaktualizuje jeden strąk: pod update <podname>. Jednak powoduje to również aktualizację zależności między innymi zasobnikami (zasobnikami, które nie były zawarte w poleceniu aktualizacji), które zostały wcześniej zainstalowane. Czy istnieje sposób na zaktualizowanie pojedynczego zasobnika i pozostawienie wszystkich innych zależności w spokoju?

rozpoznać
źródło
1
Aby zrozumieć różnicę, musisz najpierw zrozumieć, co to podfile.lockjest. Zobacz link i film, do którego się odwołuje.
Honey

Odpowiedzi:

285

Upewnij się, że masz zainstalowaną najnowszą wersję CocoaPods. $ pod update PODzostał wprowadzony niedawno.

Zobacz ten wątek, aby uzyskać więcej informacji :

Aktualizacja $ pod

Po uruchomieniu pod update SomePodNameCocoaPods spróbuje znaleźć zaktualizowaną wersję pod SomePodName, nie biorąc pod uwagę wersji wymienionej w Podfile.lock. Zaktualizuje pod do najnowszej możliwej wersji (pod warunkiem, że odpowiada ograniczeniom wersji w twoim Podfile).

Jeśli uruchomisz aktualizację zasobnika bez nazwy zasobnika, CocoaPods zaktualizuje każdy zasobnik wymieniony w pliku Podfile do najnowszej możliwej wersji.

mat
źródło
19
Dzięki za odpowiedź @mattt, mam najnowszą wersję CocoaPods (0.34.2) i próbowałem $ pod update SomePodName. Są jednak przypadki, w których CocoaPods spróbuje również zaktualizować zależności innych strąków. Krótko mówiąc, SomePodName nie jest jedynym zasobnikiem, który w niektórych przypadkach będzie aktualizowany.
Ken
2
@mattt, nie wiesz, jak zainstalować konkretną kapsułę bez aktualizacji już zainstalowanych?
Shamsiddin
1
kiedy sam modyfikuję niektóre zależności i uruchamiam pod install, przywraca to pierwotną wersję. Ale nie chcę stracić moich zmian
Shamsiddin
2
@mattt, zależności, o których mówiłem, nie były zależnościami aktualizowanego zasobnika. Wydaje mi się, że nie ustrukturyzowałem pytania wystarczająco dobrze, ale zakładając, że zaktualizujemy strąk A, niektóre inne strąki, które nie są zależnościami strąka A, również zostaną zaktualizowane. Nawiasem mówiąc, jest to stare pytanie, więc nie jestem pewien, czy to zostało naprawione od tego czasu ...
Ken
8
pod updatedotyka wszystkiego. Nie robi tego, co jest napisane na puszce i jest bardzo frustrujące. Losowo usuwa nagłówki z innych strąków, których nie kazałeś dotykać itp.
Luke
185

Aby zainstalować pojedynczą kapsułę bez aktualizacji istniejących-> Dodaj tę kapsułkę do pliku Podfile i użyj:

pod install --no-repo-update

Aby usunąć / zaktualizować konkretną kapsułę, użyj:

pod update POD_NAME

Przetestowany!

atulkhatri
źródło
49

Jest 2015 rok

Ponieważ pod update SomePoddotyka wszystkiego w najnowszych wersjach cocoapods, znalazłem obejście.

Wykonaj kolejne kroki:

  1. Usuń SomePodzPodfile

  2. Biegać pod install

strąki zostaną teraz usunięte SomePodz naszego projektu i z Podfile.lockpliku.

  1. Włóż z powrotem SomePoddoPodfile

  2. Uruchom pod installponownie

Tym razem najnowsza wersja naszego zasobnika zostanie zainstalowana i zapisana w Podfile.lock.

Danpe
źródło
Możesz także skorzystać z
podjętej przeze
17
Możesz także zrobić pod update somepod anotherpod thirdpodaktualizację wielu strąków jednocześnie :)
Entea,
To jest bardzo sprytne. Robisz je w dwóch niezależnych krokach i polegasz na pliku podfile.lock, aby utrzymać inne zależności bez zmian. Zastanawiam się tylko, czy SomePodzaktualizowano do najnowszych zależności, czy nie zaktualizowałoby współdzielonej zależności anotherPoddo najnowszej wersji? Czy to się nie stanie niezależnie od tego, co jest w podlocku? W przeciwnym razie nie będzie w stanie spełnić wymagańSomePod
Miód
28

tylko mówię:

pod install - do instalowania nowych strąków,

pod update - do aktualizacji istniejących strąków,

pod update podName - do aktualizacji tylko określonych kapsuł bez dotykania innych kapsuł,

pod update podName versionNum - do aktualizacji / obniżenia konkretnego zasobnika bez dotykania innych zasobników

yonivav
źródło
Miałeś na myśli podzamiast git?
Ken
Czasami tak nie jest, nie wiem dlaczego. Rozwiązanie treningu: 1. Usuń konkretną kapsułę z instalacji Podfile 2. .pod 3. Ponownie dodaj konkretną kapsułę do Podfile 4. Zainstaluj kapsułę
yonivav
21

Tylko mała informacja.

pod update POD_NAME

będzie działać tylko wtedy, gdy ten moduł został już zainstalowany. W przeciwnym razie będziesz musiał zaktualizować je wszystkie

pod update

Komenda

Neftanic
źródło
Nadal możesz użyć pod installpierwszego, który zainstaluje tylko brakujący (e), bez dotykania innych. Chociaż nie ma potrzeby, aby chcieć zaktualizować kapsułę, której jeszcze nie zainstalowałeś, prawda?
aramusss
18

tl; dr use:

pod update podName

Czemu? Czytaj poniżej.

  • pod updateNIE uszanuje podfile.lock. Zastąpi to.
  • pod install uszanuje podfile.lock

Ten schemat pomaga lepiej zrozumieć różnice:

wprowadź opis zdjęcia tutaj


Główny problem pochodzi od ~>optymistycznego operatora .

Używanie dokładnych wersji w Podfilenie wystarczy

Niektórzy mogą pomyśleć, że podanie dokładnych wersji swoich strąków Podfile, na przykład pod 'A', '1.0.0', wystarczy, aby zagwarantować, że każdy użytkownik będzie miał tę samą wersję, co inni ludzie w zespole.

Wtedy mogą nawet użyć pod update, nawet po prostu dodając nowy zasobnik, myśląc, że nigdy nie zaryzykuje aktualizacji innych zasobników, ponieważ są one ustawione na określonej wersji w Podfile.

Ale w rzeczywistości to nie wystarczy, aby zagwarantować, że użytkownik 1 i użytkownik 2 w powyższym scenariuszu zawsze otrzymają dokładnie taką samą wersję wszystkich swoich kapsuł.

Jednym z typowych przykładów jest Azależność kapsuły od kapsuły A2- zadeklarowanej A.podspecjako dependency 'A2', '~> 3.0'. W takim przypadku użycie kapsuły 'A', '1.0.0'w pliku Podfile zmusi zarówno użytkownika1, jak i użytkownika2, do korzystania zawsze z wersji 1.0.0 kapsuły A, ale:

  • użytkownik1 może skończyć z kapsułą A2w wersji 3.4(ponieważ była A2to najnowsza wersja w tym czasie)
  • podczas gdy użytkownik 2 uruchamia się pod installprzy dołączaniu do projektu później, może dostać A2wersję w wersji 3.5(ponieważ opiekun A2mógł w międzyczasie wydać nową wersję). Dlatego jedynym sposobem, aby upewnić się, każdy członek zespołu pracy z tymi samymi wersjami wszystkich strąków na każdym znajduje się komputer jest użycie Podfile.locki właściwie wykorzystywać pod installw porównaniu pod update.

Powyższy fragment pochodzi z instalacji pod w porównaniu z aktualizacją pod

Ja również bardzo polecam oglądania co robi podfile.lockDO

kochanie
źródło
9

Używam cocoapods version 1.0.1i używam pod update name-of-poddziała idealnie. Żadne inne kapsułki nie są aktualizowane, tylko ten, który wprowadzasz.

użytkownik3344977
źródło
2

Jest to nieco odstające i prawdopodobnie nie będzie to, z czym miał do czynienia OP, ale pod update <podname>nie będzie działać we wszystkich przypadkach, jeśli używasz lokalnego komputera na swoim komputerze.

W tej sytuacji jedyną rzeczą, która uruchomi się pod updatedo działania, jest zmiana pliku podspec. Jednak dokonanie zmiany pozwoli również na pod installpracę.

W tej sytuacji możesz po prostu zmodyfikować coś pomniejszego, na przykład opis lub streszczenie, za pomocą jednej litery, a następnie pomyślnie uruchomić polecenie instalacji lub aktualizacji.

CodeBender
źródło