一个iOS应用程序在其包中有写权限吗?
我在我的iOS应用程序的.app包中保存了一些运行时生成的文件。 在模拟器中,它工作正常,在设备崩溃:
可以在给定的着色器cachingpath中创build输出文件'/var/mobile/Applications/CB064997-B40E-4FE3-9834-B3217CE33489/SimedTest.app/Ogre3D/assets/RTShaderLib/cache/
有一个很好的概述,我应该不应该把文件 – 如何使用文档,图书馆和tmp等?
为了澄清,这些是在启动时创build的文件,它预先计算一些数据以节省时间。 如果他们不存在,他们会被创build,所以他们被删除,但没有在应用程序正在运行。
该包是只读的。 你不想乱它,原因有两个:
- 代码签名:签名通过与捆绑的内容进行validation; 如果你乱捆绑,你打破签名。
- 应用程序更新:更新通过用新下载的应用程序包replace整个应用程序包来工作; 您所做的任何更改都将丢失。
你应该在哪里保存东西:
- 文件:如果你想要它坚持和备份
- 图书馆/高速caching:如果你只是想caching下载的数据,如configuration文件图片; 如果房间较低,系统将自动删除,除非您指定了一个特殊的“不删除”标志。
- tmp:临时文件,当你的应用程序没有运行时被删除
有关完整的说明,请查阅“ 文件系统编程指南”和QA1719 。
不,每次你改变你的包,你的签名无效。
如果你想写文件,你需要写在最好的文件夹,这取决于你想要用这个文件做什么。
- 长文件的文档文件夹
- caching小操作
- 等等
编辑
要获得path
你需要这样的东西:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"filename.ext"];
有了这个path
你可以像这样写或读:
写:
NSString *content = @"One\nTwo\nThree\nFour\nFive"; [content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];
读:
NSString *content = [[NSString alloc] initWithContentsOfFile:fileName usedEncoding:nil error:nil];