Very short snippet: Apple iPhone file system

Sia sul Mac OS X che sull’iPhone OS, abbiamo la possibilità di accedere in modo semplice e diretto alle directory – più importanti – di sistema, che sono:

1
2
3
NSHomeDirectory         Returns the path to the current user’s home directory.
NSHomeDirectoryForUser  Returns the path to a given user’s home directory.
NSTemporaryDirectory  Returns the path of the temporary directory for the current user.

Ecco il codice necessario per utilizzarle:

1
2
3
4
5
6
7
8
9
10
11
// Directory principali
NSString *homePath = NSHomeDirectory();
NSString *tempPath = NSTemporaryDirectory()
NSString *userPath = NSHomeDirectoryForUser( NSUserName() );
NSLog(@"homePath = %@", homePath);
NSLog(@"tempPath = %@", tempPath);
NSLog(@"userPath = %@", userPath);

// homePath = /var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905
// tempPath = /private/var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905/tmp/
// userPath = /var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905

Nota: avete notato, riga 4, la chiamata a NSUserName() che ritorna il “current user”

Esistono, poi, tutta una serie di altre “cartelle” a cui possiamo accedere. Queste possono essere ottenute attraverso la chiamata alla funzione NSSearchPathForDirectoriesInDomains() passandogli come inputs una serie di costanti. Ad esempio possiamo ottenere la cartella Documents in questo modo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@"paths = %@", paths);

// paths = ( "/var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905/Documents" )

// Cartella Documents
NSString *documentsPath = [paths objectAtIndex:0];
NSLog(@"documentsPath = %@", documentsPath);

// documentsPath = /var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905/Documents

// Oppure...
NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSLog(@"documentsDirectory = %@", documentsDirectory)

// documentsDirectory = /var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905/Documents

Nota: in questo ultimo caso notate l’uso di stringByAppendingPathComponent che “concatena” Documents al path, aggiungendo lo slash

NSSearchPathForDirectoriesInDomains() ritorna sempre un array di stringhe, anche se nella maggiornaza dei casi gli elementi sono solo uno. Se guardate bene l’output di paths, infatti, viene indicato tra parentesi, cioè un’array. Nel primo caso viene estratto il primo elemento con [paths objectAtIndex:0].

Risorse

Tramite l’oggetto NSBundle, invece, accediamo alla cartella delle risorse di una applicazione; come già sapete, l’estensione .app delle applicazioni Mac è “virtuale”, per non dire fittizia. Essa, infatti, cela una sorta di “cartella” con all’interno tutte le risorse necessarie all’applicazione stessa, tra cui l’eseguibile vero e proprio! :)

1
2
3
4
5
// Applicazione
NSString *appFolderPath = [[NSBundle mainBundle] resourcePath];
NSLog(@"appFolderPath = %@", appFolderPath)

// appFolderPath = /var/mobile/Applications/54A1A3C9-322E-4C23-B096-45869B0332A5/MyApp.app

Elencare il contenuto di una cartella (browsing)

Il File Management, gestito dall’oggetto NSFileManager, permette di eseguire moltissime utili operazioni come:

  • Creare directory e file
  • Copiare, spostare e “linkare” file e directory
  • Confrontare file e directory
  • Ottenere il contenuto di directory
  • e altro ancora…

Ad esempio…

1
2
3
4
5
6
7
8
9
10
11
// Elenco Directory
NSString      *homePath    = NSHomeDirectory();
NSFileManager *fileManager = [NSFileManager defaultManager];
NSLog(@"La cartella %@ contiene = %@", homePath, [fileManager directoryContentsAtPath: homePath]);

// La cartella /var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905/ contiene = (
// Documents,
// Library,
// "MyApp.app",
// tmp
// )

Bonus

Per quanto riguarda le informazioni “utente” abbiammo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// FullUserName
NSString *fullUserName = NSFullUserName();
NSLog(@"fullUserName = %@", fullUserName);
// fullUserName = Mobile User
 
// NSUserName
NSString *userName = NSUserName();
NSLog(@"userName = %@", userName);
// userName = mobile
 
// NSHomeDirectoryForUser
NSString *directoryForUser = NSHomeDirectoryForUser( userName );
NSLog(@"directoryForUser = %@", directoryForUser);
// directoryForUser = /var/mobile/Applications/DFD6AED2-6B14-4515-8DCD-2AF6F6C2E00C

Lascio a voi provare le “differenze” tra l’uso del simulatore e il device.

Un commento a: “Very short snippet: Apple iPhone file system”

  1. 10 giu, 2010 Notizie dai blog su MeeGo: montare il file system NTFS:

    [...] Very short snippet: Apple iPhone file system Sia sul Mac OS X che sull'iPhone OS, abbiamo la possibilità di accedere in modo semplice e diretto alle directory – più importanti – di sistema, che sono: PLAIN TEXT CODE: NSHomeDirectory         Returns the path to the current user’s home directory. NSHomeDirectoryForUser   Returns the path to a given user’s home directory. blog: undolog | leggi l'articolo [...]

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
					<code></code> // blocco generico
					[cc_actionscript][/cc_actionscript] // Actionscript
					[cc_actionscript3][/cc_actionscript3] // Actionscript 3
					[cc_css][/cc_css] // CSS Style Sheet
					[cc_html][/cc_html] // HTML
					[cc_js][/cc_js] // Javascript
					[cc_objc][/cc_objc] // Objective-C
					[cc_php][/cc_objc] // PHP
					[cc_sql][/cc_sql] // SQL


Stop SOPA