ios xcode project project-management linker-errors

ios - cocoapods



No se pueden agregar binarios incrustados(otros proyectos) a las dependencias del proyecto en XCode (6)

Tengo un espacio de trabajo XCode creado con XCode 6.0.1. Consta de 2 bibliotecas (Swift) y una aplicación de iOS (Swift) que depende de esas 2 bibliotecas. Tenía una configuración estable que me permitió ejecutar la aplicación iOS tanto en iPhone como en simuladores: los 2 proyectos de la biblioteca se agregaron como binarios integrados (ver imagen) de la aplicación.

Ahora, tengo XCode 6.1. Recientemente, DerivedData carpeta DerivedData en la carpeta ~/Library/Developer/Xcode mientras se ejecutaba XCode. Después de eso, mi área de trabajo no funcionó: la aplicación de iOS no se compilaba y recibí un error de enlace que indica que no puede encontrar los proyectos de la biblioteca.

Intenté resolverlo eliminando las 2 bibliotecas de los binarios incrustados del proyecto de la aplicación, y no puedo volver a agregarlas. Al hacer clic en el botón + debajo de Binarios incrustados en la configuración del proyecto, se muestran los proyectos del área de trabajo correctamente, pero al seleccionar y agregar el proyecto de mi biblioteca no se agregan a la lista de Binarios incrustados . He resuelto el error del vinculador creando un nuevo espacio de trabajo. La aplicación compila, pero la forma en que vincula las bibliotecas es un misterio para mí: no se encuentran en los archivos binarios incrustados o los marcos y bibliotecas vinculados que no figuran en la ruta de búsqueda de los marcos . Parece que no hay un vínculo entre la aplicación y las bibliotecas que necesita (y obviamente tienen como compilación), excepto que los proyectos de bibliotecas están en el mismo espacio de trabajo.

¿Por qué no puedo agregar proyectos de biblioteca a binarios incrustados ? ¿Es normal en XCode 6.1 que los proyectos de dependencia simplemente se compilen y se integren en una aplicación sin estar listados o vinculados en ningún lugar?


Aquí es cómo resolví el problema:

  1. Construye el marco.

  2. Abra la carpeta de compilación y arrastre el marco de trabajo construido al proyecto de la aplicación (para que use la ruta a DerivedData).

  3. Agregue el marco a la lista de marcos incrustados.

  4. En el Finder, haga un Show Contents en el archivo xcodeproj de la aplicación, luego abra project.pbxproj en su editor de texto favorito.

  5. Encuentra la línea con la ruta larga DerivedData. Cámbielo para que no haya nombre, la ruta sea el nombre del marco y el árbol de origen sea BUILT_PRODUCTS_DIR

Xcode debería notar el cambio y la biblioteca en el proyecto de la aplicación será negra en lugar de roja y ahora se construirá y ejecutará correctamente.


Este es un resumen de mi respuesta a la pregunta Xcode no agregará "Binario incrustado" después de eliminar "DerivedData" , vea la pregunta original y la respuesta para obtener más contexto e información :

  1. Eliminar todos los proyectos marco del área de trabajo
  2. Realice una "compilación limpia" y / o elimine el "DerivedData"
  3. Añadir proyecto de nuevo en el espacio de trabajo
  4. Construye el proyecto (posiblemente opcional)
  5. En la pestaña General del objetivo de la aplicación, haga clic en + bajo "Marcos y bibliotecas vinculadas" , seleccione el marco.
  6. Genere y ejecute en el simulador (no debería haber problemas de compilación o ejecución)
  7. Genere y ejecute para el dispositivo (esto podría causar un bloqueo debido a que el marco no se vincula correctamente, ignore este bloqueo)
  8. Haga clic en el + debajo de "Binarios incrustados" , seleccione el marco. Esto debería agregarlo al proyecto (posible duplicado en "Marcos y bibliotecas vinculados")
  9. Repita para todos los marcos requeridos
  10. Una vez que se confirma la creación y ejecución (en el dispositivo), puede eliminar cualquier marco duplicado (y / o rojo) en el Navegador de proyectos o en la pestaña General de destino

Limpia tus proyectos y construye tu marco primero. A partir de entonces podrás insertarlo.


Ok, me encontré con el mismo problema que tú. Después de eliminar los datos derivados, no pude volver a vincular mis binarios de nuevo. Creo que la razón es porque los datos derivados están donde se escriben y vinculan los binarios en su proyecto.

Lo que hice para resolver fue seleccionar mi Framework como mi objetivo de compilación. Después de construirlo, el objetivo del Marco cambió de rojo a negro. Puedo ver en su captura de pantalla que está en rojo, lo que significa que no se ha compilado en un binario y se ha escrito en el disco.

Una vez que hice esto, pude volver a vincular el Marco a mi Proyecto porque había una referencia a él en el disco. ¡Espero que esto ayude!


Probablemente sea porque su marco es un proyecto separado y no un objetivo separado. Intente observar cuidadosamente la Sesión 416: Construyendo un Marco Moderno en torno a los minutos 34-36. Le mostrará cómo configurarlo correctamente.

Esto hace que sea un poco confuso si quisiera compartir un marco entre varios proyectos por cierto.


Tengo un problema muy similar y lo arreglé justo anoche. Decidí volver a este hilo y ofrecer mi solución alternativa, ya que la solución anterior de rjstelling no ayudó en mi caso.

Tengo un espacio de trabajo que contiene dos marcos y una aplicación. La aplicación estaba haciendo uso de ambos marcos felizmente por un tiempo hasta que fui golpeado por un misterioso compilador donde decidió que al agregar un acceso de propiedad a una variable de instancia llamada "cubo" de un tipo de clase encontrada en uno de los marcos, se hizo acceso a "_cube" imposible (quejarse de que no se había declarado, mientras que en realidad había funcionado previamente en un método de establecimiento).

En pocas palabras, después de un proyecto limpio, de alguna manera el espacio de trabajo / aplicación perdió la pista del marco integrado de mi proyecto iOS 8+. Eliminar el marco incorporado fue la última gota en esa línea de falla, lo que provocó que mi proyecto ya no permitiera seleccionar ningún marco para incrustar.

Revertir el proyecto y el espacio de trabajo a una versión anterior no eliminó el vudú.

Terminé agregando los proyectos de marco a ser incrustados en el proyecto de la aplicación principal (como archivos) e introduje dependencias de destino en los marcos.

Entonces pude volver a insertar los marcos y el enlace.

En cuanto a la cosa de _cube, tuve que especificar un captador para la propiedad y @synthesize la propiedad a un nombre diferente. No tengo una explicación para esto.