2011-01-10 8 views
5

Hasta donde yo sé (y leído en todas partes) el directorio de documentos de una aplicación debe estar en algún lugar en el /var/mobile/Library/ en el iPhone, pero si estoy registrando el directorio obtenido es /var/mobile/Documents.¿Es el directorio de documentos de una aplicación de iPhone/var/mobile/Documents o/var/mobile/Library/AppName?

me sale el directorio de la siguiente manera:

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

es esto un problema si estoy creando un archivo llamado Settings.xml aquí, o es algo malo en mi app/etc.?

Información: Tengo un iPhone 4 con jailbreak con iOS 4.2.1 y mi aplicación se instala a través de Cydia o SSH.


actualización

Sí, pero ese directorio realidad no está relacionada con mi solicitud. Por ejemplo, estoy creando un documento settings.xml y ¿qué ocurre si otra aplicación usa el mismo NSDocumentDirectory y el mismo nombre de archivo? Y sí, lo sé. Las aplicaciones de Cydia se instalaron en/Aplicaciones, pero también debe haber un directorio de documentos para mi aplicación y ni siquiera/var/mobile/Documents. Si echa un vistazo al http://thebigboss.org/hosting-repository/submit-your-app/compile-for-cydia-submission, el directorio debería ser/var/mobile/Library/pero como describí anteriormente, nunca consigo este directorio.

+0

debe tener un directorio '/ var/mobile/Library'. Tengo uno en mi iPhone 3GS con iOS 5.1.1. Hice jailbreak con Absinthe. – Chris

Respuesta

0

Vía las aplicaciones de Cydia instaladas en otra carpeta, es por eso que está recibiendo un directorio diferente.

0

Algunos binarios de Cydia se instalan en /private/var/lib/ (como apt-get, openssh, etc.). Otros están instalados en /Applications/ (como Cydia.app, juegos, etc.).

0

Estoy sufriendo con este problema también ... Aún no he descubierto lo que está sucediendo, así que acepté trabajar en/var/mobile/Documents. Sin embargo, tuve que crear ese directorio manualmente en mi dispositivo (a través de ssh o terminal móvil) y establecer sus permisos en 666 [chmod -r 777/var/mobile/Documents] para permitir que mi aplicación guarde y cargue archivos allí.

¡Te veo!

0

Lo que hace es al inicio de la aplicación, comprueba si el archivo que desea en el directorio de documentos existe, y si no lo hace, lo copia allí desde su paquete de aplicación de solo lectura. Cada vez que inicias la aplicación, está allí. Y, si por alguna estúpida razón Apple lo cambia alguna vez, no tiene que ajustar su código, ya que es lo suficientemente versátil como para adaptarse al cambio. Copiará los datos originales en la nueva ubicación (que no es óptima, pero es mejor que suponer que se encuentra en una ubicación estática, lo que causaría todo tipo de confusión entre los usuarios o, lo que es peor, un bloqueo).

0

Use su ID de paquete como nombre, por ejemplo com.companyname.appname.Settings.xml. Raramente son los mismos en diferentes aplicaciones. También puede usar UUID para nombrar su archivo y almacenar el UUID que está en el nombre en el paquete de la aplicación, pero tiene sus pros y sus contras: Pro: El archivo nunca es sobrescrito por otra aplicación Con: Será complicado hacer tales cosa.

0

Todos los archivos creados por su aplicación se limitarán a la zona de pruebas de la aplicación (por ejemplo/var/stash/Applications/AppName. Cuando busque el archivo, settings.xml, puede obtener el nombre del archivo usando el código del ejemplo arriba.

No se recomienda guardar el archivo fuera de su zona de pruebas.

2

Al usar la constante NSDocumentDirectory, de hecho obtendrá/var/mobile/Documents cuando ejecute una aplicación jailbreak. Sería una mala política volcar los documentos de su aplicación directamente allí, incluso si cree que tienen un nombre único.

Si mira los contenidos de la carpeta/var/mobile/Library /, verá que muchas aplicaciones tienen sus datos almacenados allí, incluidas las aplicaciones jailbreak. No tengo claro si hay una constante útil como NSDocumentDirectory que pueda usar para obtenerla. Sin embargo, siempre puede codificar su fuente para buscar archivos en @"/var/mobile/Library/APPNAME". Es poco probable que esta carpeta cambie (y si lo hace, probablemente romperá otras aplicaciones, y ciertamente es una solución fácil de hacer).

Si nos fijamos en el documento you link to, sí especifica:

Appstore aplicación tiene una carpeta de documentos que se crea por el proceso de instalación . La aplicación Jailbroken no. Depende de la aplicación crear su propia carpeta. Si necesita este tipo de carpeta, debe crear con un simple comando mkdir en su función applicationDidFinishLaunching. Simplemente agregue una función simple: mkdir ("/ var/mobile/Library/YOURAPPNAME", 0755); Si ya existe la carpeta , no hay daños. Desea hacer esto porque el proceso de instalación se ejecuta como usuario root y la aplicación se ejecuta como usuario móvil. Si Cydia hace esto , entonces la carpeta tendrá los permisos incorrectos.

... por lo que necesita crear ese subdirectorio usted mismo. No estará allí si no lo haces.

En mi experiencia, escribir aplicaciones de jailbreak simplemente implica algunas de estas prácticas de codificación un poco apestosa (caminos de codificación y crearlas nosotros mismos) ... podría ser algo con lo que tengamos que lidiar.

Actualización: asegúrate de ver el comentario de Saurik a continuación.

+0

Una pequeña advertencia./var/mobile/Library/obviamente asume que tu aplicación se está ejecutando como el usuario 'móvil', que es el predeterminado. Algunas aplicaciones jailbreak deben ejecutarse como root. Si ese es realmente el caso, probablemente debería usar la carpeta/var/root/Library/APPNAME. Lo hice con una de mis aplicaciones que necesitaba ejecutar y guardar datos como root. Los chicos de Jailbreak se quejaron un poco, pero finalmente aceptaron que use esa ubicación. – Nate

+2

FWIW, los desarrolladores de aplicaciones de escritorio para Mac también (hasta tal vez cuando están dentro de las nuevas arenas "malolientes" forzadas por la Mac App Store) para lidiar con este mismo problema. Además, debe almacenar documentos (cosas que el usuario manipula) en Documentos y estado en Biblioteca (notará que ninguna aplicación tiene "datos" almacenados en la Biblioteca en el sentido de un "documento"). –

Cuestiones relacionadas