2011-01-10 65 views
5

就我所知(并且无处不在),应用程序的文档目录应该位于iPhone上的/var/mobile/Library/的某个位置,但是如果我记录获得的目录,则它是/var/mobile/Documents是iPhone应用程序的文档目录/ var/mobile/Documents或/ var/mobile/Library/AppName?

我得到的目录如下:

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 /但是正如我之前描述的那样,我从来没有得到这个目录。

+0

你应该有一个`/ var/mobile/Library`目录。我有一个运行iOS 5.1.1的iPhone 3GS,我用Absinthe越狱了。 – Chris 2012-08-12 00:23:25

回答

0

通过安装在另一个文件夹中的Cydia应用程序,这就是为什么你得到不同的目录。

0

某些Cydia二进制文件安装到/private/var/lib/(如apt-get,openssh等)。其他人被安装到/Applications/(如Cydia.app,游戏等)。

0

我也遇到了这个问题...我还没有找到发生了什么,所以我已经接受在/ var/mobile/Documents工作。不过,我不得不在我的设备上手动创建该目录(通过ssh或移动终端),并将其权限设置为666 [chmod -r 777/var/mobile/Documents],以让我的应用程序保存并加载文件。

见你!

0

你所做的是在应用程序启动时,检查你想在文档目录中找到的文件是否存在,如果不存在,则将其复制到只读应用程序包中。每次启动应用程序时,它都会在那里。而且,如果由于某种愚蠢的原因苹果改变了它,你不必调整你的代码,因为它足够多才多艺以适应变化。它会将原始数据复制到新的位置(这不是最优的,但它比假设它位于静态位置更好,这会导致用户之间的各种混淆,或者更糟糕:崩溃)。

0

使用您的包ID作为名称,例如com.companyname.appname.Settings.xml。它们在不同的应用程序中很少相同。您也可以使用UUID命名您的文件并存储名称中的UUID,但它有其优点和缺点: Pro:文件永远不会被另一个应用程序覆盖 Con:这样做会很棘手事情。

0

由应用程序创建的所有文件都将被限制在应用程序沙箱中(例如/ var/stash/Applications/AppName。当您查找文件settings.xml时,可以使用代码示例获取filePath名称

不推荐将文件存储在沙盒外。

2

运行越狱应用程序时,使用常量NSDocumentDirectory实际上会为您/ var/mobile/Documents。将应用程序的文档直接转储到那里是一种糟糕的政策,即使您认为它们是唯一命名的。

如果您查看/ var/mobile/Library /文件夹的内容,您会看到很多应用程序都将其数据存储在那里,包括越狱应用程序。我不清楚是否有像NSDocumentDirectory这样的方便常数,你可以用它来获得。但是,您始终可以将源代码硬编码为在@"/var/mobile/Library/APPNAME"中查找文件。这个文件夹不太可能会改变(如果是这样,它可能会打破其他应用程序,并且当然是一个简单的修复方法)。

如果你看一下文件you link to,它并注明:

应用商店应用有一个由 安装过程中创建的文档文件夹。越狱应用程序没有。这是由应用程序到 创建自己的文件夹。如果您需要这种类型的文件夹,您必须使用 applicationDidFinishLaunching函数中的简单mkdir命令创建此文件夹。只需添加一个简单的功能: mkdir(“/ var/mobile/Library/YOURAPPNAME”,0755);如果该文件夹已存在,则不会造成任何损害。您希望这样做是因为安装过程 以root用户身份运行,并且该应用程序以用户移动版运行。如果Cydia为您做这 那么该文件夹将具有不正确的权限。

... 所以你需要自己创建子目录。如果你不这样做,它不会在那里。

根据我的经验,编写越狱应用程序只涉及这些稍微有点臭的编码实践(硬编码路径并自己创建它们)......它可能只是我们必须处理的事情。

更新:请务必在下方看到Saurik的评论。

+0

一个小警告。/var/mobile/Library /显然假设你的应用程序是作为默认的'mobile'用户运行的。一些越狱应用程序需要以root身份运行。如果确实如此,那么你应该使用文件夹/ var/root/Library/APPNAME。我用一个需要运行的应用程序来做到这一点,并将数据保存为root。越狱家伙抱怨了一下,但最终同意让我使用该位置。 – Nate 2011-06-24 06:14:02

相关问题