2012-08-03 9 views
16

La mia app Mac è in modalità sandbox e ho bisogno di salvare un file. Dove posso salvare questo file? Non riesco a trovare il posto specifico dove è consentito senza utilizzare un pannello aperto. Ecco come lo faccio su iOS:Dove può un app Mac sandboxizzata salvare i file?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *path = [paths objectAtIndex:0]; 

Qual è l'equivalente per la directory sandboxed su Mac?

risposta

19

Questo frammento di codice funziona su il Mac indipendentemente dal fatto che l'applicazione sia in modalità sandbox.

In un'applicazione Mac non in modalità sandbox, path farà riferimento alla cartella Documenti in casa: ad es. /Users/username/Documents.

In un'app sandbox, fa riferimento a una cartella all'interno della sandbox dell'app: ad es. /Users/username/Library/Containers/com.yourcompany.YourApp/Documents

Vedere the docs per dettagli.

8

La guida di Sandboxing di Apple è molto utile, trovata here.

In pratica hai una cartella dedicata per la tua app, come descritto da AmateurProgrammer in risposta alla mia domanda here.

~/Libreria/Contenitore/com.yourcompany.yourappname/

Ecco quello che ho finora, io migliorarlo in seguito:

//Create App directory if not exists: 
NSFileManager* fileManager = [[NSFileManager alloc] init]; 
NSString* bundleID = [[NSBundle mainBundle] bundleIdentifier]; 
NSArray* urlPaths = [fileManager URLsForDirectory:NSApplicationSupportDirectory 
             inDomains:NSUserDomainMask]; 

NSURL* appDirectory = [[urlPaths objectAtIndex:0] URLByAppendingPathComponent:bundleID isDirectory:YES]; 

//TODO: handle the error 
if (![fileManager fileExistsAtPath:[appDirectory path]]) { 
    [fileManager createDirectoryAtURL:appDirectory withIntermediateDirectories:NO attributes:nil error:nil]; 
} 
Problemi correlati