Cómo eliminar una versión de modelo de datos antigua / no utilizada en Xcode

163

¿Cómo puedo eliminar un modelo de datos antiguo en Xcode? La opción está deshabilitada en el menú. (Los modelos que quiero eliminar no se han lanzado al público, son modelos de desarrollo provisionales).

SAHM
fuente
¿Quiere decir que la opción "Eliminar" en el menú "Editar" está desactivada (mientras su antiguo archivo de modelo de datos está seleccionado en el inspector de archivos)? ¿O quieres decir algo completamente diferente?
Michael Dautermann
Sí, la opción de eliminación en el menú Editar y también en el menú control-clic derecho (y cualquier menú que pueda encontrar) está desactivada. Sé que algunas personas van a un xcode anterior para eliminar versiones antiguas / no utilizadas, pero no tengo una instalada.
SAHM
Michael, ¿puedes hacer esto en xCode 4?
SAHM
sí ... nunca he visto esa opción de menú "eliminar" deshabilitada para ninguno de mis proyectos XCode 4.
Michael Dautermann
¿Específicamente para el xcdatamodel? Otros han tenido el mismo problema al eliminar xcdatamodels XCode 4 .. Simplemente no he visto una solución publicada.
SAHM

Respuestas:

374

Es un truco, pero esto funcionó para mí:

  1. Establezca la versión actual del modelo en Xcode en una que desee mantener
  2. Elimine el .xcdatamodeld de su proyecto (haga clic con el botón derecho -> Eliminar -> Eliminar solo referencia )
  3. Mostrar el contenido del paquete .xcdatamodeld en el Finder (clic derecho -> Mostrar contenido del paquete)
  4. Elimine los archivos .xcdatamodel que ya no desea
  5. Vuelva a agregar el archivo .xcdatamodeld a su proyecto

Esto elimina la necesidad de modificar manualmente cualquiera de los archivos de metadatos del proyecto.

David Avendasora
fuente
2
Probé esta técnica y descubrí que debido a la forma en que se nombraron las versiones de mi modelo, la versión del modelo se volvió a ordenar de forma incorrecta y se seleccionó la versión predeterminada incorrecta cuando volví a agregar el archivo xcdatamodel al proyecto. Esto puede deberse a que tengo hasta 38 versiones de modelo y no he cambiado el nombre de versión predeterminado, por lo que las versiones se denominan "MY_APP 37.xcdatamodel". Quería eliminar 38. En la importación, se extrajo en orden léxico, lo que significa que "MY_APP 10.xcdatamodel" fue el primero y se seleccionó como predeterminado. No es ideal en mi caso.
Mike
1
Mike: el mismo problema para mí, aunque pude reordenar en el project.pbxproj en un editor de texto sin ningún drama importante. Todavía no es lo ideal.
Ian Kershaw
1
Esto no funciona con Xcode 5.1.1. Anteriormente, con muchos cambios de modelo pequeños y números de versión de modelo incrementados, la migración automática ligera funcionaba correctamente. Sin embargo, después de intentar eliminar todos los modelos extraños "solo de desarrollo" utilizando este enfoque, aparece el error: "Error: no se puede encontrar o inferir automáticamente el modelo de mapeo para la migración".
Dalmazio
1
en 6.4 no hay opción para eliminar referencias. Solo fue borrado. El resto de los pasos parecían funcionar
Noobsmcgoobs
1
Esto parece funcionar en Xcode 10.2.1. Mi migración fue algunos cambios de nombre de atributo, así que nada importante.
Gavin
35

Acabo de encontrar la necesidad de hacer esto. Creé una nueva versión del modelo y luego me di cuenta de que no la necesitaba después de todo. Me sorprendió descubrir que no había forma de eliminarlo (que pude encontrar) de Xcode. Aún así, para eliminarlo hice lo siguiente:

Primero me aseguré de que no fuera mi versión actual del modelo. Luego fui a Finder y encontré mi archivo * .xcdatamodeld. Haga clic derecho y Mostrar contenido del paquete en eso. Allí encontrará el archivo del modelo real y podrá eliminarlo.

Esto todavía no lo elimina de Xcode y se mostrará rojo en los archivos y grupos. Para evitar que esto suceda, regrese al Finder y muestre el Contenido del paquete en su archivo * .xcodeproj principal (es posible que desee asegurarse de tener una copia de seguridad de esto primero). Allí abra y edite project.pbxproj, busque el nombre de la versión de su modelo, en mi caso, "intervalo 8". Para mí apareció en dos líneas separadas. Eliminé estas líneas y ahora está completamente eliminado de Xcode.

Daniel Wood
fuente
1
@Daniel_Wood, sí, también había encontrado cómo hacerlo manualmente, pero ten cuidado. Puede causar algunos problemas en el futuro ... Tuve que volver a hacer esto varias veces, también a veces cambia las versiones activas y no activas, luego, cuando restablece la versión correcta, no la mueve a la parte superior de la lista (a veces) que causa más problemas! Muchas gracias por la entrada sin embargo. Esto parece extraño que hubieran eliminado esta capacidad: ¡nunca deberíamos TENER que entrar en el archivo .xcodeproj!
SAHM
2

Esto funcionó para mí en XCode 10.3 sin que ocurriera el problema de ordenar al eliminar todo el modelo y agregarlo nuevamente:

  1. Seleccione cualquier versión de modelo que no sea la que desea eliminar.
  2. Desde XCode, haga clic derecho en el archivo .xcdatamodeld y seleccione 'Mostrar en Finder'.
  3. Cierra XCode.
  4. En el buscador, haga clic derecho en el mismo archivo y seleccione 'Mostrar contenido del paquete'.
  5. Escriba el nombre del modelo que desea eliminar, luego, desde Finder, elimínelo.
  6. Todavía en Finder, navegue hasta el archivo del proyecto (.xcodeproj).
  7. Haga clic derecho y ábralo con Atom o cualquier otro editor.
  8. Desde el panel 'Proyecto', abra el archivo project.pbxproj.
  9. Elimine todas las líneas que contengan el nombre del modelo que eliminó (Ejemplo: "ABC 17.xcdatamodel"). Encontrará dos líneas similares a las siguientes:

    9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * / = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; ruta = " ABC 17.xcdatamodel "; sourceTree = ""; };

    9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * /,

    Tenga en cuenta que si encuentra una tercera línea, será algo así como:

    currentVersion = 9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * /;

    Eso significa que es el modelo seleccionado actualmente. Nunca elimines esta línea. Simplemente cambie el texto a otra versión del modelo.

  10. Vuelva a abrir XCode.

Tony
fuente
-4

Mi respuesta no es un tema específico en absoluto, pero es rápido y funciona. Para aquellos que usan git. Simplemente puede descartar los cambios no organizados.

git stash save --keep-index

Entonces puedes soltar ese alijo con un git stash dropcomando si lo deseas.

RaffAl
fuente