5

据我所知(并到处阅读)应用程序的文档目录应该在/var/mobile/Library/iPhone 上的某个位置,但如果我正在记录获取的目录,它是/var/mobile/Documents.

我得到的目录如下:

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

如果我Settings.xml在这里创建一个名为的文件或者我的应用程序/等有问题,这是一个问题吗?

信息:我有一部带有 iOS 4.2.1 的越狱 iPhone 4,我的应用程序通过 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/ 但正如我之前描述的,我从来没有得到这个目录。

4

7 回答 7

2

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

如果您查看 /var/mobile/Library/ 文件夹的内容,您会发现许多应用程序的数据都存储在那里,包括越狱应用程序。我不清楚是否有一个方便的常量NSDocumentDirectory可以用来获得它。但是,您始终可以对源代码进行硬编码以在@"/var/mobile/Library/APPNAME". 这个文件夹不太可能发生变化(如果发生变化,它可能会破坏其他应用程序,并且肯定是一个容易修复的问题)。

如果您查看链接到的文档,它确实指定:

Appstore 应用程序有一个由安装过程创建的 Documents 文件夹。越狱的应用程序没有。由应用程序创建自己的文件夹。如果您需要这种类型的文件夹,您必须在 applicationDidFinishLaunching 函数中使用简单的 mkdir 命令创建它。只需添加一个简单的函数:mkdir(“/var/mobile/Library/YOURAPPNAME”, 0755); 如果该文件夹已经存在,则不会造成任何伤害。您想要这样做是因为安装过程以 root 用户身份运行,而应用程序以用户 mobile 身份运行。如果 Cydia 为您执行此操作,则该文件夹将具有不正确的权限。

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

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

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

于 2011-06-24T06:10:52.187 回答
0

Via Cydia apps installed into another folder, that's why you are getting different directory.

于 2011-01-10T20:11:26.600 回答
0

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

于 2011-02-19T10:47:06.240 回答
0

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

于 2011-01-12T03:16:24.737 回答
0

我也遇到了这个问题……我还没有弄清楚发生了什么,所以我接受了在 /var/mobile/Documents 工作。但是,我必须在我的设备中手动创建该目录(通过 ssh 或移动终端)并将其权限设置为 666 [chmod -r 777 /var/mobile/Documents] 以让我的应用程序在那里保存和加载文件。

再见!

于 2011-01-20T11:02:00.210 回答
0

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

于 2011-01-23T16:04:09.230 回答
0

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

不建议将文件存储在沙箱之外。

于 2011-02-23T19:39:10.663 回答