2009-09-17 12 views
10

Tengo varios recursos en mi aplicación de iPhone y cuando se compilan, todos se agregan a la raíz de la carpeta de recursos en la aplicación, independientemente de la estructura de agrupación de Xcode. Esto está bien para la mayoría de las cosas, sin embargo, hay un conjunto de archivos que debo tener estructurados en una carpeta en la carpeta de recursos de la aplicación.Xcode building and resources folders

Por el momento, he agregado mis carpetas a Xcode usando "Agregar archivos existentes ... -> Crear referencias de carpeta para carpetas agregadas". Esto está bien y los iconos de la carpeta en Xcode son azules en lugar de amarillos. Mi problema es que Xcode no está notando y los archivos nuevos o cambiados dentro de esas carpetas y, por lo tanto, cuando construyo mi proyecto, ninguna de las imágenes nuevas o cambiadas está en los recursos de la aplicación de destino. La única forma en que puedo hacer que funcione es hacer una limpieza, y luego construir, lo cual es bastante molesto ya que estoy haciendo cambios y volviendo a compilar tal vez algunas veces por minuto.

La estructura de mi carpeta en mis recursos que quiero que se mantenga en la aplicación consiste en varios archivos y carpetas anidados.

¿Hay alguna forma de que Xcode reconozca todos los archivos y carpetas que han cambiado o son nuevos?

Gracias,

Mike

Respuesta

10

Mi problema es que Xcode no se está notando y nueva o cambié los archivos dentro de esas carpetas y, por lo tanto, cuando construyo mi proyecto, ninguna de las imágenes nuevas o cambiadas está en los recursos de la aplicación de destino.

Esto es un error de larga data; me ha mordido muchas veces mientras trabajaba en Adium. Por favor, archívelo en RadarWeb. Y gracias por el recordatorio; He archivado mi propio informe de error como x-radar: // problema/7232149 (visible to the public in OpenRadar). Deberías mencionar este número de error en tu propio informe de errores.

Como solución alternativa, puede hacer clic con el botón derecho en la referencia de la carpeta y seleccionar "Tocar" para indicarle a Xcode que la carpeta ha cambiado.

+0

Gracias por esa información. ¡No puedo creer que no lo hayan abordado! Incluso estoy descubriendo que tocar las carpetas no parece funcionar, tal vez porque hay algún anidamiento involucrado. –

+1

Michael Waterfall: Sí; debe tocar la carpeta específica que agregó a su proyecto. Tocar cualquier cosa en él, incluyendo cualquier subcarpeta, no funcionará (o al menos no fue la última vez que lo intenté, que fue hace algún tiempo). –

+0

Me gustaría agregar otra solución. Traté de elegir el toque como dijo Peter Hosey, pero no ayudé. Lo que hice fue copiar la carpeta de la carpeta del proyecto, eliminarla y moverla a la papelera, reiniciar xcode y agregar la carpeta copiando los archivos con la opción de carpetas como de costumbre. – Pacu

-1

si se quiere mantener una estructura de directorios, lo mejor es hacerlo en el directorio de documentos. En el inicio inicial de la aplicación, copie los archivos del paquete al directorio de documentos en la jerarquía que prefiera.

EDITAR: después de la aclaración, parece que probablemente solo necesite agregar algunas rutas de búsqueda de encabezado a su proyecto. Abra el panel de información de objetivos, vaya a la sección de creación y agregue su carpeta raíz de estructuras a la lista de rutas de búsqueda de encabezado. Comprobar recursiva y que debe ser mejor

+0

El problema es la carpeta de no existir en el paquete sin usar referencias de carpeta y la construcción del proyecto de esa manera. Y es el edificio con el que estoy teniendo el problema. Manejar las carpetas en el paquete está bien. Solo necesito que Xcode reconozca todos los archivos y carpetas nuevos en los archivos de mi proyecto en cada compilación para que los compile en el destino sin tener que hacer una limpieza y reconstruir todo el tiempo. –

+0

creo que debería jugar con las rutas de búsqueda de encabezado – coneybeare

+1

Las rutas de búsqueda de encabezado son para #include, no para recursos. –

4

que tenía su primer problema a mí mismo hoy y me encontré con este gran artículo, que habla sobre el segundo problema también: http://majicjungle.com/blog/?p=123

+0

Gracias por el gran enlace. Intenté usar el script pero parece que no toca ningún archivo en las subcarpetas. ¿Alguna idea de cómo hacer que toque archivos recursivamente en subcarpetas? –

3

Me acaba de picar también este error. Las respuestas ya dadas aquí fueron de gran ayuda.

he encontrado la respuesta en este otro hilo útil también, pero no estoy seguro de si en realidad es una cosa segura a hacer (que parece generar un nuevo AppId o algo así):

iphone simulator resources not updating

Estas son mis notas personales que hice para solucionarlo.

1) Open the project in Xcode 
2) Right-click the folder reference (BLUE folder) in the navigator 
    at its root and pick "Remove Reference" 
3) Close Xcode all the way 
4a) Warning, this step might cause other problems in your project. 
4b) Open the folder browser/Finder 
4c) Navigate to: /users/USERNAME/Library/Application Support/ 
      /iPhone Simulator/version/Applications/THISPROJFOLDER 
4d) Delete this whole THISPROJFOLDER. The name of the folder may be all 
    numbers, but this clears the Xcode "Cache" so it will rebuild things 
5) Find the actual folder where you store your pictures that were referenced, 
    and move the folder elsewhere and rename it. 
6) Now open Xcode 
7) In Xcode, select Product -> Clean. It should clean successfully. 
8) Now run the program through Xcode. It should run, but (hopefully) crash or 
    otherwise fail because it doesn't detect the resource files you removed. 
9) Now go standard Xcode usage and add the files back to the folder you want, 
    and add a reference to that folder in the Xcode navigator. Run the program 
    again, and it should detect the UPDATED PDFfiles/Imagefiles. 

EDIT: Vale, he seguido las instrucciones de "respuesta" desde el post de Peter Hosey anteriormente, y que también funciona. Probablemente sea mejor que mi solución aquí, porque mi paso 4 (requerido) parece regenerar una clave de la aplicación o algo así.

Así que aquí es como me fijo en Xcode 4.0 siguiente post de Pedro:

1) Open your project in Xcode 
2) Select the main project root item in the Navigator 
3) Select "Build Phases" in the main pane 
4) Select "Add Build Phase" button -> "Add Run Script" 
5) Reposition he "Run Script" entry bar in the screen, 
    and move it to just-before the Copy Bundle Resources area 
6) Edit the run-script you just added in the main pane: 
    : Set Shell to: /bin/sh (its the default, or try /bin/tsch) 
    : Set the script line to: touch -cm ${SRCROOT}/MyDocs 
    (Set it to your folder root area, matching the Blue Folder 
    area in your Navigator) 
7) Save it all and select "Product -> Clean" to clean project 
+0

Cualquiera que pueda ayudar al usar esto, me sale un error que dice ..../bin/sh /: mal intérprete: no es un directorio – LmC