Storyboards son más bien un dolor real de un flujo de trabajo de git perspectiva cuando varias personas están colaborando en ellos. Por ejemplo, el XML en el .el archivo de guión gráfico, tiene su partida <document> de la etiqueta toolsVersion y systemVersion atributos alterado por cualquiera que sea la configuración de la más reciente del archivo de manipulador esté ejecutando. La sincronización de todos Xcode versiones, precisamente, parece ayudar con toolsVersion, pero systemVersion cambia, no importa lo que, dependiendo de las características y/o Mac OS X versión de que el desarrollador se está ejecutando.

Esto es una idiotez, pero en su mayoría inofensivas. Lo que nos preocupa, sin embargo, es que en otros tiempos algunos otros cambios se realizan automáticamente en el guión gráfico, con sólo abrir después de una git pull. Es decir, Alice hace cambios en un storyboard, se compromete y obliga a que el repositorio. Bob, a continuación, tira de Alice a los cambios y abre el guión gráfico para hacer más cambios. El momento en que se abre el storyboard, el icono del archivo cambia inmediatamente a una modificación pero no son salvos estado, y un git status muestra que cualquier número de extrañas se han producido cambios. Todo esto sin Bob haber cambiado nada o se guarda el archivo de sí mismo.

El más común automatizado de cambio que estamos viendo es la desaparición o la reaparición de toda la <classes> etiqueta de jerarquía cerca del final de un archivo de guión gráfico. No hemos descubierto qué es lo que está causando esto. Podemos tener varias versiones de un guión en varias .lproj directorios, y al abrir dentro de la Interfaz del Generador, de la jerarquía de clase de forma espontánea puede ser removido de algunos y se añadirán a los demás, o se queda solo en algunos. Esto hace que una gran cantidad de ruido en git diff, pero realmente no rompe ninguna funcionalidad. Vamos a menudo de forma selectiva agregar los reales cambios que hemos hecho en git índice de cometer esos, y luego simplemente descarte la espontánea y sin sentido, <classes> cambios. Esto es para evitar que cometa pequeño y bonito, como debe ser. Aunque, finalmente, sólo se convierte en demasiado molesta con desde Xcode mantiene re-hacer los cambios, y alguien acaba de ragecommits ellos, junto con algunas otras cosas… que está muy bien hasta que alguien Xcode decide que quiere volver a cambiar ellos sin razón aparente. (Nuestro cometer la historia tiene un montón de palabrotas sobre esto.)

Es alguien más viendo este comportamiento? Es este un Xcode bug o un problema de configuración en uno o más de nuestros desarrolladores Mac? Hemos visto algunas similar comportamiento a la hora de colaborar con XIB archivos, pero storyboards parecen más susceptibles a esto.

  • De hecho, los proyectos con Xcode y Git no están haciendo muy bien juntos. No creo que usted puede evitar este lío otra manera de descartar los cambios que son innecesarios – que casi siempre son los archivos de proyecto de cambios para mí y otros archivos xml estoy seguro de que no he cambiado. Estarán encantados de si hay algún tipo de «solución». Me gusta Perforce para cerradura conveniente funcionalidad no permitir Xcode cambiar demasiado, que probablemente se podría hacer de forma manual para los archivos que usted no va a cambiar, pero sólo para revisión.
  • No vale la pena el uso de storyboards con git o cualquier otra cosa. No están diseñados para ser cometer amable. Nos dio por vencido y se fue con el .xib que no es tan genial, pero al menos es granular.
  • Hemos encontrado storyboards bastante limpio para un buen montón de cosas en realidad, aunque a menudo es necesario para que se mezclen con XIBs. Si este error nunca se fija, estaríamos muy contentos de trabajar con ellos la gran mayoría del tiempo.
  • Tengo que comentar en ahwulf comentario: lo que en el mundo se puede decir que no se cometan ambiente? Son XML, archivos de texto, eso es como cometer fácil como usted puede conseguir. Y lo he tenido ningún problema con el storyboard y un sistema de control de versiones, el único problema es, por supuesto, que xcode a veces elimina el <clases> etiqueta y, a continuación, readds más tarde, pero usted puede ver esto fácilmente si usted mira los cambios con un git GUI o git -p o equivalente para cualquier dvcs. Nunca he tenido que esto ocurra con el .pbxproj archivo como un fyi.
  • No puedo entender por qué xcode poner las clases de bloques dentro del guión si que puede generar los bloques, mediante la lectura de las clases de archivos? son una especie de «caché»? si por lo que debe ser puesto en una de las clases.archivo de caché y así podríamos excluir del control de versiones…
  • No tengo nada que aportar a este debate, que no es mi pura desesperación en esta situación.

InformationsquelleAutor JK Laiho | 2012-11-05

5 Comentarios

  1. 78

    Esto no es un error, esto es una consecuencia de cómo Xcode procesos de storyboard archivos.
    Estoy escribiendo un diff y combinar programa para storyboard archivos (GitHub link) y he pasado horas analizando el guión de los archivos de la lógica y de cómo Xcode procesos. Esto es lo que descubrí:

    • ¿Por qué extraño se producen cambios en el guión gráfico archivos?
      Xcode utiliza el NSXML API para analizar archivos de guión en algunos NSSetbasado en la lógica de la estructura de árbol. Cuando Xcode necesita escribir los cambios, se crea una NSXMLDocument basado en la lógica de la estructura de árbol, se borra el archivo de guión gráfico y llamadas XMLDataWithOptions: para llenar de nuevo el archivo. Debido a que los conjuntos no conservar el orden de sus elementos, incluso la más mínima modificación podría cambiar todo el storyboard archivo XML.

    • ¿Por qué la etiqueta de clase desaparecer o aparecer de forma aleatoria?
      El <class> sección no es más que un interno Xcode caché. Xcode utilizar para almacenar en caché la información acerca de las clases. Los cambios en la caché de frecuencia. Los elementos se añaden cuando la clase .h/.m archivos se abren y se retira cuando Xcode sospechosos son obsoletos (al menos mayores Xcodes se comportan como esta). Al guardar el storyboard, la actual versión de la memoria caché es objeto de dumping, que es la razón por la <class> sección a menudo los cambios o incluso desaparece.

    No he ingeniería inversa Xcode; he hecho estas observaciones por medio de la experimentación con Xcode y el storyboard archivos. Sin embargo, estoy casi 100% seguro de que funciona de esta manera.

    Conclusiones:

    • Caché de la sección es de importancia; puede ignorar cualquier cambio en ella.
    • Contrario a lo que se puede encontrar en todos los foros, la fusión de los storyboards de los archivos no es una tarea complicada. Por ejemplo, supongamos que usted ha cambiado MyController1 vista controlador en un storyboard documento. Abra el archivo de guión gráfico, y encontrar algo como esto
      <viewController id=”ory-XY-OBM” sceneMemberID=”MyController1”>.
      De forma segura puede cometer sólo los cambios en esta sección e ignorar todo lo demás. Si ha cambiado desemboca o restricciones, también cometen nada de lo que ha “ory-XY-OBM” en el interior. Simple!
    • Cualquier actualización en el xcode diff / merge tool? Suena como que va a ser súper útil para esta comunidad.
    • Usted podría conseguir la app de mi página web (ver perfil). La aplicación es 100% gratis.
    • También recomiendo dividir los storyboards tanto como sea posible.
    • Para mí desdoblamiento storyboards tanto como sea posible == usando XIBs. Si usted quiere tener todo en rodajas, más fácil y mejor uso XIBs
    • «No he ingeniería inversa Xcode; he hecho estas observaciones por medio de la experimentación con Xcode y storyboard de archivos». Que está (poco profundas) ingeniería inversa, y es cool. 🙂
    • ¿La herramienta de trabajo con Xcode 6.0 storyboards?
    • «Esto no es un error, esto es una consecuencia de cómo Xcode procesos de storyboard archivos. «Respetuosamente, de la 2ª mitad de esta frase en ninguna manera explica ni racionaliza la primera. Me gustaría corregir a: «Esto es un error. Es un[n, lamentablemente no resueltos y muy molesto] consecuencia de cómo XCode procesos .xib archivos». Desde XCode 5.x a través de 6.2 (hoy, 150311) .xib archivos modificado de ninguna manera por el desarrollador, simplemente ve en IB, sufren gratuito xml cambios. Este es un grave error que repercute en la productividad. Respuestas como «NBD, trato justo w/ trozos en git» me deja sin palabras.
    • Todo depende de cómo se defina el término de error. Para mí el error es cuando el código de producir un resultado inconsistente con los resultados esperados. Si usted no espere que su código para producir un resultado en un orden definido, no se puede decir que al azar el orden de salida es un error. Parece que Apple no espera Xcode para preservar la estructura xml de los storyboards entre el ahorro. Tal vez debería cambiar el suyo supuesto, pero esto es otra cuestión.
    • He instalado StoryboardMerge, pero si hago un «git pull» y luego «git mergetool -t storyboard» se abre un cuadro de diálogo que se me pide que seleccione dos archivos a comparar. Una vez que lo corrió y logró ver un «git» que aparezca el botón, pero no puede hacer que suceda de nuevo. ¿Cómo puedo ejecutar StoryboardMerge y tiene que abrir los dos archivos de forma automática? También, de forma manual seleccionando dos guiones gráficos no muestran nada. Estoy usando Xcode 6.1.1.
    • He añadido Xcode 6.2 apoyo y mejora de la mergetool mecanismo. Esto debería resolver sus problemas.
    • aka. idiota de diseño de apple. Por favor arreglar el bug de apple
    • Esto es absolutamente el 100% de un error, no hay duda acerca de ello.

  2. 17

    Este es un error en XCode 4.5+, espero que se solucione, y sí, es un pan de PITA.

    Aquí está el completo error en Apple

    Cómo evitar Xcode gratuito de ediciones de guión gráfico archivos?

    • yo también tenía esto en 4.4
    • Lo mismo en 4.6. Tal vez no es un error.
    • 4.6.3 todavía la tiene. No se puede decir que el guión gráfico/xibs nunca funcionó bien, aunque
    • «No es un bug, es una característica» :-S
    • No hay ninguna evidencia de que esto es un error – una molestia que sí, pero que sólo podría ser cómo Xcode hace cosas
    • La re-ordenar y classes sección es molesto, y yo soy todo para presentación de bugs de este material, sea o no de Apple ingenieros están de acuerdo. El almacenamiento de la versión de OS X que editar el archivo, sin embargo, es una locura y sin duda un error. (Puedo ver cómo la versión de Xcode es relevante. La versión del sistema operativo, sin embargo, debe tener nada que ver con ella).
    • Todavía sucede en 5.0. Al menos la versión del sistema de cambio de parte.
    • Todavía ocurre en el punto 6.1. Yo siempre digo que Apple es una verdadera amigable para los desarrolladores de la compañía.
    • 6.4 y guión combina todavía son la pesadilla de mi existencia
    • 7.0.1, no ha traído ningún cambio a este.
    • Xcode 9.2 fija. Ningún cable de cambio aparece.

  3. 11

    Este problema puede ser mitigado un poco por muy juicioso uso de git add -p en cualquiera de Xcode los archivos generados, incluidos los storyboards, XIBs, el Núcleo de los modelos de Datos y archivos de proyecto, todos los cuales sufren transitoria similar modificaciones que no tienen ningún impacto en el real de la interfaz/modelo/proyecto.

    El más común de basura cambios que he visto en los storyboards son el sistema de números de versión (como usted menciona) y la constante adición y eliminación de la <classes> sección, la omisión de los que nunca han visto a causar problemas. Para XIBs, es la adición y eliminación de <reference key="NSWindow"/>, que no es ni siquiera una clase en Cocoa Touch. Simplemente wow.

    Pensar en él como el mar: hay una marea alta y marea baja. Déjate llevar por él.

    Ahh. Eso es todo.

    Puede ignorar estas modificaciones cuando la puesta en escena de su cambios, restablecer la basura de los cambios, y hacer una limpia de comprometerse.

    La única ventaja que he visto con los storyboards más de XIBs desde un punto de vista técnico es que Apple aún no ha castrado FileMerge a rechazar la combinación de conflicto storyboards. (FileMerge solía ser capaz de combinar XIBs, pero las versiones que rompió. Thxxxx chicos 💜!!!)

    Por favor archivo montón de errores acerca de todos estos problemas en http://bugreporter.apple.com/! Y no te olvides de crear entradas en OpenRadar.

  4. 6

    Lanzar otra respuesta aquí porque esta situación ha mejorado en gran medida. El XML para el archivo XIB que representa el StoryBoard se ha simplificado considerablemente.

    Tengo también recientemente se muerde la bala y comenzó a usar la interfaz en Xcode para el Control de código Fuente. He estado en la línea de comandos para años y feliz allí, pero la interfaz es agradable y que le permite dividir el cometa, que es realmente importante si utiliza un sistema de tickets que se vincula a los comete.

    De todos modos, he notado hoy que hubo un cambio en el guión gráfico y el construido en el diff me mostró que era un único atributo en el documento de la etiqueta (systemVersion). Así que no es una gran cosa.

    He leído artículos donde la gente dice SBs fueron prohibidos en sus equipos, ya que de la fusión de los problemas. Locura Total. Son tan increíbles, especialmente ahora que se han inteligente automático incorporado, usted está realmente perdiendo si no los esté usando.

  5. 3

    Es útil conocer por qué esta locura que está sucediendo, pero para aquellos que creen en mantener sus proyectos de forma gratuita de las advertencias y que sólo quieren una rápida y sucia para sacar adelante sus proyectos de volver a un estado saludable:

    1. No comprometerse a nada hasta que explícitamente se indica.

    2. Abrir Xcode y crear un nuevo guión gráfico (ctrl+N > iOS > Interfaz de Usuario > Storyboard). Voy a asumir que usted llama el nombre predeterminado de Storyboard.storyboard.

    3. Abrir el storyboard que Xcode ha violado. Voy a asumir que esto es Base.lproj/Main.storyboard.

    4. Seleccionar y copiar todo en el guión gráfico (Ctrl+a y ctrl+C).

    5. Abrir Storyboard.storyboard.

    6. Copiar y pegar todo en Storyboard.storyboard.

    7. Cerca De Xcode.

    8. Abre un terminal y cambie los directorios a su repositorio.

    9. Reemplazar Main.storyboard con Storyboard.storyboard (mv Storyboard.storyboard Base.lproj/Main.storyboard).

    10. git add Base.lproj/Main.storyboard; git commit -m "Fix Xcode's insanity."

    11. Caso omiso de los cambios project.pbxproj a través de git checkout -- project.pbxproj. Si usted git diff el archivo, verás que se ha añadido información acerca de nuestros temporal guión (que ya no existe).

    12. Abrir Xcode copia de seguridad y ver que las advertencias que ha desaparecido.

    13. Respirar.

Dejar respuesta

Please enter your comment!
Please enter your name here