2012-07-18 24 views
42

Este es un problema que nunca tuvimos que enfrentar hasta que se introdujeron los guiones gráficos: siempre que había una posibilidad de conflicto en la interfaz de usuario, simplemente nos aseguramos de que 2 desarrolladores nunca trabajaran en el mismo archivo XIB simultáneamente. La razón por la que nos abstuvimos de resolver los conflictos XIB es que puede haber efectos secundarios problemáticos (XIB está representado en formato XML, por lo que no existe una "buena" forma de fusionar 2 versiones).Storyboards y SVN conflicts

Ahora nos enfrentamos a este problema porque todos nuestros elementos de IU están dentro del mismo archivo .storyboard. La prevención del trabajo simultáneo en 2 elementos de IU hace que trabajar en paralelo sea muy difícil.

¿Alguna sugerencia sobre cómo abordar este problema? Gracias de antemano por sus esfuerzos.

+3

Ouch. ¡Esta es una buena pregunta! –

+1

Espero que también ayude a las futuras generaciones :) – Stavash

+0

Ha intentado agregar a su svnignore este 'YourProjectName.xcodeproj/project.xcworkspace/xcuserdata/yourusername.xcuserdatad/UserInterfaceState.xuserstate'. Trabajo con un desarrollador más en un mismo proyecto y no tenemos esos problemas, utilizamos git pero es lo mismo, eso es lo que tengo en mi .gitignore – ant

Respuesta

38

Divida su guión gráfico en varios guiones gráficos.

No hay ninguna razón para que su aplicación contenga solo un guión gráfico. Divida su guión gráfico en storyboards de módulos. Puede usar +storyboardWithName:bundle: para cargar los módulos del guión gráfico.

Ver: UIStoryboard Best Practices para otras buenas ideas de guiones gráficos.


actualización

Es importante tener en cuenta que esto no es una solución completa al problema. De la misma manera que no puedes evitar completamente la posibilidad de conflictos de fusión en el código fuente descomponiendo una clase gigante en módulos más pequeños, tampoco puedes evitar la posibilidad de conflictos de fusión de guiones gráficos. La idea es reducir la probabilidad hasta que se convierta en un problema manejable.

Siempre habrá situaciones complicadas de fusión en una gran base de código. Una solución correctamente descompuesta reducirá la cantidad de conflictos y minimizará el número de bloqueos necesarios.

+0

Pero, ¿qué ocurre si hay relaciones importantes y segues que quiero entre todos los elementos de la interfaz de usuario de mi aplicación? – Stavash

+0

Depende de usted y de las necesidades de su proyecto la mejor manera de dividir un guión gráfico monolítico. Si descubres que estás haciendo una transición por todo el lugar y no puedes descomponer tu guión gráfico, es posible que tu problema no sea tanto en los guiones gráficos como en la interfaz de usuario de spaghetti. –

+1

En realidad, somos muy capaces de gestionar toda nuestra interfaz de usuario a través del guión gráfico. En cuanto a la cuestión de la capacidad de descomposición es irrelevante porque ese es el objetivo de los guiones gráficos: si analizamos todo, podemos volver a separar los XIB. – Stavash

-3

También puede echar un vistazo a una herramienta moderna de administración de código fuente. Git, por ejemplo, tiene funciones de fusión inteligentes. Consulte this link para saber por qué debe considerar actualizar su flujo de trabajo.

+0

Aunque este es un buen punto, usando cualquier otra herramienta que no sea SVN es un gran problema: todos nuestros proyectos están gestionados por SVN y tendríamos muchas revisiones de código para transferir a GIT. Verificará la opción sin embargo. Gracias. – Stavash

+0

Eche un vistazo a git-svn si considera migrar. Es una herramienta que sincroniza un git y un repositorio svn. Puede ser útil como un comienzo. – user1534610

+0

Gracias, lo comprobaré – Stavash

0

Esto es algo que se me ocurrió cuando estaba jugando, tratando de encontrar una solución.

Si hace clic con el botón derecho en su archivo de guión gráfico en Xcode y navega hasta "Abrir como", verá que hay múltiples opciones: el valor predeterminado es "Generador de interfaz - Storyboard de iOS". Sin embargo, también puede seleccionar "código fuente".

Si abre el guión gráfico en modo de código fuente, es posible realizar cambios (aunque un poco molesto). Pero puede agregar código de otros guiones gráficos y hacer cambios por su cuenta - No he usado SVN pero con un repositorio de git Puedo ver otras versiones del guión gráfico y copiar el código.

No diría que esto es una gran solución. He tenido algunos problemas con Xcode al estrellarse aleatoriamente cuando trato de volver a abrir el guión gráfico en IB. A veces, pegar código en las obras, a veces no lo hace. Algunas veces tuve que cambiar el valor de la etiqueta <scene>. En mi experiencia, es muy acertado, pero si haces una copia de seguridad de tus archivos antes de probar algo, podría funcionar.

Si funciona, avíseme: me interesa saber si se puede encontrar una solución a este problema.

+0

Gracias Dustin. Las caídas que describió las experimenté muchas veces en el pasado y son la razón por la que trato de evitar editar los archivos del Guión Gráfico como fuente XML. – Stavash

0

¿Se trata de fusionar archivos XML?

Afortunadamente, SVN le permite cambiar la herramienta de fusión que utiliza para realizar la fusión de diferentes tipos de archivos. (Por ejemplo tutorial for using P4Merge)

Así que ahora sólo tiene que encontrar una gran herramienta para combinar archivos XML (buena suerte :))

hay WinMerge (con el prefiltro DisplayXMLFiles), o diffxml o XMLMerger o una java xmlmerge tool