Bu iki yöntemi çok yardımcı buldum. Paylaşılan uygulama grubunuz olmak için #define g_groupName
numaralı telefonu kullanmalısınız. CachesDirectory
, uygulamaya özgü önbellek klasörüne geri dönmeden önce paylaşılan uygulama grubu önbellekleri klasörünü seçecektir. CachesDirectoryLocal
her zaman uygulamaya özel önbellekler klasörünü döndürür. Bu yardımcı olur umarım!
#define g_groupName @"group.com.yourdomain.yourapp"
#define DISPATCH_ONCE(var, code) static dispatch_once_t onceToken; var dispatch_once(&onceToken, ^{ code });
#define FILE_MANAGER ([[NSFileManager alloc] init])
NSString* CachesDirectory()
{
DISPATCH_ONCE(static NSString* s_cacheFolderForGroup = nil;,
{
if (g_groupName.length != 0)
{
s_cacheFolderForGroup = [FILE_MANAGER containerURLForSecurityApplicationGroupIdentifier:g_groupName].path;
s_cacheFolderForGroup = [s_cacheFolderForGroup stringByAppendingPathComponent:@"Library/Caches/"];
[FILE_MANAGER createDirectoryAtPath:s_cacheFolderForGroup withIntermediateDirectories:YES attributes:nil error:nil];
}
});
if (s_cacheFolderForGroup.length != 0)
{
return s_cacheFolderForGroup;
}
return CachesDirectoryLocal();
}
NSString* CachesDirectoryLocal()
{
DISPATCH_ONCE(static NSString* s_cacheFolder = nil;,
{
NSArray* docDirs = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
if (docDirs.count != 0 && [[docDirs objectAtIndex:0] isKindOfClass:NSString.class])
{
s_cacheFolder = (NSString*)[docDirs objectAtIndex:0];
if (![s_cacheFolder hasSuffix:@"/"])
{
s_cacheFolder = [s_cacheFolder stringByAppendingString:@"/"];
}
}
else
{
s_cacheFolder = @"./Library/Caches/";
}
});
return s_cacheFolder;
}