programar para linea instalar for developer desde descargar apple xcode build xcode4

para - xcode for ipad



¿Cuál es la forma correcta de configurar las áreas de trabajo de XCode 4 para crear dependencias cuando sea necesario? (4)

Describí la forma en que he estado configurando varios proyectos en un espacio de trabajo aquí: http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/

Estoy de acuerdo en que ajustar manualmente el orden de generación en el esquema debería ser innecesario, según la documentación de Xcode, pero esa es la mejor solución que he encontrado hasta ahora.

Editar: Siempre que sea posible, recomiendo usar https://github.com/CocoaPods/CocoaPods para administrar las dependencias del proyecto en este punto.

Mi caso es simple, un espacio de trabajo con dos proyectos hermanos: una aplicación principal (iOS) y un proyecto que construye varios objetivos de biblioteca estática utilizados por la aplicación.

Así es como he configurado la compilación:

  • apuntó una ''ruta de búsqueda de encabezado de usuario'' en la configuración de compilación de la aplicación principal a la ubicación del proyecto de biblioteca (a través de un árbol de fuente)
  • en el editor del objetivo principal de mi aplicación -> fases de compilación -> sección "Enlace binario con bibliotecas", agregué los productos de la biblioteca que deseo usar.
  • en el esquema, marcó ''Encontrar dependencias implícitas''

Después de una limpieza (y eliminación de los datos derivados), una compilación me redirecciona este error durante la compilación del proyecto principal:

ld: library not found for -lChipmunk clang: error: linker command failed with exit code 1 (use -v to see invocation) Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1

Efectivamente, si miro los datos derivados recién creados, los únicos archivos de objeto que se encuentran son para la aplicación principal, no para las bibliotecas. Un ''hallazgo'' generalizado para archivos * .o no revela nada relevante, por lo que las bibliotecas no se pierden, definitivamente no se están construyendo.

Algunos puntos suplementarios:

  • cuando pregunté sobre esto en los foros de desarrollo de Apple, se sugirió que debería agregar deps explícitos en el editor Build Facts-> Target Dependencies del objetivo principal. Pero solo puede agregar déps aquí a los objetivos en el mismo proyecto o subproyectos; en mi caso, tengo la aplicación y los proyectos de la biblioteca como hermanos en el lugar de trabajo.
  • si construyo cada biblioteca manualmente antes de la construcción principal, todo está bien.

Actualizar:

Acabo de encontrar una solución, que es agregar todos los objetivos de las deps en la parte de ''compilación'' del esquema de la aplicación principal. Ya había intentado esto sin éxito, pero no me había dado cuenta de que podía arrastrar los objetivos por la lista para obtener el orden de compilación correcto. Las compilaciones ahora suceden en el orden correcto, tanto después de una limpieza como después de los cambios en la biblioteca o en la fuente principal de la aplicación.

Dejo la pregunta aquí, porque ordenar manualmente una orden de compilación seguramente no debería ser necesario. Tiene que haber algo mal con la forma en que he configurado las cosas.


Editar el esquema (intercambiar objetivos de compilación, anular / verificar "Parallelize Build" y / o "Find Implicit Dependencies") no me funcionaba. Todavía tuve que limpiar compilar el proyecto, después de cualquier cambio de código en la lib estática. Buscando en los foros de desarrollo, finalmente encontré esta respuesta , que funcionó de maravilla.

Asegúrese de que se muestre el inspector de Identidad y Tipo y seleccione el archivo libWhatever.a en el proyecto de su aplicación (no la biblioteca). Si ve la Ubicación: Relativo al Proyecto [o Relativo al Grupo], este es su problema.

  1. Haga clic en Relativo al proyecto y cámbielo a Relativo para compilar productos.
  2. Esto cambiará el tipo de enlace, pero aún se romperá.
  3. Haga clic en el botón localizar y encuentre el archivo de salida.

Agregar una lib estática a un proyecto existente a través de Build Fases -> Link Binary with Libraries lo convierte automáticamente en "Relative to Group" (si ambos son hermanos en el mismo espacio de trabajo). Cambiar su ubicación de la manera descrita arriba resuelve el problema de dependencia de la compilación y en el navegador del proyecto su archivo .a debe aparecer en letras negras (en lugar de rojo).


En mi caso, la única forma en que podría tener esa compilación de configuración de hermanos es agregar manualmente la ruta "../MyLibProject/build/Debug-iphoneos" (verificando recursivo solo para asegurarse) en mi Configuración de compilación -> Rutas de búsqueda de bibliotecas. Agregar el archivo .a solo en el proyecto principal no impidió el error "lib no encontrado" en el momento del enlace.


Intente arrastrar el proyecto de la biblioteca al proyecto principal: