Qualche giorno fa vi abbiamo proposto un tutorial sulla gestione dei File all’interno delle nostre applicazioni iPhone, vediamo oggi di approfondire l’argomento offrendovi una panoramica del File System Locale. Niente di complicato, vedremo semplicemente come sono organizzate le cartelle all’interno dei nostri programmi e cercheremo di capire come dovremo organizzare i nostri file all’interno delle stesse.
Come ben saprete molti programmi hanno la necessità di salvare file, che siano questi foto, video, piuttosto che documenti di testo o ancora impostazioni varie dell’applicazione. Insomma, l’uso dei file in un programma è praticamente d’obbligo per la quasi totalità delle applicazioni esistenti. Ma dove dobbiamo salvare i nostri file? Come sono organizzate le cartelle all’interno dei nostri programmi iPhone? Di cosa dovremo tenere conto durante la scelta della corretta posizione?
La tabella seguente e le informazioni a seguire, prelevate direttamente dalla documentazione ufficiale Apple, ci chiariranno senz’altro le idee:
Directory | Descrizione |
Application_Home/AppName.app | Questa è la directory contenente l’applicazione stessa (bundle). Dovremo fare attenzione a non effettuare cambiamenti al contenuto di questa directory a runtime. Così facendo farete in modo che l’applicazione possa avviarsi anche altre volte. Da iOS 2.1 in poi, il contenuto di questa directory non viene “backuppato” da iTunes. Tuttavia, iTunes esegue una sincronizzazione iniziale di tutte le applicazioni acquistate da App Store. Quindi alla prima sincronizzazione verrà comunque fatto un backup anche di questa cartella. |
Application_Home/Documents/ | Questa è cartella che dovremo utilizzare per archiviare i documenti degli utenti e i file di dati (configurazioni varie) dell’applicazione. I contenuti di questa directory potranno inoltre essere resi disponibili agli utenti attraverso la condivisione di file con un computer desktop. |
Application_Home/Library/Preferences | Questa directory contiene i file delle preferenze della specifica applicazione. Non dovremmo mai creare file di preferenze direttamente, dovremmo invece sfruttare la classe “NSUserDefaults” o le “CFPreferences API” per leggere e settare le preferenze di un’applicazione. Il contenuto di questa directory viene “backuppato” da iTunes. |
Application_Home/Library/Caches | Usate questa directory per salvare qualsiasi file di supporto per la vostra applicazione che volete ritrovare ai successivi avvii dell’applicazione. Sarà poi l’applicazione stessa responsabile dell’aggiunta e la rimozione di questi file. iTunes rimuove questi file durante un ripristino completo (full restore) del dispositivo, sarà vostra cura essere abili nel ricrearli quando necessario. Da iOS 2.2 in poi, il contenuto di questa directory non viene “backuppato” da iTunes. |
Application_Home/tmp/ | Usate questa directory per salvare file temporanei di cui non necessitate la presenza durante successivi avvii dell’applicazione. Dovreste far in modo, inoltre, di rimuovere i file quando ritenete che questi non siano più necessari. Da iOS 2.1 in poi, il contenuto di questa directory non viene backuppato da iTunes. |
Come vedete ogni cartella è stata creata per uno scopo specifico. Programmare le nostre applicazioni iPhone, tenendo conto di questi fattori, eviterà eventuali imprevisti o problemi legati al programma stesso.
Case Sensitivity
Il file system dei dispositivi basati su iOS è CASE SENSITIVE. Quando lavorerete con i nomi dei file (e tutto il percorso in genere), dovrete essere certi di utilizzare correttamente maiuscole e minuscole, esattamente come li avevate salvati, o non sarete in grado di aprire o accedere ai file.
Condividere File con computer desktop
Se volete offrire agli utenti la possibilità di accerere ai file del vostro programma tramite computer desktop, potrete farlo tramite il file sharing. Tramite il file sharing abiliterete la condivisione dei file esclusivamente dall’applicazione al computer desktop dell’utente. Non permette quindi la condivisione con altre applicazioni sullo stesso device. Per condividere dati e file tra applicazioni diverse dovrete ovviare usando la “pasteboard“, o sfruttare un controller apposito.
Backup e Restore
iTunes si preoccupa automaticamente di effettuare backup e ripristino dei dati degli utenti in particolari condizioni. Dovrete però sapere dove mettere i vile per essere certi che questi vengano correttamente “backuppati” e all’occorrenza ripristinati, in base alle vostre necessità.
Cosa viene backuppato?
Innanzitutto non dovrete preparare le vostre applicazioni in alcun modo per quanto riguarda le operazioni di backup e ripristino. Da iOS 2.2 in poi, infatti, quando un dispositivo viene connesso a un computer e sincronizzato, iTunes avvia un backup incrementale di tutti i file, eccetto quelli presenti nelle seguenti directory:
- Application_Home/AppName.app
- Application_Home/Library/Caches
- Application_Home/tmp
Anche se iTunes fa il backup del bundle dell’applicazione stessa, non lo fa durante ogni operazione di sincronizzazione. Le applicazioni acquistate dall’App Store direttamente dal device, ad esempio, sono backuppate alla successiva sincronizzazione con iTunes. Le applicazioni, però, non verranno backuppate più durante le successive operazioni di sincronizzazione, a meno che l’applicazione stessa sia cambiata (ad esempio a causa di un aggiornamento).
Per far in modo che il processo di sincronizzazione non duri per un periodo troppo lungo, dovrete essere selettivi sulla posizione scelta durante il salvataggio dei file nelle directory della vostra applicazione. La directory Application_Home/Documents dovrebbe essere usata per salvare i documenti degli utenti e i file dati dell’applicazione. I file temporanei delle vostre applicazioni dovrebbero quini essere posti all’interno della cartella Application_Home/tmp ed essere cancellati dall’applicazione stessa quando non servono più. Se la vostra applicazione avesse la necessità di creare file che devono essere presenti durante gli avvii successivi, ma non necessitano di backup, dovrete porli all’interno della cartella Application_Home/Library/Caches.
NOTA:
Se la vostra applicazione crea file di grandi dimensioni, o file che vengono modificati frequentemente, dovreste considerare di inserirli nella cartella Application_Home/Library/Caches (che non viene “backuppata”) e non all’interno di Application_Home/Documents. Il Backup (o il restore) di grandi file possono infatti rallentare l’intero processo in modo sisgnificativo. Stesse regole per quanto riguarda i file che vengono modificati frequentemente (e di conseguenza che devono essere “backuppati” frequentemente). Posizionare questi file nella cartella “Caches” fa si che non vengano “backuppati” (da iOS 2.2 in poi) durante ogni operazione di sincronizzazione.
File salvati durante gli aggiornamenti dell’applicazione
Quando un utente scarica un aggiornamento per un’applicazione, iTunes installa l’aggiornamento in una nuova directory. Successivamente sposta i file utente dalla vecchia installazione alla nuova ed infine cancella la vecchia installazione. I file nelle seguenti directory saranno presenti anche nella nuova versione dopo il processo di aggiornamento:
- Application_Home/Documents
- Application_Home/Library/Preferences
Sebbene anche i file di altre directory potrebbero essere spostati, non dovrete fare affidamento su questo per i vostri aggiornamenti.
5 Responses to “L#013 – Panoramica sul “File System Locale” delle nostre applicazioni iPhone (iOS)”
26 Luglio 2010
Tweets that mention Unknown Action « Panoramica sul “File System Locale” delle nostre applicazioni iPhone (iOS) | devAPP -- Topsy.com[…] This post was mentioned on Twitter by Rynox, devAPP. devAPP said: Panoramica sul “File System Locale” delle nostre applicazioni iPhone (iOS) http://bit.ly/cbo7U9 […]
4 Agosto 2010
FabioSalve,
per quanto riguarda la lettura di file al di fuori del File System Locale? Ad esempio, è possibile fare un piccolo applicativo che legge un file audio e fa la trasformata di fourier? Quindi deve leggere lo stream del file e non semplicemente fare play.
Grazie
14 Settembre 2010
devil_phoenixSalve esiste un qualche modo per leggere e scrivere un file fuori dal bundle, utilizzando magari mobileSubstrate o un framework di terze parti? mi serve per un app personale.
13 Novembre 2010
francene ho bisogno anche io, avete qualche idea o link?
5 Maggio 2011
EmilianoSalve
io dovrei accedere , e con il terminale dell’iphone ci riesco, ad un file nella cartella /tmp … solo che poi dovrei trasferirlo nel pc o mac di casa, quindi devo trovare un modo per prelevare e inviare questo file … mi sapete aiutare?
pensavo di usare il terminale e fare il trasferimento con la mal, ma non conosco i comandi telnet ( sul web ho trovato qualcosa , ma non il comando per inserire gli allegati, non so neanche se sia possibile)
sapete darmi un amano per favore??