一个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];
- iOS:如何正确访问UITableViewCell的contentView上的自定义标签?
- 如何在iOS中下载多个mp4文件?
- 如何更改GoogleMap上的语言?
- Xcode 5.1 iOS模拟器7.1黑屏问题(dyld:Symbol not found:__dealloc)
- 通过PayPal iOS SDK进行PayPal实时交易的问题
- iOS应用架构介绍
- 2274.US BLACK打印
- iOS的glGenerateMipmap是同步的,还是可能是asynchronous的?
- UINavigationController方法setToolbarHidden在Xcode 9中的bug:自动布局约束的无限计算导致OOM