No se puede abrir el proyecto ... no se puede abrir porque el archivo del proyecto no se puede analizar

93

He estado trabajando durante un tiempo para crear una aplicación para iPhone. Hoy, cuando mi batería estaba baja, estaba trabajando y guardando constantemente mis archivos de origen, luego se cortó la energía ...

Ahora, cuando volví a enchufar mi computadora y está obteniendo buena energía, trato de abrir el archivo de mi proyecto y aparece un error:

No se puede abrir el proyecto

Proyecto ... no se puede abrir porque el archivo del proyecto no se puede analizar.

¿Hay alguna forma en que la gente sepa que puedo recuperarme de esto? Intenté usar un archivo de proyecto más antiguo y volver a insertarlo y luego compilarlo. Me da un error extraño que probablemente se deba a que no encuentra todos los archivos que quiere ...

Realmente no quiero reconstruir mi proyecto desde cero si es posible.


EDITAR

Ok, hice una diferencia entre esto y un archivo de proyecto un poco más antiguo que funcionó y vi que había algo de corrupción en el archivo. Después de fusionarlos (las partes buenas y las más nuevas) ahora está funcionando.

Grandes puntos sobre el SVN. Tengo uno, pero ha habido algunos problemas al intentar sincronizar XCode con él. Definitivamente pasaré más tiempo con él ahora ... ;-)

ingrese la descripción de la imagen aquí

Comunidad
fuente

Respuestas:

228

Me encontré con este problema y mi superior me dijo sobre una solución, es decir:

Haga clic derecho en su projectname.xcodeprojarchivo aquí projectnameserá el nombre de su proyecto. Ahora, después de hacer clic con el botón derecho, seleccione Mostrar contenido de paquetes . Después de eso, abra su projectname.pbxprojarchivo en un editor de texto. Ahora busque la línea que contiene <<<<<<< .mine, =======y >>>>>>> .r. Por ejemplo en mi caso se veía así

<<<<<<< .mine
    9ADAAC6A15DCEF6A0019ACA8 .... in Resources */,
=======
    52FD7F3D15DCEAEF009E9322 ... in Resources */,
>>>>>>> .r269

Ahora quite los <<<<<<< .mine, =======y >>>>>>> .rlas líneas de lo que sería el siguiente

    9ADAAC6A15DCEF6A0019ACA8 /* BuyPriceBtn.png in Resources */,

    52FD7F3D15DCEAEF009E9322 /* discussionForm.zip in Resources */,

Ahora guarde y abra su proyecto Xcode y constrúyalo. Todo estará bien.

Usuf
fuente
11
GRACIAS. Esto funciona. En mi caso no era ".mine" o ".r" pero decía algo más ... Ctrl-F para "===" para encontrar el lugar.
ck_
esto debe marcarse como la respuesta. Cosas realmente buenas, gracias
owen gerig
12
Solo para decir POR QUÉ está sucediendo esto: su control de versiones está tratando de fusionar dos versiones en conflicto del archivo del proyecto. Debe indicar manualmente a su control de versiones cuál es la combinación adecuada. El hecho de que XCode no maneje esto con elegancia es una gran molestia para mí a diario.
Thane Brimhall
Gracias. Mi problema vino en forma de <<<<<<<<< HEAD ======= >>>>>>>. Estaba en dos puntos hacia el final del archivo .pbxproj. Una vez que eliminé estos elementos, pude ejecutar el archivo .xcodeproj nuevamente. Busque que estos elementos estén visiblemente fuera de lugar del resto del archivo.
AgnosticDev
1
En mi caso es <<<<<<< HEAD, ======, >>>>>>> algo alfanumérico. Elimina estas tres líneas, luego guarda y abre. ¡¡¡Trabajado como un encanto!!! Gracias.
Gowrie Sammandhamoorthy
47

La respuesta de Muhammad fue muy útil (y me ayudó a solucionar mi problema). Sin embargo, simplemente eliminar el >>>>>>> ======= <<<<<<< no fue suficiente para solucionar el problema de análisis en el project.pbxproj (para mí) al mantener los cambios de ambas ramas después de una fusión.

Tuve un conflicto de fusión en la sección PBXGroup (cuyo comienzo está indicado por un comentario de bloque como este: / * Begin PBXGroup section * /) del archivo project.pbxproj. Sin embargo, el problema que encontré también puede ocurrir en otros lugares del archivo project.pbxproj.

A continuación se muestra una simplificación del conflicto de fusión que encontré:

    <<<<<<< HEAD
          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
    =======
          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
    >>>>>>> branch name
            sourceTree = "<group>";
          };

Cuando eliminé los marcadores de conflicto de fusión, esto es lo que me quedó:

          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
            sourceTree = "<group>";
          };

Normalmente, eliminar los marcadores de conflicto de combinación solucionaría el problema de análisis en el archivo project.pbxproj y restauraría la integridad del espacio de trabajo. Esta vez no fue así.

A continuación se muestra lo que hice para resolver el problema:

          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
            sourceTree = "<group>";
          };

          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
            sourceTree = "<group>";
          };

De hecho, tuve que agregar 2 líneas al final del primer PBXGroup.

Puede ver que si hubiera elegido descartar los cambios de Head o de la rama de fusión, ¡no habría habido un problema de análisis! Sin embargo, en mi caso, quería mantener los dos grupos que agregué de cada rama y simplemente eliminar los marcadores de combinación no fue suficiente; Tuve que agregar líneas adicionales al archivo project.pbxproj para mantener el formato correcto.

Por lo tanto, si tiene problemas de análisis después de pensar que ha resuelto todos sus conflictos de fusión, es posible que desee examinar más de cerca el .pbxproj y asegurarse de que no haya problemas de formato.

SnoopyProtocolo
fuente
probablemente eliminó accidentalmente los dos puntos y / o la llave al resolver conflictos de combinación. Debe tomar con cuidado la parte adecuada (o ambas) de los conflictos de fusión y eliminar los marcadores. Eso es.
Stas
agregando el sourceTree = "<grupo>"; }; ¡Lo resolvió por mí! ¡Muy útil! ¡Gracias!
Nitin Alabur
Solo quería agregar algo a esto. Tuve el mismo problema pero trabajando con CocoaPods y un espacio de trabajo. Tuve que destruir el espacio de trabajo y volver a crearlo para que Xcode lo solucionara.
Nico
@Nico: ¿Te importaría compartir cómo usar armas nucleares? Estoy enfrentando un problema similar aquí y lo estoy pasando mal
Isaac
Descubrí que después de arreglar el archivo .pbxproj necesitaba cerrar y volver a abrir el proyecto para que funcionara, pero funcionó. ¡Gracias SnoopyProtocol!
KeithTheBiped
28

Recibí exactamente el mismo error porque Cordova te permitirá crear un proyecto con espacios y Xcode no sabe cómo manejarlo.

bwags
fuente
Muchas gracias esta fue la respuesta, tuve un espacio.
Max
Lo mismo con Cordova Phonegap 3.4
Miles M.
Este era exactamente el problema que estaba teniendo. ¡Gracias!
fray88
@ fray88 Saqué el espacio en el nombre de mi carpeta tanto para el proyecto Xcode como para la carpeta cordova, pero ahora recibo un Error: ENOENT: no existe tal error de archivo o directorio. ¿Cómo puedo sacar el espacio y hacer que las cosas funcionen? Gracias.
Sábado
25

Tuve un problema similar.

Captura de pantalla 1

A continuación se muestran los pasos para resolverlo:

  1. Navegue a la carpeta donde su projectName.xcodeproj.

    Captura de pantalla 2

  2. Haga clic derecho y seleccione ' Show Package Contents'. Podrá ver la lista de archivos con .pbxprojextensión.

    Captura de pantalla 3

  3. Seleccione project.pbxproj. Haga clic derecho y abra este archivo usando ' Text Edit'.

    Captura de pantalla 4

  4. Usted será capaz de ver <<<<<< .mine, ============y >>>>>>>>>> .r123. Por lo general, estos son conflictos que surgen cuando se actualiza desde SVN. Elimínelos y guarde el archivo.

    Captura de pantalla 5

    Captura de pantalla 6

  5. Ahora, podrá abrir el proyecto sin ningún mensaje de error .

Jayprakash Dubey
fuente
23

El análisis visual del archivo del proyecto Xcode no me ayudó a localizar el error después de la fusión. Después de buscar en syslog, encontró dicha línea cuando Xcode intentaba analizar el archivo:

2/7/14 12:39:12.792 PM Xcode[9949]: CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 4426. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug.

Después de arreglar ese proyecto se puede abrir bien.

Oleksiy Ivanov
fuente
2
Gracias, me salvaste el día :)
Centurion
Gracias ... esto tiene mucho más sentido que la inspección visual
Ciprian
2
Esto ayudó enormemente. Simplemente "tail -f /var/log/system.log" e intenté abrir el proyecto. En system.log, mostró un error (búsqueda de "Xcode") que mostraba el número de línea donde ocurrió la excepción de análisis. Luego abrí el archivo en vi y vi un carácter de control en el archivo (^ H) y simplemente eliminé ese carácter y ¡listo! se pudo abrir.
DustinB
La mejor respuesta, en lugar de intentar acertar y probar. Leer el registro de la consola.
Urmil Setia
5
Simplemente intente construirlo desde Terminal como xcodebuild -project Project.xcodeproj build. Verá el error directamente en la Terminal.
Slavko Coolesoff
6

Analice la sintaxis de su archivo de proyecto. Compruébalo dentro de tu proyecto en la terminal:

plutil -lint project.pbxproj

Esto le mostrará los errores del analizador.

Posible problema : algunos proyectos establecen una estrategia de fusión de git unionpara los archivos del proyecto. Esto funciona la mayoría de las veces, pero matará silenciosamente su archivo de proyecto si falla. Esta estrategia se define en el .gitattributesarchivo de su repositorio.

suplicante
fuente
3

Recientemente me enfrenté al mismo problema al intentar fusionar mi rama con una rama remota. Sin embargo, ninguna de las soluciones anteriores parecía apropiada para mi problema.

No hubo conflictos de fusión entre el archivo project.pbxproj en mi rama o la rama remota. Sin embargo, mi archivo projectName.xcodeproj se negaría a abrirse por el mismo motivo que se muestra en la pregunta formulada.

Mi solución fue buscar en project.pbxproj usando un editor de texto y encontrar si había alguna irregularidad en la sintaxis del archivo (por ejemplo, un corchete extra). Aceleré este proceso centrándome en las líneas que se insertaron o eliminaron en el archivo antiguo en comparación con el archivo combinado. En un examen más detenido, encontré que la causa de mi problema era la repetición de la siguiente línea:

xxxxxxxxxxxxx /* [CP] Check Pods Manifest.lock */ = {

en mi archivo combinado. Esto condujo a un corchete sin cerrar y la consiguiente sintaxis pbxproj no válida. Eliminar la línea anterior solucionó mi problema.

Abhi
fuente
2

Me encontré con el mismo problema. Eliminé las cadenas generadas por git como siempre, pero Xcode aún se negó a abrir el archivo .xcodeproj. Pero todo estaba correcto, no faltaban corchetes, etc. Finalmente intenté salir de Xcode y abrir el proyecto cuando Xcode estaba cerrado ... luego funcionó. Espero que esto ayude a alguien.

EDITAR:

para resolver conflictos en su archivo .xcodeproj, puede usar este útil script:

  1. Cree un archivo .sh vacío en el directorio de su proyecto (por ejemplo, resolve_conflicts.sh)
  2. Aquí está el guión:

    projectfile = find -d . -name 'project.pbxproj' projectdir =echo *.xcodeproj projectfile = "$ {projectdir} /project.pbxproj" tempfile = "$ {projectdir} /project.pbxproj.out" savefile = "$ {projectdir} /project.pbxproj.mergesave"

    cat $ projectfile | grep -v "<<<<<<< HEAD" | grep -v "=======" | grep -v "^ >>>>>>>"> $ tempfile mv $ tempfile $ projectfile

  3. Ejecútelo desde la terminal usando el comando sh: sh resolve_conflicts.sh

Vojta
fuente
¿Dónde se generan las cadenas por git?
Harshil Kotecha
Estas cadenas son marcadores de conflicto: "<<<<<<<", "=======" y ">>>>>>>". Para obtener más información sobre cómo resolver conflictos de git, consulte aquí: help.github.com/articles/…
Vojta
@Vojta, ¿podrías resumir ese guión? Recibo este error:resolve_conflicts.sh: line 1: -d: command not found resolve_conflicts.sh: line 3: $tempfile: ambiguous redirect
Daniel
1

Revertir el project.pbxproj

svn revert - nombre de archivo--

mondousage
fuente
1

Pasos a seguir: - 1. Navegue a la carpeta donde se encuentra su projectName.xcodeproj 2. Haga clic derecho y seleccione 'Mostrar contenido del paquete'. Podrá ver la lista de archivos con la extensión .pbxproj. 3.Seleccione project.pbxproj. Haga clic derecho y abra este archivo usando 'Editar texto'. 4. Podrá ver <<<<<<, ============ y >>>>>>>>>>. Por lo general, estos son conflictos que surgen cuando se actualiza desde Sourcetree / SVN / GITLAB. Elimínelos y guarde el archivo. 5.Ahora, podrá abrir el proyecto sin ningún mensaje de error.

Akash Singh
fuente
0

Parece que vas a tener que crear un nuevo proyecto en Xcode, ir al directorio antiguo y arrastrar todos tus archivos fuente, plumillas y recursos a la barra lateral de archivos Xcode en el nuevo proyecto. No debería tomar más de unos minutos, a menos que realmente haya trabajado mucho con configuraciones u objetivos de compilación personalizados. O eso, o volver al último registro en su control de código fuente y agregar manualmente cualquier archivo de código que haya cambiado entre ahora y entonces.

Marc Charbonneau
fuente
1
Simplemente verifique el archivo project.pbproject y haga una diferencia con una versión funcional del archivo del proyecto.
Atma
0

Y una vez que las cosas funcionen nuevamente, debería considerar el uso de algo como subversion o mercurial para el control de copias de seguridad y revisiones. Recuerde que los electrones no siempre van a donde se supone que deben ir, ¡retroceden temprano y con frecuencia!

Brian C. Lane
fuente
Mi VCS favorito últimamente ha sido git.
Lily Ballard
0

cambie el nombre de la carpeta del proyecto actual y el módulo de pago del mismo proyecto, luego agregue los cambios del archivo actual.

seguro
fuente
0

Intente encontrar HEAD y _HEAD entre las líneas y elimine estas palabras en project.pbxproj. Haga una copia de seguridad de este archivo antes de hacer esto ...

Avi Shim.
fuente
0

Ir a PhoneGapTest >> plataforma Luego, elimine la carpeta ios, luego vaya a la terminal y escriba: sudo phonegap build ios después de eso, puede ejecutar el proyecto

Rancho
fuente
0

Al revertir, puede deshacer el código extraído.

Si desea deshacer esa solicitud de extracción, simplemente coloque este comando en la ruta del proyecto

-> git merge --abort

Subramani
fuente
0

En caso de que no encontrara en Text === o <<< o >>>> como era para mí, el problema fue realmente simple y divertido ... Cambio el nombre de la aplicación en Xcode, pero no lo cambio en UnityProjectSettings antes de compilar - ese era el problema ...

Anton Konoplianchenko
fuente
-2

subversion dañará mi archivo de proyecto después de un svn up casi semanalmente. Estoy tratando de averiguar por qué hace esto en este momento y encontré este problema.


fuente
Supongo que tiene el proyecto abierto en Xcode al mismo tiempo que realiza una actualización o confirmación ... "SI" Xcode se guarda automáticamente al mismo tiempo, supongo que puede ocurrir algo de corrupción
epatel
-3

Esto se debe a que se supone que los nombres de los proyectos no deben tener espacios en blanco entre ellos.

Mohsin Muzawar
fuente