iOS应用程序是否在其捆绑包中具有写入权限?

时间:2012-10-01 19:08:41

标签: ios

我在iOS应用程序的.app包中保存了一些运行时生成的文件。在模拟器中它工作正常,在它崩溃的设备中:

  

可以在给定的着色器缓存路径中创建输出文件   “/var/mobile/Applications/CB064997-B40E-4FE3-9834-B3217CE33489/SimedTest.app/Ogre3D/assets/RTShaderLib/cache /

是否可以很好地概述我应该放置文件的位置 - 如何使用Documents,Library和tmp等?

为了澄清,这些是在启动时创建的文件,它们预先计算一些数据以节省时间。如果他们不在场,他们就会被创建,所以删除它们很好,但在应用程序运行时则不行。

2 个答案:

答案 0 :(得分:17)

捆绑包是只读的。你不想乱用它有两个原因:

  • 代码签名:签名通过捆绑包的内容进行验证;如果你乱用了这个包,就会破坏签名。
  • 应用更新:通过使用新下载的应用包替换整个应用包,更新工作;你所做的任何改变都会丢失。

你应该保存的东西:

  • 文件:如果您希望它保留并备份
  • 图书馆/缓存:如果您只想缓存下载的数据,例如个人资料照片;除非你指定一个特殊的do-not-delete标志,否则系统将会自动删除它,除非你指定一个特殊的do-not-delete标志。
  • tmp:临时文件,在您的应用未运行时删除

要获得完整说明,请查看File System Programming GuideQA1719

答案 1 :(得分:4)

不,每次更换捆绑包时,您的签名都会失效。

如果你想写文件,你需要写在最好的文件夹中,具体取决于你想用这个文件做什么。

  1. 长文件的文档文件夹
  2. 缓存小型操作
  3. 修改

    要获得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];