2011-01-10 12 views
5

Soweit ich weiß (und lesen Sie überall), um ein Dokumentenverzeichnis der Anwendung irgendwo in /var/mobile/Library/ auf dem iPhone sein sollte, aber wenn ich das bekommen Verzeichnis Anmeldung ist es /var/mobile/Documents.Ist das Dokumentverzeichnis einer iPhone-App/var/mobile/Dokumente oder/var/mobile/Library/AppName?

ich das Verzeichnis wie folgt:

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

ist dies ein Problem, wenn ich eine Datei Settings.xml hier genannt zu schaffen oder ist etwas falsch mit meiner app/etc.?

Information: Ich habe ein jailbroken iPhone 4 mit iOS 4.2.1 und meine App wird über Cydia oder SSH installiert.


aktualisieren

Ja, aber das Verzeichnis wird auf meine Bewerbung nicht wirklich zusammen. Zum Beispiel erstelle ich ein Dokument settings.xml und was, wenn eine andere Anwendung das gleiche NSDocumentDirectory und den gleichen Dateinamen verwendet? Und ja, ich weiß. Cydia Apps wurden in/Applications installiert, aber es sollte auch ein Dokumentenverzeichnis für meine App geben und nicht einmal/var/mobile/Documents. Wenn Sie sich http://thebigboss.org/hosting-repository/submit-your-app/compile-for-cydia-submission anschauen, sollte das Verzeichnis/var/mobile/Library/sein, aber wie ich zuvor beschrieben habe, bekomme ich dieses Verzeichnis nie.

+0

sollten Sie ein Verzeichnis '/ var/mobile/Library' haben. Ich habe eine auf meinem iPhone 3GS mit iOS 5.1.1 Ich habe Jailbreak mit Absinthe. – Chris

Antwort

0

Via Cydia Apps in einem anderen Ordner installiert, deshalb erhalten Sie ein anderes Verzeichnis.

0

Einige Cydia-Binärdateien installiert sind in /private/var/lib/ (wie apt-get, OpenSSH, etc). Andere sind in /Applications/ (wie Cydia.app, Spiele, etc) installiert.

0

ich mit diesem Problem leide auch ... Ich habe nicht herausfinden, was noch passiert, also habe ich akzeptiert unter/var/mobile/Dokumente zu arbeiten. Allerdings musste ich dieses Verzeichnis manuell auf meinem Gerät erstellen (via ssh oder mobiles Terminal) und seine Berechtigungen auf 666 [chmod -r 777/var/mobile/Dokumente] setzen, damit meine App dort Dateien speichern und laden kann.

Wir sehen uns!

0

Was Sie tun, ist auf app starten, überprüfen Sie, ob die Datei, die Sie in der docs dir wollen existiert, und wenn es nicht der Fall ist, kopieren Sie sie dort aus dem Nur-Lese-Anwendungspaket. Jedes Mal, wenn du die App startest, ist sie da. Und wenn aus irgendeinem dummen Grund Apple es ändert, müssen Sie Ihren Code nicht anpassen, da er vielseitig genug ist, um sich an die Änderung anzupassen. Es wird die Originaldaten in den neuen Speicherort kopieren (was nicht optimal ist, aber es ist besser als angenommen, dass es sich an einem statischen Speicherort befindet, was bei Ihren Benutzern zu allerlei Verwirrung führen würde, oder noch schlimmer: einem Absturz).

0

Verwenden Sie Ihre Bundle-ID als einen Namen, zum Beispiel com.companyname.appname.Settings.xml. Sie sind selten in verschiedenen Apps gleich. Auch Sie können UUIDs verwenden, um Ihre Datei zu benennen und die UUID speichern, die im Programm-Paket im Namen, aber es hat seine Vor- und Nachteile: Pro: Die Datei nie von einer anderen App Con überschrieben wird: Es wird schwierig sein, so zu tun, Ding.

0

Alle von Ihrer Anwendung erstellten Dateien sind auf die Anwendungs-Sandbox beschränkt (z. B./var/stash/Applications/AppName. Wenn Sie nach der Datei settings.xml suchen, können Sie den filePath-Namen anhand des Codebeispiels abrufen

Das Speichern der Datei außerhalb Ihrer Sandbox wird nicht empfohlen.

2

Mit der Konstante NSDocumentDirectory erhalten Sie tatsächlich/var/mobile/Dokumente beim Ausführen einer Jailbreak-App. Es wäre eine schlechte Richtlinie, die Dokumente Ihrer App direkt dort zu speichern, auch wenn Sie der Meinung sind, dass sie eindeutig benannt sind.

Wenn Sie sich den Inhalt des Verzeichnisses/var/mobile/Library/anschauen, werden Sie sehen, dass viele Apps ihre Daten dort gespeichert haben, einschließlich Jailbreak-Apps. Es ist mir nicht klar, ob es eine handliche Konstante wie NSDocumentDirectory gibt, die Sie verwenden können, um das zu bekommen. Sie können Ihre Quelle jedoch immer fest codieren, um nach Dateien in @"/var/mobile/Library/APPNAME" zu suchen. Es ist unwahrscheinlich, dass sich dieser Ordner ändert (und wenn dies der Fall ist, wird es wahrscheinlich andere Apps kaputt machen und es ist sicherlich ein einfacher Fix).

Wenn Sie auf dem Dokument aussehen you link to, es nicht angibt:

Appstor app hat einen Ordner Dokumente, die von dem Installationsprozess erstellt wird. Jailbroken App nicht. Es liegt an der App, einen eigenen Ordner zu erstellen. Wenn Sie diese Art von Ordner benötigen, müssen Sie mit einem einfachen Mkdir-Befehl in Ihrer applicationDidFinishLaunching-Funktion erstellen. Fügen Sie einfach eine einfache Funktion hinzu: mkdir ("/ var/mobile/Library/YOURAPPNAME", 0755); Wenn der Ordner bereits existiert, ist kein Schaden entstanden. Sie möchten dies tun, weil der Installationsprozess als Benutzer root ausgeführt wird und die App als Benutzer mobile ausgeführt wird. Wenn Cydia das für Sie tut, dann wird der Ordner die falschen Berechtigungen haben.

... so müssen Sie dieses Unterverzeichnis selbst erstellen. Es wird nicht da sein, wenn Sie es nicht tun.

Meiner Erfahrung nach beinhaltet das Schreiben von Jailbreak-Apps einfach einige dieser leicht stinkenden Programmierpraktiken (Hardcoding-Pfade und selbst erstellen) ... es könnte etwas sein, mit dem wir es zu tun haben.

Update: stellen Sie sicher, Saurik Kommentar unten zu sehen.

+0

Ein kleiner Vorbehalt./var/mobile/Library/nimmt natürlich an, dass Ihre App als "mobiler" Benutzer ausgeführt wird. Dies ist die Standardeinstellung. Einige Jailbreak-Apps müssen als root ausgeführt werden. Wenn das wirklich der Fall ist, sollten Sie wahrscheinlich den Ordner/var/root/Library/APPNAME verwenden. Ich habe das mit einer meiner Apps getan, die ausgeführt werden musste, und die Daten als root speichern. Die Jailbreak-Jungs haben sich ein wenig darüber beschwert, aber letztendlich haben sie zugestimmt, dass ich diesen Ort benutzen werde. – Nate

+2

FWIW, Entwickler von Desktop-Mac-Anwendungen haben auch (bis vielleicht, wenn innerhalb der neuen "stinkenden" Sandboxen vom Mac App Store gezwungen), mit dem gleichen Problem umzugehen. Außerdem sollten Sie Dokumente (Dinge, die der Benutzer manipuliert) in Dokumente speichern und in der Bibliothek angeben (Sie werden feststellen, dass keine Apps "Daten" in der Bibliothek im Sinne eines "Dokuments" gespeichert haben). –