是否可以将不同的plist复制到应用程序包代码中?

时间:2009-07-16 08:25:14

标签: objective-c cocoa plist bundle

我的问题在标题上面有说明,但我会在这里再写一次

是否可以将不同的plist复制到应用程序包代码中?

这实际上与我之前的问题有点相关;)Create a dictionary property list programmatically

但是因为我可以写出plist(并测试我是否做错了)我想知道我是否可以复制我的书面文件

[testBook writeTofile:@/Users/jack/testbook2.plist" atomically:NO];

到我的应用程序包代码(以便它可以从这里读取 NSString *path = [[NSBundle mainBundle] bundlePath]; NSString *dataPath = [path stringbyAppendingPathcomponent:@"testbook2.plist"];

另一种选择也很好,例如我可以直接从另一条路径而不是mainBundle读取我的plist

2 个答案:

答案 0 :(得分:2)

我不确切知道你在做什么,但根据你的应用程序,你可能想要使用Application Support目录:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
if ([paths count] > 0) {
    NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"App Name"];
    // Create the directory if it doesn't exist, etc.
} else {
    NSLog(@"Fail!");
    // ...
}

答案 1 :(得分:2)

在物理上,是的,有时候是可能的。

不,不要那样做!!

好的...将内容复制到App Bundle中是不好的,您的应用包不是保存设置或数据的地方。您应该将您的应用包视为只读。你应该这样做有几个原因:

  1. 虽然大多数情况下Mac OS X系统上的用户有权写入应用程序,但有时他们却没有。想想那些没有在学校使用管理员帐户或实验室部署的孩子。
  2. 它将使代码签名无效。如果您签署您的应用程序,这将更改签名并破坏协同设置,导致各种奇怪的问题(丢失应用程序具有的任何防火墙权限,告诉用户应用程序已更改并再次要求他们获取钥匙串权限等)。在未来,这可能还会弹出各种各样的警告,因为篡改应用程序是一个很大的安全危险信号。
  3. 它无法在iPhone上运行。这可能不是问题,但是如果你每个人都打算在iPhone上使用这个代码,那么应用程序包就会被沙盒读取。
  4. 放置此类内容的正确位置是“应用程序支持”文件夹的子文件夹