Czy powinienem git zignorować plik xcodeproject / project.pbxproj?

101

w projekcie XCode, często mam zmieniony plik xcodeproject / project.pbxproj, ale bezużyteczne informacje dla mnie, to do kompilacji.

Czy powinienem git zignorować ten plik i plik xcodeproject / projectxworkspace / username.xcuserdata / UserInterfaceState.xcuserstate?

qichunren
źródło
Pliki .xcuserstate można zignorować, ale nie plik pbxproj.
Kendall Helmstetter Gelner
Nie, oto Twoja odpowiedź: stackoverflow.com/questions/49478/ ...
jeswang

Odpowiedzi:

128

Aktualizacja w świetle Swift Package Manager: Jeśli budujesz projekt jako pakiet Swift - zdecydowanie powinieneś zignorować ten plik, ponieważ można go wygenerować przy użyciu systemu plików jako źródła prawdy. Możesz to zrobić za pomocą następującego polecenia:

$ cd ~/Projects/MyProjectFolder/
$ swift package generate-xcodeproj

Aby uzyskać odpowiedź inną niż SwiftPM - patrz poniżej.

Ten plik zawiera listę wszystkich plików w projekcie, ustawienia celów i które pliki należą do których celów. To prawdopodobnie najbardziej mięsisty plik w pakiecie projektu. Nie powinieneś ignorować tego pliku. Jest na to kilka punktów:

  1. Możesz nie chcieć pracować nad tym projektem samodzielnie lub;
  2. Planujesz pracować nad projektem z różnych maszyn;
  3. Będziesz chciał udostępnić swoją bazę kodu innym;
Eimantas
źródło
6

To jedyny plik, który chcesz umieścić w repozytoriach z pakietu xcodeproj. Ten plik zawiera wszystkie informacje o plikach docelowych i ustawieniach kompilacji.

Grady Player
źródło
1
Ta odpowiedź mogła kiedyś być prawdziwa, ale obecnie jest błędna. Nie jest prawdą, że przechowuje „wszystkie informacje” (kilka rzeczy, np. Niestandardowe pliki wykonywalne są przechowywane w innym pliku, np. Obszary robocze są przechowywane w innym pliku itp.), Ani też nie jest prawdą, że jest to „jedyny plik”, chcesz przechowywać. por. pytanie o to, co umieścić w .gitignore - stackoverflow.com/questions/49478/…
Adam
1
wydaje się dobrze przemyślane ... podążaj za tym w przyszłości.
Grady Player
4

Niestety, jeśli ustawienia kompilacji obejmują podpisywanie kodu, musisz ponownie wprowadzać podmiot podpisujący kod po każdym „git pull”, jeśli zmienił go inny członek zespołu. Wydaje mi się, że te informacje powinny znajdować się w ustawieniach użytkownika, a nie w globalnym pliku pbxproj.

Julius Smith
źródło
2
Możesz ustawić podpisywanie kodu tak, aby każdy z was w projekcie miał inny profil podpisywania kodu, który pasuje do tego samego (współdzielonego) ustawienia w projekcie, np. Używając nazwy wieloznacznej, a następnie każdy z was dopasowuje go osobno lub przez np. wszyscy są w tym samym zespole iTunes i dzielą się profilami.
Adam
3

Jeśli wykluczysz project.pbxproj, kompilacja Jenkinsa zakończy się niepowodzeniem. Jest to więc ważne, jeśli używasz Jenkins.

Joseph Bolade Caxton-Idowu
źródło
0

Odkryłem, że muszę również zachować plik (i) xcworkspace. Jeśli nie, projekt z podprojektem się zepsuł.

Paul Cezanne
źródło
0

Możesz użyć Xcodegen do wygenerowania pbxproj z pliku specyfikacji projektu YAML, a następnie możesz zignorować pbxproj w git i wygenerować je za każdym razem, gdy potrzebujesz.

Użyłem już Xcodegen w drugim projekcie, który ma architekturę modułową (wiele pbxprojs) i pracuje nad nim ponad 8 programistów.

https://github.com/yonaskolb/XcodeGen

Mam nadzieję, że to pomoże.

Cyril Cermak
źródło
0

project.pbxproj to ważny plik w pakiecie konfiguracyjnym Xcode. Odpowiada za utrzymywanie odniesień do wszystkich połączonych plików i ich grup, połączonych struktur i, co najważniejsze, ustawień kompilacji projektu. Z tego powodu nie możemy wykluczyć project.pbxproj z kontroli wersji.

Oto mój generał .gitignoredla mojego projektu Xcode.

# OS X Finder
.DS_Store

# Xcode per-user config
*.mode1
*.mode1v3
*.mode2v3
*.perspective
*.perspectivev3
*.pbxuser
*.xcworkspace
xcuserdata

# Build products
build/
*.o
*.LinkFileList
*.hmap

# Automatic backup files
*~.nib/
*.swp
*~
*.dat
*.dep
James
źródło