2012-04-19 12 views
9

A differenza di Eclipse o altri IDE, Xcode modificherà il file .xcodeproj ogni volta che rileva che un file o un gruppo nel progetto viene aggiunto, rinominato o rimosso. Questo è molto sconveniente quando c'è più di uno sviluppatore che lavora al progetto.Come evitare di modificare il file di progetto (.xcodeproj) di Xcode utilizzato spesso dal team?

Una volta che i miei strumenti SCM si lamentano di conflitti sul file .xcodeproj, tutto ciò che posso fare è controllare un'altra copia dell'intero progetto e unire tutte le modifiche apportate e pregare che nessuno sia "più veloce" di me.

Esiste una soluzione alternativa per modificare la strategia predefinita di Xcode?

risposta

0

Questa non è la tua unica risorsa. I file .xcodeproj sono testo. Il formato non è troppo difficile da capire. Il solito modo di risolvere un conflitto consiste nell'utilizzare entrambe le serie di aggiunte (sebbene ci siano, naturalmente, delle eccezioni).

1

Da quello che ho capito, il .xcodeproj è in realtà un wrapper per diversi file, inclusi .pbxuser e .pbxproj. Non so quale SCM si sta utilizzando, ma questo argomento è stato toccato su here per quelli che utilizzano git, e il consenso sembra essere che il file .pbxuser e molti altri non dovrebbero essere inclusi sotto il controllo della versione.

0
  1. Quit Xcode
  2. Aprire un terminale.
  3. Spostarsi /.xcodeproj/project.xcworkspace
  4. Tipo: mv contents.xcworkspacedata contents.xcworkspacedata.bak
  5. riavvio Xcode
0

Quello che facciamo in gruppo per evitare conflitti su questo file, è per impegnare tutti i file tranne il file di progetto. In questo caso tutto rimane al sicuro. È possibile evitare l'aggiornamento se si desidera solo il proprio file di progetto o addirittura includerlo nel file .gitignore in modo che venga ignorato automaticamente.

######################### 
# .gitignore file for Xcode4/OS X Source projects 
# 
# Version 2.0 
# For latest version, see: http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects 
# 
# 2013 updates: 
# - fixed the broken "save personal Schemes" 
# 
# NB: if you are storing "built" products, this WILL NOT WORK, 
# and you should use a different .gitignore (or none at all) 
# This file is for SOURCE projects, where there are many extra 
# files that we want to exclude 
# 
######################### 

##### 
# OS X temporary files that should never be committed 

.DS_Store 
*.swp 
*.lock 
profile 


#### 
# Xcode temporary files that should never be committed 
# 
# NB: NIB/XIB files still exist even on Storyboard projects, so we want this... 

*~.nib 


#### 
# Xcode build files - 
# 
# NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "DerivedData" 

DerivedData/ 

# NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "build" 

build/ 


##### 
# Xcode private settings (window sizes, bookmarks, breakpoints, custom executables, smart groups) 
# 
# This is complicated: 
# 
# SOMETIMES you need to put this file in version control. 
# Apple designed it poorly - if you use "custom executables", they are 
# saved in this file. 
# 99% of projects do NOT use those, so they do NOT want to version control this file. 
# ..but if you're in the 1%, comment out the line "*.pbxuser" 

*.pbxuser 
*.mode1v3 
*.mode2v3 
*.perspectivev3 
# NB: also, whitelist the default ones, some projects need to use these 
!default.pbxuser 
!default.mode1v3 
!default.mode2v3 
!default.perspectivev3 


#### 
# Xcode 4 - semi-personal settings 
# 
# 
# OPTION 1: --------------------------------- 
# throw away ALL personal settings (including custom schemes! 
# - unless they are "shared") 
# 
# NB: this is exclusive with OPTION 2 below 
xcuserdata 

# OPTION 2: --------------------------------- 
# get rid of ALL personal settings, but KEEP SOME OF THEM 
# - NB: you must manually uncomment the bits you want to keep 
# 
# NB: this is exclusive with OPTION 1 above 
# 
#xcuserdata/**/* 

# (requires option 2 above): Personal Schemes 
# 
#!xcuserdata/**/xcschemes/* 

#### 
# XCode 4 workspaces - more detailed 
# 
# Workspaces are important! They are a core feature of Xcode - don't exclude them :) 
# 
# Workspace layout is quite spammy. For reference: 
# 
# /(root)/ 
# /(project-name).xcodeproj/ 
# project.pbxproj 
# /project.xcworkspace/ 
# contents.xcworkspacedata 
# /xcuserdata/ 
# /(your name)/xcuserdatad/ 
# UserInterfaceState.xcuserstate 
# /xcsshareddata/ 
# /xcschemes/ 
# (shared scheme name).xcscheme 
# /xcuserdata/ 
# /(your name)/xcuserdatad/ 
# (private scheme).xcscheme 
# xcschememanagement.plist 
# 
# 

#### 
# Xcode 4 - Deprecated classes 
# 
# Allegedly, if you manually "deprecate" your classes, they get moved here. 
# 
# We're using source-control, so this is a "feature" that we do not want! 

*.moved-aside 


#### 
# UNKNOWN: recommended by others, but I can't discover what these files are 
# 
# ...none. Everything is now explained. 
2

A differenza di Eclipse o altri IDE, Xcode modificherà il momento di file .xcodeproj constati che viene aggiunto un file o un gruppo nel progetto, rinominati o rimossi.

A differenza di Eclipse e alcuni altri IDE, Xcode gestisce l'elenco di ciò che i file sono nel progetto e la struttura del gruppo come parte del "file" di progetto (file .xcodeproj è davvero una directory). I gruppi non devono esistere fisicamente come directory e i file possono essere effettivamente in tutti i tipi di posti e non devono essere nominati come appaiono in Xcode.

Se qualcuno aggiunge un nuovo file a un progetto o rimuove un file dal progetto o cambia il nome di un file o di un gruppo, questo deve riflettersi nel SCM perché qualcun altro sta verificando una copia o clonazione funzionante il tuo repository o qualsiasi cosa tenda a piacermi meglio se il progetto è sincronizzato con quello che c'è sul disco. Ad esempio, se qualcuno rimuove un file ma tale modifica non viene riflessa nel file di progetto Xcode di altri, otterrà errori di compilazione dopo l'aggiornamento/sincronizzazione/estrazione o altro.

Detto questo, il file di progetto contiene anche un carico di impostazioni utente che non sono importanti. In Xcode 4.x ho impostato le seguenti directory per essere ignorato dal mio SCM:

foo.xcodeproj/project.xcworkspace/xcuserdata 
foo.xcodeproj/xcuserdata 

Nei file versione di progetto precedenti ho usato per impostare la seguente ad essere ignorati:

foo.xcodeproj/*.pbxuser 
foo.xcodeproj/*.mode1v3 

che sembra filtrare le sciocchezze inutili come per quanto riguarda SCM.

0

Come tattica per evitare l'unione conflitti: si otterranno conflitti che richiedono un unione manuale dolorosa se due utenti cambiano il file nella stessa posizione. Ciò accade ad esempio se due utenti aggiungono un file alla fine di un gruppo, poiché entrambe le modifiche si trovano nella stessa posizione. Se tutti aggiungono nuovi file in un posto diverso (ad esempio in ordine alfabetico), non vi saranno conflitti conflitti. O almeno meno.

Problemi correlati