tutorial - ¿Cómo evitar las ediciones gratuitas de Xcode en los archivos del guión gráfico?
xcode tutorial español (3)
Cuando navego a uno de mis archivos xib, Xcode marca el archivo como tocado. Deshacer y revertir no tienen ningún efecto. Ahorrar parece no hacer daño, pero el fallo me causa frecuentes trabajos adicionales.
¿Alguien más ha visto esto o tiene una idea sobre algo en mi MainWindow.xib que podría causarlo?
Editar en 2016 - ¡todavía está sucediendo!
Apple dice que es un problema conocido:
Este es un seguimiento del Bug ID # 9847336. Después de una investigación más profunda, se ha determinado que este es un problema conocido, que actualmente está siendo investigado por la ingeniería. Este problema ha sido archivado en nuestra base de datos de fallas bajo el Bug ID original # 9056156. El número de error original que se usa para rastrear este problema duplicado se puede encontrar en la columna Estado, en este formato: Duplicar / OrigBug #.
Después de intentar muchas soluciones diferentes para evitar este error extremadamente molesto, he encontrado un método que funciona (ciertamente no es una "solución", sino una solución alternativa).
Bloquee los controladores cuando haya terminado con ellos.
Seleccione un controlador de visualización en un guión gráfico, abra el inspector de identidad y, en la parte inferior de la sección del documento, verá un menú desplegable de bloqueo. Seleccione "Todas las propiedades" desde el menú desplegable de bloqueo.
Si hace esto para todos los controladores que le dan problemas (o solo todos los controladores en general, incluso), al abrir el guión gráfico, notará que Xcode aún modificará los marcos de varios elementos, pero luego deshará inmediatamente el cambios.
Esto luego lleva al ciclo de desarrollo a ser:
- Desbloquee un controlador de vista
- Realice los cambios necesarios
- Bloquear el controlador de vista
- Cometer
Locking también funciona en un caso view-by-view si se adapta mejor a sus necesidades.
El error ha existido desde hace bastante tiempo y no parece que se solucione en el corto plazo, por lo que desafortunadamente esto tendrá que ser suficiente por ahora.
Personalmente, creo que saber que se trata de un error conocido no soluciona exactamente el problema. Esto es lo que descubrí hasta ahora y cómo evitar que aparezcan.
NOTA: Esto es para un guión gráfico con AutoLayout habilitado. Aún no lo he descifrado para guiones gráficos manuales.
A continuación se muestra un ejemplo de un botón.
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ebd-ny-Ill">
<rect key="frame" x="97" y="5" width="135" height="30"/>
<color key="backgroundColor" white="0.94557291669999999" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" constant="86" id="bXV-mS-ksp">
<variation key="heightClass=regular" constant="135"/>
</constraint>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<state key="normal" title="See Full Menu">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<variation key="default">
<mask key="constraints">
<exclude reference="bXV-mS-ksp"/>
</mask>
</variation>
<variation key="heightClass=regular" misplaced="YES">
<rect key="frame" x="97" y="5" width="135" height="28"/>
<mask key="constraints">
<include reference="bXV-mS-ksp"/>
</mask>
</variation>
<connections>
<action selector="showMenu:" destination="eQk-yf-uDh" eventType="touchUpInside" id="xOP-Se-FXQ"/>
</connections>
</button>
Si echas un vistazo, verás que el botón tiene un elemento llamado <rect/>
Esto define el tamaño y la posición del elemento de UI. Si miras a continuación, también verás un elemento llamado <variation/>
que describe el cambio de posición basado en la clase de tamaño. Para arreglar la posición de esto, tenemos que seguir los siguientes pasos:
- Eche un vistazo a la advertencia que aparece en Xcode. Tome nota de lo que se debe cambiar para ese elemento de IU.
- Abra el guión gráfico en un editor externo (de texto).
- Encuentra el elemento UI en el guión gráfico.
- Cambie el valor para que coincida con lo que sugiere la advertencia en
<rect/>
y<variation/>
. - Guarde el archivo en el editor externo.
- Regresa a Xcode. Deje que vuelva a calcular todas las restricciones.
- Acepte la advertencia para el elemento de UI que aparece de nuevo.
- Si vuelve al editor externo, notará que el elemento
<variation/>
ha desaparecido.
En mi ejemplo, tuve que actualizar x="97"
a x="597"
.
Todavía estoy trabajando en elementos que no tienen una <variation/>
. Actualizaré esta respuesta tan pronto como lo encuentre.