Widelce CocoaPods i GitHub

108

To mój pierwszy raz, kiedy tworzę projekt GitHub i nie jestem zbyt kompetentny w kwestii CocoaPods, więc proszę o wyrozumiałość.

Zasadniczo rozwidliłem projekt na GitHub, używając następującego w moim Podfile:

pod 'REActivityViewController', '~> 1.6.7', :git => 'https://github.com/<username>/REActivityViewController.git'

Następnie dokonałem pewnych zmian w widelcu i oczywiście, gdy zrobiłem, pod installaby zainstalować inny pod, ponownie zainstalowałem oryginał REActivityViewControlleri usunąłem moje zmiany.

Zdaję sobie sprawę, że muszę wprowadzić zmiany do mojego widelca przed kolejnym pod install, ale skąd mam wiedzieć, że widelec jest instalowany, biorąc pod uwagę, że jest to repozytorium zainstalowane przez CocoaPods? Zajrzałem do REActivityViewControllerfolderu zainstalowanego w Podsfolderze i nie ma żadnych plików git.

Czy muszę pracować na moim forku poza projektem, a następnie używać CocoaPods, aby zainstalować zmiany? To zbyt uciążliwy przepływ pracy.

Czy muszę coś zrobić z modułami podrzędnymi?

Ramzes
źródło

Odpowiedzi:

185

Odpowiem na to pytanie na przykładzie. Mam widelec TTTAttributedLabel z dodatkowymi funkcjami, które dodałem tutaj:

https://github.com/getaaron/TTTAttributedLabel

Aby użyć tego w projekcie Cocoapods:

  1. Prześlij zmiany do mojego widelca
  2. Skonfiguruj mój plik Podfile, aby uzyskać zmiany i aktualizację

Po wprowadzeniu zmian do forka, pobierz SHA ostatniego zatwierdzenia. Możesz to zrobić za pomocą git rev-parse origin/master | pbcopylub na stronie zatwierdzeń GitHub dla swojego projektu: Zrzut ekranu kopiowania SHA zatwierdzenia na GitHub

Następnie możesz określić konkretne zatwierdzenie w swoim fork w swoim pliku Podfile w następujący sposób:

pod 'TTTAttributedLabel', :git => 'https://github.com/getaaron/TTTAttributedLabel.git', :commit => 'd358791c7f593d6ea7d6f8c2cac2cf8fae582bc1'

Następnie pod updatezaktualizuje to konkretne zatwierdzenie z twojego forka. Jeśli chcesz, możesz również zrobić podspecforka, ale uważam to podejście za prostsze i nie wprowadzam zmian wystarczająco często, aby uzasadnić nowy przepływ pracy.

Czy muszę pracować na moim forku poza moim projektem, a następnie używać Cocoapods, aby zainstalować zmiany? To prowadzi do uciążliwego przepływu pracy.

Możesz to zrobić w ten sposób, ale ja zazwyczaj:

  1. Edytuj kod w moim projekcie i upewnij się, że działa
  2. Skopiuj zmiany do mojego widelca przez
    • eksport poprawki lub
    • kopiowanie całego pliku kodu źródłowego
  3. Zatwierdź i wypchnij do GitHub
  4. Zaktualizuj plik Podfile nowym SHA
  5. Biegnij pod update.

Czy muszę coś zrobić z modułami podrzędnymi?

Nie, nie musisz.

Aaron Brager
źródło
Pytanie uzupełniające: Czy więc aktualizacja Podfile o nowy SHA jest naprawdę konieczna? pod installnie będzie po prostu automatycznie sklonować najnowszej wersji z najnowszym zatwierdzeniem?
Ramsel
Jeśli zmienisz nazwę projektu na inną i utworzysz własny plik podspec, możesz skierować go do własnego repozytorium i użyć pod 'MyForkName', :headzamiast tego.
Aaron Brager
1
:head:wskazuje na najnowsze zatwierdzenie, ale nie możesz użyć :giti :headw tej samej linii.
Aaron Brager,
4
Jest to doskonałe rozwiązanie w przypadku korzystania z niestandardowego rozwidlenia publicznego projektu. W moim przypadku rozwidliłem i zmodyfikowałem projekt i miałem otwarty PR dla opiekuna, aby scalił te zmiany, ale chciałem zaktualizować Podfile mojego projektu, aby natychmiast użyć tych zmian. To działało świetnie!
cbowns
2
@AaronBrager pokazuje „Nie można znaleźć specyfikacji dla„ <nazwa poda> ””. Czy wiesz, jak rozwiązać ten problem?
Susim Samanta
34

Inną opcją jest bezpośrednie odwoływanie się do poda projektu, a nie przez github. W ten sposób nie musisz ciągle zatwierdzać rozwidlenia ani kopiować / wklejać kodu tylko po to, aby przetestować zmiany. Możesz pracować jednocześnie z dwoma różnymi projektami Xcode i osobno zatwierdzać odpowiednie projekty.

pod 'AFNetworking', :path => '~/Documents/AFNetworking'

Dokumentacja CocoaPods: http://guides.cocoapods.org/using/the-podfile.html#using-the-files-from-a-folder-local-to-the-machine

wprowadź opis obrazu tutaj

Oren
źródło
1
Jak to rozwiązuje problem? Kapsuła pobierze te źródła i umieści je jako projekt Pods w projekcie źródłowym. Jakiekolwiek zmiany w tych plikach (teraz zawartych w Podach) nie są śledzone przez Git w '~ / Documents / AFNetworking', prawda?
Raj Pawan Gumdal