Zajmuję się tworzeniem iOS od kilku miesięcy i właśnie poznałem obiecującą bibliotekę CocoaPods do zarządzania zależnościami.
Wypróbowałem to na osobistym projekcie: dodałem zależność od Kiwi do mojego Podfile, uruchomiłem pod install CocoaPodsTest.xcodeproj
i voila , działało świetnie.
Zastanawiam się tylko: co mam zameldować i co zignorować w przypadku kontroli wersji? Wydaje się oczywiste, że chcę sprawdzić sam plik Podfile i prawdopodobnie także plik .xcworkspace; ale czy mogę zignorować katalog Pods /? Czy są inne pliki, które zostaną wygenerowane w późniejszym czasie (kiedy dodam inne zależności), które powinienem również dodać do mojego .gitignore?
źródło
Podfile.lock
: Cocoapods przywołał go jako zalecany pod kontrolą wersji.Zatwierdzam mój katalog Pods. Nie zgadzam się, że katalog Pods jest artefaktem kompilacji. W rzeczywistości powiedziałbym, że zdecydowanie nie jest. Jest to część twojego źródła aplikacji: bez niego nie da się zbudować!
Łatwiej jest myśleć o CocoaPods raczej jako narzędziu dla programistów niż narzędziu do budowania. Nie buduje twojego projektu, po prostu klonuje i instaluje dla ciebie twoje zależności. Zainstalowanie CocoaPods nie powinno być konieczne, aby móc po prostu zbudować projekt.
Uczyniając CocoaPods zależnością twojej kompilacji, musisz teraz upewnić się, że jest ona dostępna wszędzie tam, gdzie możesz potrzebować zbudować swój projekt ... potrzebuje tego administrator zespołu, a serwer CI tego potrzebuje. Z reguły powinieneś zawsze mieć możliwość klonowania repozytorium źródłowego i budowania bez żadnego dodatkowego wysiłku.
Nieprzestrzeganie katalogu Pods powoduje również ogromny ból głowy, jeśli często zmieniasz gałęzie. Teraz musisz uruchomić instalację pod za każdym razem, gdy zmieniasz oddziały, aby upewnić się, że twoje zależności są poprawne. Może to być mniej kłopotliwe, gdy twoje zależności ustabilizują się, ale na wczesnym etapie projektu jest to ogromne ograniczenie czasowe.
Co mam zignorować? Nic. Podfile, plik blokady i katalog Pods zostają zatwierdzone. Zaufaj mi, dzięki temu zaoszczędzisz wiele kłopotów. Jakie są minusy? Nieco większe repo? To nie koniec świata.
źródło
Pods
katalogu sprawi ci ból, podczas gdy sprawdzanie go wiąże się również z własnym pakietem problemów. np. deweloper wpada na wersję zależnościPodfile
bez pamiętania o sprawdzeniu zaktualizowanych źródeł w Pods. Prawo Murphy'ego.pod install
za każdym razem, gdy zmieniasz oddział, kosztujesz cenne ... DZIESIĘĆ sekund - ale to całkowicie eliminuje tę klasę problemów.It won't build without it!
Polecam używać gitignore Objective-C w GitHub . W szczególności najlepsze praktyki to:
Podfile
Musi zawsze być pod kontrolą źródła.Podfile.lock
Musi zawsze być pod kontrolą źródła.:path
opcja, powinna być pod kontrolą źródła../Pods
Folderze może znajdować się pod kontrolą źródła.Więcej informacji można znaleźć w oficjalnym przewodniku .
źródło: Jestem członkiem podstawowego zespołu CocoaPods, jak @alloy
Chociaż folder Pods jest artefaktem kompilacji, istnieją powody, które można wziąć pod uwagę, decydując się na zachowanie kontroli nad źródłem:
:head
i:git
opcje i obecnie nie używają zatwierdzeń zapisanych wPodfile.lock
).źródło
plik .gitignore
Żadna odpowiedź faktycznie nie oferuje
.gitignore
, więc oto dwa smaki.Sprawdzanie w katalogu Pods ( Korzyści )
Git ignoruje przyjazne Xcode / iOS pomijanie plików systemowych Mac OS, Xcode, kompilacji, innych repozytoriów i kopii zapasowych.
.gitignore:
Ignorowanie katalogu Pods ( Korzyści )
.gitignore: (dołącz do poprzedniej listy)
Jeśli
Pods
nie sąPodfile
odprawieni, prawdopodobnie powinieneś poprosić o wyraźne numery wersji dla każdego Cocoapod. Dyskusja Cocoapods.org tutaj .źródło
Generalnie pracuję nad aplikacjami klientów. W takim przypadku dodam również katalog Pods do repozytorium, aby upewnić się, że w dowolnym momencie każdy programista może dokonać kasy, skompilować i uruchomić.
Gdyby to była nasza aplikacja, prawdopodobnie wykluczyłbym katalog Pods, dopóki nie będę nad nim pracował przez jakiś czas.
Właściwie muszę stwierdzić, że być może nie jestem najlepszą osobą, aby odpowiedzieć na twoje pytanie, w przeciwieństwie do poglądów czystych użytkowników :) Będę tweetować na ten temat z https://twitter.com/CocoaPodsOrg .
źródło
Sprawdzam wszystko. (
Pods/
iPodfile.lock
.)Chcę móc sklonować repozytorium i wiedzieć, że wszystko będzie działało tak, jak podczas ostatniego użycia aplikacji.
Wolę sprzedawać rzeczy, niż ryzykować różne wyniki, które mogą być spowodowane inną wersją klejnotu lub zapisaniem historii w repozytorium kapsuły itp.
źródło
Odpowiedź na to pytanie znajduje się bezpośrednio w dokumentach Cocoapod. Możesz spojrzeć na „ http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control ”
źródło
Jestem w obozie programistów, którzy nie sprawdzają bibliotek, zakładając, że mamy dobrą kopię dostępną w innej lokalizacji. Tak więc w moim .gitignore dołączam następujące wiersze specyficzne dla CocoaPods:
Następnie upewniam się, że mamy kopię bibliotek w bezpiecznym miejscu. Zamiast (błędnie) używać repozytorium kodu projektu do przechowywania zależności (skompilowanych lub nie). Myślę, że najlepszym sposobem na to jest zarchiwizowanie kompilacji. Jeśli używasz serwera CI do swoich kompilacji (takich jak Jenkins), możesz trwale zarchiwizować wszystkie kompilacje, które są dla Ciebie ważne. Jeśli wykonujesz wszystkie kompilacje produkcyjne w lokalnym Xcode, nałóż na siebie archiwum swojego projektu dla wszystkich kompilacji, które musisz zachować. Coś w stylu: 1. Produkt -> Archiwum
Dystrybucja ... Prześlij do iOS App Store / Save for Enterprise lub Ad-hoc Deployment / what you
Ujawnij folder projektu w Finderze
Kliknij prawym przyciskiem myszy i skompresuj „WhthingProject”
Zapewnia to obraz powykonawczy całego projektu, w tym kompletnych ustawień projektu i obszaru roboczego używanych do budowy aplikacji, a także dystrybucji binarnych (takich jak Sparkle, zastrzeżone zestawy SDK, takie jak TestFlight itp.), Niezależnie od tego, czy używają CocoaPods.
Aktualizacja: Zmieniłem zdanie na ten temat i teraz dokonuję
Podfile.lock
kontroli źródła. Jednak nadal uważam, że same kapsułki są artefaktami kompilacji i powinny być zarządzane jako takie poza kontrolą źródła, za pomocą innej metody, takiej jak serwer CI lub proces archiwizacji, jak opisano powyżej.źródło
Podfile.lock
: docs.cocoapods.org/guides/working_with_teams.htmlPodfile.lock
piec w ścieżkach do lokalnych strąków, nie zastanawiałem się nad dodaniem go do kontroli wersji. Jednak teraz, gdy o tym myślę, nie różni się on od lokalnych zmian, które wprowadzam,Podfile
ale nigdy nie zatwierdzam. Dzięki za zwrócenie na to uwagi.Podfile.lock
pliku.Wolę zatwierdzić
Pods
katalog wraz zPodfile
iPodfile.lock
upewnić się, że każdy w moim zespole może sprawdzić źródło w dowolnym momencie i nie musi się o nic martwić ani robić dodatkowych rzeczy, aby działało.Pomaga to również w scenariuszu, w którym naprawiono błąd w jednej z kapsuł lub zmodyfikowano niektóre zachowania zgodnie z potrzebami, ale zmiany te nie będą dostępne na innych komputerach, jeśli nie zostaną zatwierdzone.
I zignorować niepotrzebne katalogi:
źródło
Muszę powiedzieć, że jestem fanem angażowania kapsuł do repozytorium. Po kliknięciu już wspomnianego łącza otrzymasz dobry plik .gitignore, aby uzyskać dostęp do projektów Xcode na iOS, aby umożliwić korzystanie z Pod, ale także możesz je łatwo wykluczyć, jeśli chcesz: https://github.com/github/gitignore/ blob / master / Objective-C.gitignore
Moje powody, dla których jestem fanem dodawania kapsuł do repozytorium, są z jednego fundamentalnego powodu, którego nikt nie wydaje się zauważać. Co się stanie, jeśli biblioteka, od której tak zależy nasz projekt, zostanie nagle usunięta z sieci?
Uwaga: należy pamiętać, że gałąź „master” dla rozwoju jest tylko dla przykładów, oczywiście gałęzie „master” w systemach kontroli wersji powinny być utrzymywane w czystości i możliwe do wdrożenia / budowy w dowolnym momencie
Myślę, że z nich migawki w twoich repozytoriach kodu są z pewnością lepsze niż ścisłe rozmiar repozytorium. I jak już wspomniano, plik podfile.lock - podczas gdy wersja kontrolowana da ci dobrą historię twoich wersji Pod.
Na koniec dnia, jeśli masz pilny termin, napięty budżet, liczy się czas - musimy być tak zaradni, jak to możliwe i nie marnować czasu na surowe ideologie, a zamiast tego wykorzystać zestaw narzędzi do współpracy - aby nasze życie było łatwiejsze i bardziej wydajne.
źródło
Na końcu od Ciebie zależy, jakie podejmiesz podejście.
Tak myśli o tym zespół Cocoapods:
Osobiście chciałbym trzymać Pods z dala, jako moduły_węzłów, gdybym używał Węzła lub bower_components, jeśli użyłem Bowera . Dotyczy to prawie każdego menedżera zależności i jest to również filozofia stojąca za podmodułami git .
Czasami jednak możesz chcieć być naprawdę pewny co do najnowszego stanu zależności, w ten sposób posiadasz zależność w swoim projekcie. Oczywiście, jeśli to zrobisz, istnieje kilka wad, ale obawy dotyczą nie tylko Cocoapods, ale dotyczą każdego menedżera zależności.
Poniżej znajduje się dobra lista zalet / wad stworzona przez zespół Cocoapods oraz pełny tekst cytatu wspomnianego wcześniej.
Zespół Cocoapods: Czy powinienem sprawdzić katalog Pods w celu kontroli źródła?
źródło
To zależy osobiście:
Dlaczego strąki powinny być częścią repozytorium (pod kontrolą źródła) i nie powinny być ignorowane
pods.xcodeproj
ustawienia są również częścią kontroli źródła. Oznacza to, że np. Jeśli masz projektswift 4
, ale niektóre zasobniki muszą być dostępne,swift 3.2
ponieważ nie zostały jeszcze zaktualizowane, ustawienia te zostaną zapisane. W przeciwnym razie ten, kto sklonował repo, popełniłby błędy.pod install
, nie można tego zrobić odwrotnie.Niektóre minusy: większe repozytorium, mylące różnice (głównie dla członków zespołu), potencjalnie więcej konfliktów.
źródło
Dla mnie największym zmartwieniem jest sprawdzenie w przyszłości źródła. Jeśli planujesz, aby Twój projekt trwał przez jakiś czas, a CocoaPods kiedykolwiek zniknie lub źródło jednego ze strąków spadnie, nie będziesz miał szczęścia, jeśli spróbujesz zbudować świeżo z archiwum.
Można to złagodzić za pomocą okresowych pełnych archiwów źródłowych.
źródło
Sprawdź w kapsułach.
Myślę, że powinien to być dogmat tworzenia oprogramowania
Dlaczego?
CocoaPods lub dowolne inne biblioteki zewnętrzne mogą ulec zmianie, co może zepsuć wszystko. Albo mogą się przenieść, zmienić ich nazwę lub całkowicie usunąć. Nie możesz polegać na Internecie, aby przechowywać rzeczy dla siebie. Twój laptop mógł umrzeć i wystąpił krytyczny błąd w produkcji, który należy naprawić. Główny programista może zostać potrącony przez autobus, a jego zastępca musi zacząć działać w pośpiechu. I chciałbym, żeby ten ostatni był teoretycznym przykładem, ale tak naprawdę wydarzyło się przy startupie, z którym byłem. ROZERWAĆ.
Teraz, realistycznie, nie można tak naprawdę sprawdzać WSZYSTKICH zależności. Nie można sprawdzić obrazu maszyny, której użyto do tworzenia kompilacji; nie można sprawdzić dokładnej wersji kompilatora. I tak dalej. Istnieją realistyczne ograniczenia. Ale melduj się wszystko, co możesz - nie robienie tego tylko utrudnia życie. I nie chcemy tego.
Ostatnie słowo: Strąki nie są artefaktami do budowania. Artefakty budowania są generowane z twoich kompilacji. Twoja kompilacja używa kapsuł, a nie ich generowania. Nie jestem nawet pewien, dlaczego należy to omówić.
źródło
Plusy braku sprawdzania kontroli
Pods/
wersji (w subiektywnej kolejności ważności):pod install
zmiany mogą zostać zablokowane.Podfile
aPods/
katalogiem są wykrywane szybciej wśród członków drużyny. Jeśli się zameldujeszPods/
i na przykład zaktualizujesz wersję wPodfile
, ale zapomnisz uruchomićpod install
lub wprowadzić zmiany wPods/
, będziesz miał o wiele trudniej zauważyć źródło rozbieżności. JeśliPods/
nie jest zalogowany, zawsze musiszpod install
mimo wszystko uruchomić .JAR
pliki.venv/
(środowiska wirtualne) inode_modules/
nigdy nie są uwzględniane w kontroli wersji. Gdybyśmy byli całkowicie agnostykiem o pytaniu, nie sprawdzając wPods
będzie domyślnym na podstawie precedensu.Wady braku odprawy w
Pods/
pod install
podczas przełączania gałęzi lub cofania zatwierdzeń.pod install
.pod install
, musisz mieć połączenie z Internetem , a źródło strąków musi być dostępne.Podsumowując, nie wliczając w
Pods
katalogu jest poręczy przeciwko więcej złych praktyk. Włącznie zPods
Tworzy katalog prowadzenie projektu łatwiejsze. Wolę ten pierwszy od drugiego. Nie będziesz musiał rozmawiać z każdą nową osobą na temat projektu „czego nie robić”, jeśli nie ma możliwości popełnienia pewnych błędów. Podoba mi się również pomysł posiadania osobnej kontroli wersji,Pods
która łagodzi wady.źródło
Teoretycznie powinieneś sprawdzić w katalogu Pods. W praktyce nie zawsze zadziała. Wiele zasobników znacznie przekracza limit rozmiaru plików github, więc jeśli używasz github, będziesz mieć problemy ze sprawdzaniem w katalogu Pods.
źródło
Chociaż organizacja Cocoapods zachęca nas do śledzenia
Pods/
katalogu, mówią, że to deweloperzy decydują, czy zrobić to na podstawie tych zalet i wad: http://guides.cocoapods.org/using/using-cocoapods.html # should-i-check-the-pods-directory-into-source-controlOsobiście zwykle śledzę
Pods/
folder tylko w przypadku projektów, nad którymi nie będę dłużej pracował. W ten sposób każdy programista może szybko z niego skorzystać i kontynuować pracę przy użyciu odpowiedniej wersji cocoapods.Z drugiej strony, myślę, że historia zatwierdzeń staje się czystsza i łatwiej jest scalić kod i przejrzeć kod innej osoby, gdy nie śledzisz
Pods/
folderu. Zazwyczaj ustawiam wersję biblioteki cocoapod podczas instalacji, aby upewnić się, że każdy może zainstalować projekt przy użyciu tych samych wersji co ja.Ponadto, gdy
Pods/
katalog jest śledzony, wszyscy deweloperzy muszą używać tej samej wersji Cocoapods, aby zapobiec zmianie dziesiątek plików przy każdym uruchomieniupod install
aby dodać / usunąć kapsułę.Konkluzja : podczas śledzenia
Pods/
folderu łatwiej jest pobrać projekt. Kiedy go nie śledzisz, łatwiej jest go ulepszyć.źródło
Wydaje się, że dobrym sposobem na ustrukturyzowanie tego byłoby utworzenie katalogu „Pods” jako submodułu / osobnego projektu git, oto dlaczego.
Posiadanie podsystemów w repozytorium projektu, podczas pracy z kilkoma programistami, może powodować BARDZO DUŻE różnice w żądaniach ściągania, w których prawie niemożliwe jest zobaczenie faktycznej pracy, która została zmieniona przez ludzi (pomyśl, że dla bibliotek zmieniło się kilkaset tysięcy plików, a tylko kilka zmieniło się w rzeczywistym projekcie).
Widzę problem polegający na tym, aby nic nie popełniać, ponieważ osoba posiadająca bibliotekę może ją usunąć w dowolnym momencie, a ty jesteś w zasadzie SOL, rozwiązuje to również.
źródło
Niezależnie od tego, czy zaznaczysz folder Pods, zależy od Ciebie, ponieważ przepływy pracy różnią się w zależności od projektu. Zalecamy trzymanie katalogu Pods pod kontrolą źródła i nie dodawanie go do swojego .gitignore. Ale ostatecznie decyzja należy do Ciebie:
Korzyści ze sprawdzania w katalogu Pods
Korzyści z ignorowania katalogu Pods
źródło