2011-01-10 16 views
5

Per quanto ne so (e letto ovunque) la directory dei documenti di un'applicazione dovrebbe essere da qualche parte in /var/mobile/Library/ sull'iPhone, ma se sto registrando la directory ottenuta è /var/mobile/Documents.La directory di un documento dell'app iPhone è/var/mobile/Documents o/var/mobile/Library/AppName?

ottengo la directory come segue:

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

questo è un problema se sto creando un file denominato Settings.xml in qui o è qualcosa di sbagliato con la mia app/etc.?

Informazioni: Ho un iPhone 4 jailbroken con iOS 4.2.1 e la mia app viene installata tramite Cydia o SSH.


Aggiornamento

Sì, ma tale directory non è in realtà legato alla mia domanda. Ad esempio sto creando un documento settings.xml e cosa succede se un'altra applicazione utilizza la stessa NSDocumentDirectory e lo stesso nome file? E sì, lo so. Le app di Cydia sono state installate in/Applicazioni ma dovrebbe esserci anche una directory di documenti per la mia app e nemmeno/var/mobile/Documents. Se date un'occhiata a http://thebigboss.org/hosting-repository/submit-your-app/compile-for-cydia-submission la directory dovrebbe essere/var/mobile/Library/ma come ho descritto prima, non ottengo mai questa directory.

+0

si dovrebbe avere una directory '/ var/mobile/Library'. Ne ho uno sul mio iPhone 3GS con iOS 5.1.1 Ho fatto il jailbreak con Absinthe. – Chris

risposta

0

Tramite le app di Cydia installate in un'altra cartella, è per questo che si ottiene una directory diversa.

0

Alcuni file binari di Cydia sono installati su /private/var/lib/ (come apt-get, openssh, ecc.). Altri sono installati su /Applications/ (come Cydia.app, giochi, ecc.).

0

Anche io sto soffrendo con questo problema ... Non ho ancora scoperto cosa sta succedendo, quindi ho accettato di lavorare su/var/mobile/Documents. Tuttavia, ho dovuto creare manualmente tale directory nel mio dispositivo (tramite ssh o terminale mobile) e impostare le sue autorizzazioni su 666 [chmod -r 777/var/mobile/Documents] per consentire alla mia app di salvare e caricare i file lì.

Ci vediamo!

0

Quello che fai è all'avvio dell'app, si controlla se il file desiderato nella cartella docs esiste e, in caso contrario, lo si copia dal pacchetto di applicazioni di sola lettura. Ogni volta che avvii l'app, è lì. E, se per qualche stupido motivo Apple lo cambia, non è necessario regolare il codice, poiché è abbastanza versatile da adattarsi al cambiamento. Copierà i dati originali nella nuova posizione (che non è ottimale, ma è meglio che presupporre che si trovi in ​​una posizione statica, il che causerebbe ogni tipo di confusione tra gli utenti, o peggio: un arresto anomalo).

0

Utilizzare l'ID del gruppo come nome, ad esempio com.companyname.appname.Settings.xml. Raramente sono uguali in diverse app. Inoltre puoi utilizzare gli UUID per nominare il tuo file e memorizzare l'UUID che si trova nel nome nel pacchetto dell'applicazione, ma ha i suoi pro e contro: Pro: il file non viene mai sovrascritto da un'altra app Contro: Sarà complicato farlo cosa.

0

Tutti i file creati dall'applicazione saranno limitati alla sandbox dell'app (ad esempio/var/stash/Applicazioni/NomeApp. Quando si cerca il file, settings.xml, è possibile ottenere il nome filePath utilizzando l'esempio di codice da sopra.

Non è consigliabile memorizzare il file fuori dalla sandbox.

2

L'utilizzo della costante NSDocumentDirectory consente infatti di ottenere/var/mobile/Documenti durante l'esecuzione di un'app jailbreak. Sarebbe una cattiva politica scaricare i documenti della tua app direttamente lì, anche se ritieni che siano nominati in modo univoco.

Se guardi il contenuto della cartella/var/mobile/Library /, vedrai che molte app hanno i loro dati memorizzati lì, incluse le app di jailbreak. Non mi è chiaro se ci sia una costante a portata di mano come NSDocumentDirectory che puoi usare per ottenerlo. Tuttavia, puoi sempre eseguire l'hardcode della sorgente per cercare i file in @"/var/mobile/Library/APPNAME". È improbabile che questa cartella cambierà (e se lo fa, probabilmente interromperà altre app, ed è certamente una soluzione facile da fare).

Se si guarda il documento you link to, non specificare:

Appstore app ha una cartella Documenti che viene creata dal processo di installazione . L'app jailbroken non lo fa. Spetta all'app per creare la propria cartella. Se è necessario questo tipo di cartella, è necessario creare con un semplice comando mkdir nella funzione applicationDidFinishLaunching. Basta aggiungere una semplice funzione: mkdir ("/ var/mobile/Library/YOURAPPNAME", 0755); Se la cartella esiste già , nessun danno è stato fatto. Si desidera eseguire ciò poiché il processo di installazione viene eseguito come utente root e l'app viene eseguita come utente mobile. Se Cydia fa questo per te allora la cartella avrà le autorizzazioni sbagliate.

... quindi è necessario creare quella sottodirectory te. Non sarà lì se non lo fai.

Nella mia esperienza, scrivere applicazioni di jailbreak implica semplicemente alcune di queste pratiche di codifica un po 'puzzolenti (percorsi hardcoding e crearli da soli) ... potrebbe essere solo qualcosa con cui dobbiamo confrontarci.

Aggiornamento: assicurarsi di vedere il commento di Saurik qui sotto.

+0

Un piccolo avvertimento./var/mobile/Library/ovviamente presuppone che l'app sia in esecuzione come utente "mobile", che è l'impostazione predefinita. Alcune app di jailbreak devono essere eseguite come root. Se è davvero così, probabilmente dovresti usare la cartella/var/root/Library/APPNAME. L'ho fatto con una delle mie app che doveva essere eseguita come, e salvare i dati come, root. I ragazzi del jailbreak si sono lamentati un po ', ma alla fine hanno accettato di farmi usare quella posizione. – Nate

+2

FWIW, gli sviluppatori di app per Mac desktop hanno anche (fino a quando magari all'interno delle nuove sandbox "puzzolenti" costrette dal Mac App Store) per affrontare lo stesso problema. Inoltre, è necessario archiviare i documenti (le cose che l'utente manipola) in Documenti e lo stato nella Libreria (si noterà che nessuna app ha "dati" memorizzati nella Libreria nel senso di un "documento"). –

Problemi correlati