2012-08-03 15 views
16

La aplicación de mi Mac es sandbox y necesito guardar un archivo. ¿Dónde guardo este archivo? Parece que no puedo encontrar el lugar específico donde esto está permitido sin usar un panel abierto. Así es como lo hago en iOS:¿Dónde puede una aplicación de Sandbox guardar archivos?

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

¿Cuál es el equivalente para el directorio de espacio aislado en Mac?

Respuesta

19

Ese fragmento de código funciona en Mac, independientemente de si su aplicación es sandboxed.

En una aplicación de Mac que no esté en la zona de pruebas, path se referirá a la carpeta Documentos en su hogar: p. /Users/username/Documents.

En una aplicación de espacio aislado, se refiere a una carpeta dentro del entorno limitado de la aplicación: p. /Users/username/Library/Containers/com.yourcompany.YourApp/Documents

Ver the docs para más detalles.

8

Apple's Sandboxing guide es muy útil, encontrado here.

Básicamente tiene una carpeta dedicada para su aplicación, tal como lo describe el Programador del hablante en respuesta a mi pregunta here.

~/Library/contenedor/com.yourcompany.yourappname/

aquí es lo que tengo hasta ahora, lo voy a mejorar más adelante:

//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]; 
} 
Cuestiones relacionadas