sirve que para ocultar lleno liberar interno espacio como borrar app aplicaciones aplicacion almacenamiento objective-c macos cocoa appstore-sandbox

objective-c - que - ocultar aplicaciones apk



¿Cómo obtengo el directorio de inicio de los usuarios en Object-C en una aplicación de espacio aislado? (3)

NSHomeDirectory() está restableciendo mi raíz de sandbox, no mi directorio de inicio. [@"~" stringByExpandingTildeInPath] está haciendo lo mismo.

Este /Users/username/Library/Containers/appID/Data es lo que se devuelve. ¿Cómo obtengo /Users/username/ ?


De la documentación de apple:

Acceder a los datos del usuario

Las API de búsqueda de rutas de Mac OS X, por encima de la capa POSIX, devuelven rutas relacionadas con el contenedor en lugar de hacerlo en relación con el directorio de inicio del usuario. Si su aplicación, antes de sandbox, accede a ubicaciones en el directorio principal real del usuario (~) y está utilizando las API Cocoa o Core Foundation, entonces, después de habilitar el sandboxing, su código de búsqueda de ruta usa automáticamente el contenedor de su aplicación.

Para el primer lanzamiento de su aplicación de espacio aislado, Mac OS X migra automáticamente el archivo de preferencias principal de su aplicación. Si su aplicación usa archivos de soporte adicionales, realice una migración única de esos archivos al contenedor, como se describe en "Migración de una aplicación a un Sandbox".

Si está utilizando un comando POSIX como getpwuid para obtener la ruta al directorio de inicio real del usuario, considere usar un símbolo de Cocoa o Core Foundation, como la función NSHomeDirectory. Al utilizar Cocoa o Core Foundation, usted admite la restricción de App Sandbox contra el acceso directo al directorio de inicio del usuario.

Si su aplicación requiere acceso al directorio de inicio del usuario para funcionar, infórmele a Apple acerca de sus necesidades utilizando el sistema de notificación de errores de Apple .


Si desea la ruta al directorio personal real del usuario, puede usar:

char *realHome = getpwuid(getuid())->pw_dir;

Ejemplo completo:

#include <unistd.h> #include <sys/types.h> #include <pwd.h> #include <assert.h> NSString *RealHomeDirectory() { struct passwd *pw = getpwuid(getuid()); assert(pw); return [NSString stringWithUTF8String:pw->pw_dir]; }

Esto le proporciona la ruta de acceso a la casa del usuario, pero no le da automáticamente acceso a esa carpeta. Como se señala en los comentarios, puede usar esta ruta para:

  • proporcionando una carpeta sana propia para los diálogos de abrir / guardar
  • Detectando si estás en una caja de arena, comparando el resultado con NSHomeDirectory()

Con Swift, puede acceder a la ruta del directorio de inicio de los usuarios desde una aplicación de espacio aislado como esta:

var userHomeDirectoryPath : String { let pw = getpwuid(getuid()) let home = pw?.pointee.pw_dir let homePath = FileManager.default.string(withFileSystemRepresentation: home!, length: Int(strlen(home))) return homePath }


Creé esta solución basada en un fragmento en esta publicación de blog: http://zpasternack.org/accessing-the-real-home-folder-from-a-sandboxed-app/