Каталог документов приложения iPhone / var / mobile / Documents или / var / mobile / Library / AppName? - PullRequest
5 голосов
/ 10 января 2011

Насколько я знаю (и читаю везде), каталог документов приложения должен быть где-то в /var/mobile/Library/ на iPhone, но если я регистрирую полученный каталог, это /var/mobile/Documents.

Я получаю каталог следующим образом:

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

это проблема, если я создаю файл с именем Settings.xml здесь или что-то не так с моим приложением / etc.?

Информация: у меня взломанный iPhone 4 с iOS 4.2.1, и мое приложение устанавливается через Cydia или SSH.


Обновление

Да, но этот каталог на самом деле не связан с моим приложением. Например, я создаю документ settings.xml, а что если другое приложение использует тот же NSDocumentDirectory и то же имя файла? И да, я знаю. Приложения Cydia были установлены в / Applications, но для моего приложения должен быть каталог документов, а не / var / mobile / Documents. Если вы посмотрите на http://thebigboss.org/hosting-repository/submit-your-app/compile-for-cydia-submission, каталог должен быть / var / mobile / Library /, но, как я уже говорил, я никогда не получу этот каталог.

Ответы [ 7 ]

2 голосов
/ 24 июня 2011

Использование константы NSDocumentDirectory фактически даст вам / var / mobile / Documents при запуске приложения для джейлбрейка.Было бы плохой политикой помещать документы вашего приложения прямо туда, даже если вы думаете, что они названы уникально.

Если вы посмотрите на содержимое папки / var / mobile / Library /, вы увидите, что данные хранятся во многих приложениях, включая приложения для джейлбрейка.Мне не ясно, есть ли такая удобная константа, как NSDocumentDirectory, которую вы можете использовать для ее получения.Но вы всегда можете жестко закодировать ваш источник для поиска файлов в @"/var/mobile/Library/APPNAME".Маловероятно, что эта папка изменится (и если это произойдет, она, вероятно, сломает другие приложения, и, безусловно, ее легко исправить).

Если вы посмотрите на документ , на который вы ссылаетесь , он указывает:

Приложение Appstore имеет папку «Документы», которая создается в процессе установки.Взломанное приложение не делает.Это зависит от приложения, чтобы создать свою собственную папку.Если вам нужен этот тип папки, вы должны создать его с помощью простой команды mkdir в вашей функции applicationDidFinishLaunching.Просто добавьте простую функцию: mkdir («/ var / mobile / Library / YOURAPPNAME», 0755);Если папка уже существует, никакого вреда не будет.Вы хотите сделать это, потому что процесс установки запускается от имени пользователя root, а приложение запускается от имени пользователя mobile.Если Cydia сделает это за вас, у папки будут неправильные разрешения.

... , поэтому вам нужно создать этот подкаталог самостоятельно .Этого не будет, если вы этого не сделаете.

По моему опыту, написание приложений для джейлбрейка просто включает некоторые из этих немного вонючих методов кодирования (пути жесткого кодирования и их создание самостоятельно) ... это может быть просто что-тонам нужно разобраться.

Обновление: обязательно посмотрите комментарий Саурика ниже.

0 голосов
/ 23 февраля 2011

Все файлы, созданные вашим приложением, будут ограничены изолированной программной средой приложения (например, / var / stash / Applications / AppName. Когда вы ищите файл settings.xml, вы можете получить имя filePath, используя приведенный выше пример кода .

Хранение файла вне вашей песочницы не рекомендуется.

0 голосов
/ 19 февраля 2011

Используйте свой идентификатор пакета в качестве имени, например com.companyname.appname.Settings.xml.Они редко одинаковы в разных приложениях.Также вы можете использовать UUID для присвоения имени вашему файлу и сохранения UUID, который содержится в имени в комплекте приложений, но у него есть свои плюсы и минусы: Pro: файл никогда не перезаписывается другим приложением

0 голосов
/ 23 января 2011

Что вы делаете, это при запуске приложения, вы проверяете, существует ли файл, который вы хотите в docs dir, и если нет, вы копируете его туда из пакета только для чтения. Каждый раз, когда вы запускаете приложение, оно есть. И, если по какой-то глупой причине Apple когда-либо изменит его, вам не нужно корректировать свой код, поскольку он достаточно универсален, чтобы адаптироваться к изменениям. Он скопирует исходные данные в новое местоположение (что не является оптимальным, но это лучше, чем предполагать, что оно находится в статическом месте, что может вызвать всевозможные недоразумения среди ваших пользователей или, что еще хуже: сбой). *

0 голосов
/ 20 января 2011

Я тоже страдаю от этой проблемы ... Я еще не выяснил, что происходит, поэтому я согласился работать в / var / mobile / Documents.Однако мне пришлось создать этот каталог вручную на моем устройстве (через ssh или мобильный терминал) и установить для него права доступа 666 [chmod -r 777 / var / mobile / Documents], чтобы мое приложение могло сохранять и загружать туда файлы.

До встречи!

0 голосов
/ 12 января 2011

Некоторые двоичные файлы Cydia установлены в /private/var/lib/ (например, apt-get, openssh и т. Д.)Другие устанавливаются в /Applications/ (например, Cydia.app, игры и т. Д.).

0 голосов
/ 10 января 2011

Через приложения Cydia, установленные в другую папку, поэтому вы получаете другой каталог.

...