iphone/ipod touch app 的开发使用了沙盒,即程序员能访问的一些文件要在自己程序的沙盒之内,一个应用程序的目录除了编译后的程序文件,通常还会有自己的document,tmp目录,可以通过调用api来获取这些路径,然后保存文件。
当使用xcode编译执行时,通常会启动一个iphone simulator来执行app,但是有个问题是,每次用simulator启动时,生成的app程序的根目录都是不同的。这也意味着,如果你有一份存好数据的文件,要放到document或者tmp目录下,然后在应用程序里通过调用GetDocumentDirectory类似的api来读时,得到的都是不同的路径(如果不修改代码,不重新编译则不会),也就是说,你需要每次测试运行时,都要把你保存好的数据文件拷到本次程序运行目录的document下,这样调试起来非常麻烦。如何解决这个问题?
其实也很简单。。。用google大法就好了。沙盒技术是在跑真正的iphone/ipod touch上时的限制,当跑simulator时,其实可以从其它路径读取文件。也就是说,你可以把文件放到一个你指定的其它地方,不需要放到app下的document下,这样当跑simulator时,app也可以读到非自己沙盒的目录下的文件。而当真正发布一个app时,也就是在iphone/ipod touch上运行时,则每次app的运行的根目录是固定的(不象跑simulator时会动态改变),这时再把数据文件放到真正的沙盒document或者tmp目录下就可以了。
为了综合这上面这两种情况,当以simulator的方式来跑的时候,会有一个
TARGET_IPHONE_SIMULATOR
的宏,所以我们可以在获取文件时这么写:
- (NSString *) dataFilePath {
#if TARGET_IPHONE_SIMULATOR
return @"/Users/fengbo/project/test/yourFileName";
#else
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory
, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:@"yourFileName"];
#endif
}
这样就可以满足上面两种情况了。
分享到:
相关推荐
根据调试方式不同,真机和模拟器文件放置路径不同,分别复制对应的Lib文件到以下路径.../Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib 将libstdc++.6.0.9.dylib,libstdc++.6.dylib,libstdc++.dylib文件拷贝到以下路径: /...
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/ 将dylib副本放到下面路径中: /Applications/Xcode.app/Contents/Developer/...
xCode error-->>ld: library not found for -lstdc++.6.0.9 clang: error: linker.../Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib
libstdc++.6.0.9.tbd 里面有添加路径真机:open /Applications/Xcode....模拟器:open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib
XCode 10 libstdc++库缺失修复:将文件放入以下路径 ...模拟器存放路径:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib
报not found libstdc++.6.0.9.tbd,是因为Xcode10没有这个库,可下载文件到路径:...模拟器/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/
iOS的沙盒机制,应用只能...上面的完整路径为:用户->资源库->Application Support->iPhone Simulator->6.1->Aplications Documents:苹果建议将程序创建产生的文件以及应用浏览产生的文件数据保存在该目录下,iTunes
模拟器应⽤用沙盒的根路径在: (apple是⽤用户名, 7.0是模拟器版本) /Users/apple/Library/Application Support/iPhone Simulator/7.0/Applications 二、应用沙盒结构分析 应⽤程序包:(上图中的Layer)包含了所有的...
模拟器下keychain文件路径:~/Library/Application Support/iPhone Simulator/4.3/Library/Keychains keychain里保存的信息不会因App被删除而丢失,在用户重新安装App后依然有效,数据还在。 关于备
iOS应用数据存储的常用方式 1.XML属性列表(plist)归档. 2.Preference(偏好设置). 3.NSKeyedArchiver归档. 4.SQLite3 .../Users/apple/Library/Application Support/iPhone Simulator/6.0/Appl
ZXHookDetection 越狱检测 1.使用NSFileManager通过检测一些越狱后的关键文件/路径是否可以访问... if(TARGET_IPHONE_SIMULATOR)return NO; for (int i = 0;i < sizeof(JailbrokenPathArr) / sizeof(char *);i++) {
根据调试方式不同,真机和模拟器文件放置路径存在差异,分别复制对应的Lib文件到下面的路径即可解决Xcode编译报错 For Device Put tbd copy to the path: /Applications/Xcode.app/Contents/Developer/Platforms/...
未来是移动互联网的时代,未来将是Windows Phone、Android、iphone三足鼎立的时代,掌握了移动开发的技能的人是就业市场的抢手货。微软推出的Windows Phone平台是微软在移动互联网时代的一个重量级产品,微软对于...