我的应用程序刚刚被苹果拒绝,因为它在文档目录中存储临时文件或缓存文件。正确的。他们的拒绝信息说:
应用程序使用的临时文件只应存储在
/tmp
目录中。
我想,除了文档、和库之外,应用程序文件夹中还有。
我现在正在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模拟器的不同行为,以及是否有可能在调试时跟踪应用程序的临时目录?
发布于 2016-05-10 23:55:07
更新2016年答案:
请在“确定在何处存储应用程序特定文件的官方iOS开发苹果网页”一节中查看此以获得解释。
以下是Swift中的3个函数,旨在将NSURL返回到这些目录并使您的类似功能变得更简单。
Swift
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)
}
发布于 2016-09-04 15:28:43
iOS 9或更高版本·Swift 3或更高版本
let tmpDirURL = URL(fileURLWithPath: NSTemporaryDirectory())
iOS 10.0+Beta,macOS 10.12+,tvOS 10.0+Beta & watchOS 3.0+·Xcode 8·Swift 3或更高版本
let tmpDirURL = FileManager.default.temporaryDirectory
发布于 2012-08-10 08:16:42
我已经在一个真正的设备上测试过这个,它返回了:"/private/var/mobile/Applications/C82383-EBD6-4F72-BC16-A865478D27/tmp/tempzip.zip“
因此,总的来说,使用NSTemporaryDirectory()
是查找临时目录路径的正确方法,如果您想调试和查看其中所做的操作,如果您使用的是iPhone模拟器,则需要在查找器中手动找到它。
检查下面较新的答案(这个不推荐)
https://stackoverflow.com/questions/11897825
复制相似问题