2009-09-17 13 views
10

Ho diverse risorse nella mia app per iPhone e quando vengono compilate vengono aggiunte alla radice della cartella delle risorse nell'app, indipendentemente dalla struttura del gruppo Xcode. Questo va bene per la maggior parte delle cose, tuttavia esiste una serie di file che ho bisogno di strutturare in una cartella nella cartella delle risorse dell'app.Xcode building and resources folders

Al momento, ho aggiunto le mie cartelle a Xcode utilizzando "Aggiungi file esistenti ... -> Crea riferimenti alle cartelle per cartelle aggiunte". Questo va bene e le icone delle cartelle in Xcode sono blu anziché gialle. Il mio problema è che Xcode non se ne accorge e i file nuovi o modificati all'interno di quelle cartelle e quindi quando creo il mio progetto, nessuna delle immagini nuove o modificate si trova nelle risorse dell'app di destinazione. L'unico modo in cui riesco a farlo funzionare è di fare un clean, e quindi di compilare, il che è piuttosto fastidioso dato che sto apportando modifiche e ricompilando forse qualche volta al minuto a volte!

La mia struttura di cartelle nelle risorse che voglio tenere nell'app è composta da diversi file e cartelle nidificati.

C'è un modo per ottenere Xcode per riconoscere tutti i file e le cartelle che sono cambiati o sono nuovi?

Grazie,

Mike

risposta

10

mio problema è che Xcode non sta notando e nuovo o i file modificati all'interno di quelle cartelle e quindi quando creo il mio progetto, nessuna delle immagini nuove o modificate si trova nelle risorse dell'app di destinazione.

Questo è un bug di vecchia data; mi ha morso molte volte mentre lavoravo ad Adium. Si prega di file in RadarWeb. E grazie per il promemoria; Ho archiviato il mio bug report come x-radar: // problema/7232149 (visible to the public in OpenRadar). Dovresti menzionare questo numero di bug nel tuo bug report.

Come soluzione temporanea, è possibile fare clic con il tasto destro del mouse sul riferimento della cartella e scegliere "Tocca" per indicare a Xcode che la cartella è stata modificata.

+0

Grazie per queste informazioni. Non posso credere che non l'abbiano affrontato! Sto anche scoprendo che toccare le cartelle non sembra funzionare, forse perché c'è un po 'di nidificazione. –

+1

Michael Waterfall: Sì; devi toccare la cartella specifica che hai aggiunto al tuo progetto. Toccando qualsiasi cosa, inclusa qualsiasi sottocartella, non funzionerà (o almeno non l'ultima volta che l'ho provato, che era qualche tempo fa). –

+0

Vorrei aggiungere un'altra soluzione. Ho provato a scegliere il tocco come ha detto Peter Hosey, ma non mi ha aiutato. Quello che ho fatto è stato copiare la cartella dalla cartella del progetto, eliminare e spostare nel cestino la vecchia cartella, riavviare xcode e aggiungere la cartella copiando i file con l'opzione cartelle come al solito. – Pacu

-1

se si vuole mantenere una struttura di directory, è meglio farlo nella directory documenti. All'avvio iniziale delle tue app, copia i file dal pacchetto alla directory dei documenti nella gerarchia che preferisci.

MODIFICA: dopo aver chiarito, sembra che sia probabilmente necessario aggiungere alcuni percorsi di ricerca intestazione al progetto. Apri il pannello delle informazioni sulle destinazioni, vai alla sezione di compilazione e aggiungi la cartella principale delle strutture all'elenco dei percorsi di ricerca dell'intestazione. Controllare ricorsivo e si dovrebbe essere meglio

+0

Il problema è la cartella di non esistono nel pacchetto senza usare i riferimenti delle cartelle e costruire il progetto in questo modo. Ed è l'edificio con cui sto avendo il problema. La gestione delle cartelle nel pacchetto va bene. Ho solo bisogno di Xcode per riconoscere ogni nuovo file e cartella nei file del mio progetto su ogni build, in modo che li compili nella destinazione senza dover fare una pulizia e ricostruire ogni volta. –

+0

Penso che dovresti giocare con i percorsi di ricerca dell'intestazione – coneybeare

+1

I percorsi di ricerca dell'intestazione sono per #include, non per le risorse. –

4

ho avuto il tuo primo problema me stesso oggi e ho trovato questo grande articolo, che parla del secondo problema anche: http://majicjungle.com/blog/?p=123

+0

Grazie per l'ottimo link. Ho provato a utilizzare lo script ma non sembra toccare alcun file nelle sottocartelle. Qualche idea su come portarlo a sfiorare i file ricorsivamente nelle sottocartelle? –

3

Sono appena stato morso da questo errore. Le risposte già fornite qui sono state di grande aiuto.

ho trovato la risposta in questo altro thread utile anche, ma non sono sicuro se in realtà è una cosa sicura da fare (sembra per generare un nuovo AppId o qualcosa del genere):

iphone simulator resources not updating

Queste sono le mie note personali che ho fatto per risolvere il problema.

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: Va bene, ho seguito le istruzioni "risposta" da post di Peter Hosey sopra, e che funziona anche. Probabilmente è meglio della mia soluzione qui, perché il mio passaggio 4 (obbligatorio) sembra rigenerare una chiave dell'app o qualcosa del genere.

Quindi, ecco come ho riparato in Xcode 4.0 seguente post di Pietro:

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

Chiunque sia in grado di aiutare durante l'utilizzo, viene visualizzato un messaggio di errore ..../bin/sh /: interprete non valido: non è una directory – LmC