2012-04-19 9 views
9

A diferencia de Eclipse u otros IDEs, Xcode modificará el archivo .xcodeproj cada vez que encuentre que un archivo o grupo en el proyecto se agrega, renombra o elimina. Esto es muy inconveniente cuando hay más de un desarrollador trabajando en el proyecto.Cómo evitar modificar el archivo de proyecto (.xcodeproj) de Xcode con frecuencia trabajado por el equipo?

Una vez que mis herramientas SCM se quejan de conflictos en el archivo .xcodeproj, todo lo que puedo hacer es verificar otra copia del proyecto completo y fusionar todos los cambios que hice y rezar para que nadie sea "más rápido" que yo.

¿Existe una solución para cambiar la estrategia predeterminada de Xcode?

Respuesta

0

Ese no es su único recurso. Los archivos .xcodeproj son texto. El formato no es muy difícil de entender. La forma habitual de resolver un conflicto es tomar ambos conjuntos de adiciones (aunque, por supuesto, hay excepciones).

1

Por lo que entiendo, el .xcodeproj es en realidad un contenedor para varios archivos, incluidos .pbxuser y .pbxproj. No sé qué SCM está utilizando, pero este tema se tocó en here para aquellos que usan git, y el consenso parece ser que el archivo .pbxuser y muchos otros no deberían incluirse bajo el control de la versión.

0
  1. Quit Xcode
  2. Abrir un terminal.
  3. Vaya a /.xcodeproj/project.xcworkspace
  4. Tipo: mv contents.xcworkspacedata contents.xcworkspacedata.bak
  5. Xcode reinicio
0

Lo que hacemos en los equipos para evitar conflictos de este fichero, es para confirmar todos los archivos, excepto el archivo de proyecto. En este caso, todo permanece seguro. Puede evitar la actualización si solo desea su propio archivo de proyecto, o incluso incluirlo en el archivo .gitignore para que se ignore automáticamente.

######################### 
# .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 diferencia de otros entornos de desarrollo Eclipse o, Xcode modificará el archivo .xcodeproj en cualquier momento se encuentra que se añade un archivo o grupo en el proyecto, renombrar o eliminados.

A diferencia de Eclipse y algunos otros IDE, Xcode mantiene la lista de lo que los archivos están en el proyecto y la estructura del grupo como parte del "archivo" del proyecto (el archivo .xcodeproj es realmente un directorio). Los grupos no tienen que existir físicamente como directorios y los archivos pueden estar en todo tipo de lugares y no necesitan ser nombrados como aparecen en Xcode.

Si alguien agrega un nuevo archivo a un proyecto, o elimina un archivo del proyecto, o cambia el nombre de un archivo o grupo, esto debe reflejarse en su SCM porque alguien más revisa una copia de trabajo o la clonación el repositorio o lo que sea que le guste más, si el proyecto está sincronizado con lo que está en el disco. Entonces, por ejemplo, si alguien elimina un archivo pero ese cambio no se refleja en el archivo de proyecto Xcode de otros, obtendrán errores de compilación después de actualizar/sincronizar/extraer o lo que sea.

Dicho esto, el archivo de proyecto también contiene una carga de configuraciones de usuario que no son importantes. En Xcode 4.x puse los siguientes directorios a ser ignorados por mi SMC:

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

En los archivos de proyecto versión anterior he utilizado para establecer lo siguiente para ser ignorado:

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

que parece filtrar disparate innecesario, ya lo que concierne a SCM.

0

Como táctica para evitar la fusión conflictos: Obtendrá conflictos que requieren una fusión manual dolorosa si dos usuarios cambian el archivo en la misma ubicación. Eso sucede, por ejemplo, si dos usuarios agregan un archivo al final de un grupo, porque ambos cambios están en el mismo lugar. Si todos agregan archivos nuevos en un lugar diferente (por ejemplo, en orden alfabético), no habrá fusión conflictos. O al menos menos.

Cuestiones relacionadas