2012-01-15 14 views
24

Solo una breve domanda/opinione su come si organizza la directory Xcode 4 per ciascuna delle app iOS che si creano.Organizzazione directory progetto iOS

Personalmente, aggiungo ancora una directory chiamata/Risorse che contiene sottodirectory come/Font,/Immagini,/Icone, ecc. Io uso l'opzione "Copia elementi nella cartella del gruppo di destinazione (se necessario)". Se ho bisogno di aggiungere una nuova risorsa, semplicemente la aggiungo alla directory giusta in finder.app nella mia directory di progetto (cioè se è un'immagine, la aggiungo a MyProject/Resources/Images/Foo.png) e poi semplicemente andare sul mio gruppo "Immagini" in Xcode e aggiungere il file da lì.

una volta ho provato ad usare "i riferimenti cartella" opzione per mantenere Xcode e Finder in sincronia, ma IB non è stato in grado di ottenere le immagini ...

Inoltre, è il vostro Icon.png e Default.png a la radice del tuo progetto? (con il file .xcodeproj?) Quando usi Xcode 4 (nel progetto info> summary) li aggiungono lì ... Ti chiedi se li tieni lì, perché personalmente preferisco sempre avere tutte le mie immagini in una directory di esempio!

E per quanto riguarda i file di Photoshop o altri file relativi al progetto, li si inserisce anche nella directory principale (di nuovo con il file .xcodeproj)?

+0

penso che tutto dipende da voi dove dovete salvarlo, loro a nessuna linea guida o regola per struttura di directory. – rishi

+0

So che non ci sono regole "rigide" su di esso, mi chiedo come la gente strutturare i loro progetti, il gioco è fatto :) – allaire

+1

è possibile fare riferimento thread del forum iPhone SDK, come pure - http://www.iphonedevsdk.com /forum/iphone-sdk-development/6457-xcode-folder-directories.html – rishi

risposta

25

Suggerisco di mantenere tutti i vostri .m e file .he .xib in una singola cartella perché semplifica la localizzazione stringhe quando si esegue ibtool per estrarre tutti i riferimenti NSLocalizedString, e rende anche più facile di spostare i file int struttura di cartelle virtuali all'interno di Xcode quando si rifatta il progetto.

Conservare librerie o framework di terze parti in una cartella separata per evitare di mescolarli con il proprio codice.

All'interno di Xcode stesso, organizzo questi file di classe in cartelle virtuali separate denominate Viste, Controllori, Modello e Punti (e Librerie per materiale di terze parti). Se si tratta di un progetto di grandi dimensioni, lo suddivido in cartelle per ogni componente e poi li suddivido in visualizzazioni, controller, ecc., Ma di nuovo si tratta solo di cartelle virtuali, non di quelle fisiche.

Mantenere le risorse in una cartella fisica separata è una buona idea solo per facilitare la navigazione su disco. Potrebbe essere sensato dividerli in immagini, suoni, xml, ecc. All'interno di Xcode potresti volerli suddividere in sottocartelle virtuali per componente o categoria (interfaccia, contenuto, ecc.) Ma non suggerirei di farlo su disco come rende più difficile il refactoring della struttura delle cartelle man mano che il progetto cresce.

È una buona idea conservare tutte le immagini nella stessa cartella perché evita di dare accidentalmente due immagini con lo stesso nome. Xcode non ti avviserà se importi due immagini con lo stesso nome da luoghi diversi, ma quando costruisci l'app finirai con l'una o l'altra scelta a caso.

Non è necessario tenere Default.png e Icon.png nella radice (o addirittura li Default.png e Icon.png chiamare), ma a volte si confonde Xcode se i file standard non sono dove si aspetta.

E sì, qualunque cosa tu faccia, non provare a usare i riferimenti di cartella blu quando importi le immagini altrimenti non puoi accedervi dal tuo codice con imageNamed: o all'interno di Interface Builder. Usa invece i riferimenti della cartella virtuale gialla. Le cartelle in sostanza blu vengono copiate nel pacchetto di app come cartelle reali quando viene creata l'app, mentre le cartelle gialle vengono ignorate e il loro contenuto va direttamente nella radice del pacchetto di app. Per accedere al contenuto nelle cartelle blu, devi includere i nomi delle cartelle blu nel percorso quando li carichi, ad es.

NSString *path = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png" inDirectory:@"nameOfBlueFolderInXcode"]; 
UIImage *image = [UIImage imageWithContentsOfFile:path]; 
+1

Sono d'accordo tranne che per "mantenere tutti i file .m e .h e .xib in una singola cartella ". Questo mi farebbe impazzire senza una struttura nel mio repository svn! Ma a ciascuno il suo. – chown

+0

Bene se usi svn sai quanto è doloroso spostare i file tra le cartelle in un progetto che è ospitato in svn. La quantità di sforzi necessari per spostare una sottoclasse UIButton personalizzata da, ad esempio, classi/somecomponent/views/to classes/shared/views come parte di un processo di refactoring senza rompere i link locali e il repository svn mi farebbe perdere il refactoring e tutto ciò che è una buona idea imho. –

+0

Inoltre, si noti il ​​mio punto sulla generazione del file localizable.strings usando ibtool. ibtool è uno strumento da riga di comando che accetta un percorso di cartella e genera un singolo file di stringhe da tutte le classi interne. Non cerca le sottocartelle, quindi se le tue classi non sono tutte in una cartella rende la localizzazione molto più folle. –

9

Ultimamente ci ho pensato molto; qui è la struttura ho deciso di andare con:

ProjectName 
ProjectName/Assets 
ProjectName/Assets/Images 
ProjectName/Frameworks 
ProjectName/Logic 
ProjectName/Logic/Models 
ProjectName/Presentation 
ProjectName/Presentation/ViewControllers 
ProjectName/Presentation/Views 

penso che questo dà una buona struttura per la crescita e fornisce una casa ragionevole per la maggior parte qualsiasi cosa. Naturalmente, aggiungi ulteriori sottocartelle (ad esempio Assets/Fonts) secondo necessità. Per il mio pieno razionale per la struttura, controlla this blog post.

Io tengo cose come Icon.png e Default.png alla radice del progetto come Xcode sembra schizzinoso su di esso, ma per il resto le cose sono ordinatamente organizzate. Tengo corrispondenti .m, .h, e .xib file insieme, ma ho diviso i controller di vista logico in sottocartelle per caratteristica (per esempio Initial, Settings).

Problemi correlati