Я хочу получить размеры хранилища для каждого приложения в iPhone с помощью объектного C.
Кто-нибудь может это сделать...
Как получить размер хранилища программных приложений в iPhone
Ответ 1
Предполагая, что вы разрабатываете джейлбрейк-устройство (если нет, тогда невозможно получить доступ к приложениям на устройстве), SpringBoard должен иметь предопределенные методы для доступа к метаданным всех установленных приложений. Если вы посмотрите на заголовки SBApplication.h, тогда есть методы для получения метаданных.
Ответ 2
NSString *folderPath = "give application path here"
Пример: NSString * folderPath = @ "/private/var/mobile/Applications/2B63FD7F-2082-415D-A00C-F07C4BE281AA/Example.app";
NSArray *filesArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:folderPath error:nil];
NSEnumerator *filesEnumerator = [filesArray objectEnumerator];
NSString *fileName;
unsigned long long int fileSize = 0;
while (fileName = [filesEnumerator nextObject])
{
NSDictionary *fileDictionary = [[NSFileManager defaultManager] fileAttributesAtPath:[folderPath stringByAppendingPathComponent:fileName] traverseLink:YES];
NSLog(@" fileDictionary %@",fileDictionary);
fileSize += [fileDictionary fileSize];
}
NSLog(@" App Name and App size: %@ : %lld", folderPath,fileSize);
если вы хотите найти все размеры приложений, взять весь путь приложений в массиве и написать для оператора цикла для пути к папке
NSArray *applicationsPath="Here array contain all applications path"
for (int i=0; i<applicationPath.count; i++)
{
NSString *folderPath = [applicationPath objectAtIndex:i]
NSArray *filesArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:folderPath error:nil];
NSEnumerator *filesEnumerator = [filesArray objectEnumerator];
NSString *fileName;
unsigned long long int fileSize = 0;
while (fileName = [filesEnumerator nextObject])
{
NSDictionary *fileDictionary = [[NSFileManager defaultManager] fileAttributesAtPath:[folderPath stringByAppendingPathComponent:fileName] traverseLink:YES];
NSLog(@" fileDictionary %@",fileDictionary);
fileSize += [fileDictionary fileSize];
}
NSLog(@" App Name and App size: %@ : %lld", folderPath,fileSize);
}
Ответ 3
Если устройство не заблокировано, вы не сможете обращаться к каждой папке приложения программно.
Это связано с тем, что каждое приложение iOS работает в изолированной среде, то есть ваше приложение может ТОЛЬКО получать доступ к активам в этом каталоге. Если устройство заблокировано, это требование удаляется, и вам предоставляется полный доступ к диску устройства.