2012-07-17 14 views
7

El producto iPhone/ipad de mi empresa ha migrado a través de varias generaciones de iOS y Xcode (ahora en 5.1 y 4.3) y tiene muchos objetivos. Tal vez debido a estos factores, hay muchas líneas idénticas para cada archivo de origen en la sección PBXBuildFile, por ejemplo:¿Se pueden eliminar de forma segura las referencias de archivos en project.pbxproj de XCode?

 
14EE4CD315A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD415A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD515A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD615A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD715A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 

Tenga en cuenta que las líneas de un archivo fuente dada son absolutamente (que estaba equivocado, que no son muy ...) idéntico, y la cantidad de líneas duplicadas varía de ninguna a media docena o más. Debido a esta duplicación, la sección PBXBuildFile de project.pbxproj tiene casi 5000 líneas, aunque en realidad solo tenemos unos 1200 archivos únicos.

Antes de improvisar una secuencia de comandos para quitar todas estas líneas duplicadas, y pedir prueba de regresión completa en todas las compilaciones y objetivos, me gustaría asegurarme de que Xcode no necesita estas líneas duplicadas por algún motivo arcano.

Estoy bastante seguro de que esto no fue causado por el control de versión flubbed; las líneas duplicadas solo aparecen en la sección PBXBuildFile y aunque no me gusta P4, tenemos pocos problemas para fusionar los cambios en el archivo project.pbxproj, aunque en casi 20,000 líneas, es un poco difícil de manejar. Creo que algún lanzamiento de Xcode hizo esto, tal vez al agregar nuevos objetivos, pero no encontré a nadie más quejándose sobre el tema.

Preguntas secundarias: ¿Cómo sucedió esto? ¿Alguien más ha encontrado este tipo de líneas duplicadas?

Respuesta

2

Publicación para la posteridad, en caso de que otros se topen con esto también.

Esto sucede todo el tiempo cuando los desarrolladores trabajan en ramas separadas y p. mueva los archivos a diferentes carpetas, agregue nuevos grupos en la misma subcarpeta que otro grupo al que otro desarrollador haga un cambio en una rama separada, etc., y luego necesite fusionar los cambios de sus proyectos en una rama base común. Combinar archivos de proyecto de Xcode es su propio tipo especial de infierno, y no hay una buena manera de determinar cuál de estas referencias es la que desea conservar; como señala @Maistor Kokir, la identificación va a ser única para cada referencia, y es fundamental que elija la correcta ya que los grupos se refieren a los archivos por ID, y más importante aún, las reglas de compilación y los objetivos también hacen referencia a la identificación.

La única forma que he encontrado para corregir esto de manera confiable es eliminar todas las referencias al archivo en cuestión (en las "Fases de compilación" del objetivo de compilación "Compilar fuentes") y luego volver a agregarlo.

Y, para fijar realmente en la fuente, he recomendado que los desarrolladores hacen cualquier proyecto cambia en la rama común (por ejemplo, un git "maestro" rama), y luego fusionar ese cambio a su rama de desarrollo. Las adiciones del proyecto generalmente no requieren el mismo tratamiento; solo cambia "dentro de lo razonable", lo que incluiría (pero no se limitaría a ) mover un archivo a un grupo diferente, o incluso a una ubicación diferente dentro del mismo grupo, cambiar el nombre o eliminar un grupo, eliminar o modificar referencias de submódulo , etc. La experiencia será tu verdadera guía.

5

A medida que se duplica ver el archivo de referencia, pero el identificador del archivo dentro de cada uno de los objetivos tiene una pequeña diferencia 14EE4CD * * 15A5E69000DCA763, el 8 dígitos y no varía.

+0

Ratas, no puedo creer que me perdí eso en el mar de IDs casi iguales. Había renunciado a recibir alguna vez una respuesta sobre esta, tendré que volver atrás y ver cómo los identificadores asignan las variantes del proyecto. – Taryn

+1

Sí, parece que si tiene varios objetivos de compilación, esta sección los referenciará únicamente una vez por destino. Tiene sentido. –

0

Finalmente escribí y ejecuté el script eliminando las numerosas referencias de archivos duplicados. Al hacerlo, parecía completamente inofensivo, mis construcciones locales continuaron funcionando correctamente. Nunca revisé esas correcciones, ya que cambié de empleador en ese momento, y me pareció grosero tirar una bomba que tenía el potencial de romper las construcciones de una docena de equipos antes de partir.

0

Normalmente Xcode genera una referencia única (ID) para los archivos a los que se hace referencia en varios destinos. Supongo que tiene más de un objetivo de compilación y LoginViewController referenciado en ambos que termina con diferentes ID de FileRef. Aunque parece idéntico, eliminarlos suponiendo que podría ser inofensivo puede causar fallas.

Puede leer más sobre el archivo pbxproj en http://www.monobjc.net/xcode-project-file-format.html.

Cuestiones relacionadas