phi*_*ppe 24 objective-c temporary-directory ios
我的应用程序刚被Apple拒绝,因为它将临时文件或缓存文件存储在文档目录中.对.他们的拒绝消息说明:
应用程序使用的临时文件只应存储在
/tmp目录中
我想除了Application文件夹中的Documents and Library之外.
我现在正试图在iPhone模拟器中调试此问题,当我使用时NSTemporaryDirectory(),我在Xcode调试器中获得的值是/var/folders/yj/gnz1c7156c7d6d4fj429yms40000gn/T/tempzip.zip,而不是/Users/me/Library/Application Support/iPhone Simulator/5.1/Applications/8F71AB72-598C-427A-A116-36833D3209F7/tmp/tempzip.zip.
所以:NSTemporaryDirectory()使用iPhone模拟器有不同的行为,是否可以在调试时跟踪应用程序的临时目录?
Leo*_*bus 29
iOS 9或更高版本•Swift 3或更高版本
let tmpDirURL = URL(fileURLWithPath: NSTemporaryDirectory())
Run Code Online (Sandbox Code Playgroud)
iOS 10.0 + Beta,macOS 10.12 +,tvOS 10.0 + Beta和watchOS 3.0+•Xcode 8•Swift 3或更高版本
let tmpDirURL = FileManager.default.temporaryDirectory
Run Code Online (Sandbox Code Playgroud)
phi*_*ppe 19
更新2016年回答:
用户明确接受并且可能在他/她的iCloud空间中备份的数据应写在用户的"Documents"目录中
属于并扩展您的应用程序的数据(扩展用户可以下载,例如,...),但不在捆绑包中,应该写在"Application Support /"目录的子文件夹中,具有appID的标题.它也可以是"Cache"目录.
具有短寿命的数据可以存储在应用程序的tmp目录中.在这种情况下,可以使用NSTemporaryDirectory()来获取"tmp"目录.请查看此链接以获取更多帮助.
有关说明,请参阅 " 确定应用程序特定文件的存储位置 "部分中的iOS官方开发Apple页面.
下面是Swift中的3个函数,旨在将NSURL返回到这些目录并使您更简单.
斯威夫特:
func GetDocumentsDirectory()->NSURL{
//returns User's "Documents" directory
//something like this on a real device : file:///private/var/mobile/Containers/Data/Application/APPID/Documents/
//something like this on the simulator : file:///Users/MACUSERID/Library/Developer/CoreSimulator/Devices/SIMDEVICEID/data/Containers/Data/Application/APPUUID/Documents/
let filemgr = NSFileManager.defaultManager()
let docsDirURL = try! filemgr.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
return docsDirURL
}
func GetApplicationSupportDirectory()->NSURL{
//returns Application's support directory
//something like this on a real device : file:///private/var/mobile/Containers/Data/Application/APPID/Library/Application%20Support/YOURAPPBUNDLEID/
//something like this on the simulator : file:///Users/MACUSERID/Library/Developer/CoreSimulator/Devices/SIMDEVICEID/data/Containers/Data/Application/APPUUID/Library/Application%20Support/YOURAPPBUNDLEID/
let AllDirectories : [NSURL]
var ApplicationSupportDirectory : NSURL=NSURL.init()
var ApplicationDirectory : NSURL=NSURL.init()
AllDirectories=NSFileManager.defaultManager().URLsForDirectory(.ApplicationSupportDirectory, inDomains: .UserDomainMask)
if AllDirectories.count>=1{
ApplicationSupportDirectory=AllDirectories[0]
}
if !ApplicationSupportDirectory.isEqual(nil) {
ApplicationDirectory=ApplicationSupportDirectory.URLByAppendingPathComponent(NSBundle.mainBundle().bundleIdentifier!)
}
return ApplicationDirectory
}
func GetTemporaryDirectory()->NSURL{
//returns Application's temporary directory
//something like this on a real device : file:///private/var/mobile/Containers/Data/Application/APPID/tmp/
//something like this on the simulator : file:///Users/MACUSERID/Library/Developer/CoreSimulator/Devices/SIMDEVICEID/data/Containers/Data/Application/APPUUID/tmp/
return NSURL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
}
Run Code Online (Sandbox Code Playgroud)
phi*_*ppe 12
我在真实设备上对此进行了测试,然后返回:"/ private/var/mobile/Applications/C82383-EBD6-4F72-BC16-A865478D27/tmp/tempzip.zip"
总的来说,使用NSTemporaryDirectory()是查找临时目录路径的正确方法,如果要调试并查看其中的内容,则需要在Finder中手动查找,如果您使用的是iPhone模拟器.
查看下面的新答案(不推荐使用此答案)
根据文档,你应该避免NSTemporaryDirectory()支持这种方法
- (NSURL)URLForTemporaryFolder
{
// Get a parent folder, trying user folder (fails iOS) and falling back to AppSupport and Docs
NSURL *parentFolderURL = [NSURL URLForDirectory:NSUserDirectory domainMask:NSUserDomainMask];
if (!parentFolderURL) parentFolderURL = [NSURL URLForDirectory:NSApplicationSupportDirectory domainMask:NSUserDomainMask];
if (!parentFolderURL) parentFolderURL = [NSURL URLForDirectory:NSDocumentDirectory domainMask:NSUserDomainMask];
// Get the temp folder URL using approach outlined in the docs
NSURL *tmpURL = [[NSFileManager defaultManager]
URLForDirectory:NSItemReplacementDirectory
inDomain:NSUserDomainMask
appropriateForURL:parentFolderURL
create:YES
error:NULL];
return tmpURL;
}
Run Code Online (Sandbox Code Playgroud)
请注意,每次调用它时都会创建一个新的唯一临时文件夹,由您来清理它.
| 归档时间: |
|
| 查看次数: |
28421 次 |
| 最近记录: |