我正在创建一个应用程序,它收集OS X中已安装应用程序的信息。
我尝试使用".app"
扩展名
我创建了一个函数,它可以获取已安装应用程序的一些信息,但我正在寻找更多数据,如版本,包ID和其他有用信息。
这是我获取属性的方法:
- (NSDictionary *) attributesForFile:(NSURL *)anURI fileName
:(NSString*)fileName{
// note: singleton is not thread-safe
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *aPath = [anURI path];
if (![fileManager fileExistsAtPath:aPath]) return nil;
NSError *attributesRetrievalError = nil;
NSDictionary *attributes = [fileManager attributesOfItemAtPath:aPath
error:&attributesRetrievalError];
if (!attributes) {
NSLog(@"Error for file at %@: %@", aPath, attributesRetrievalError);
return nil;
}
NSMutableDictionary *returnedDictionary =
[NSMutableDictionary dictionaryWithObjectsAndKeys:
[attributes fileType], @"fileType",
[attributes fileModificationDate], @"fileModificationDate",
[attributes fileCreationDate], @"fileCreationDate",
[attributes fileOwnerAccountName],@"fileOwnerAccount",
fileName,@"fileName",
[NSNumber numberWithUnsignedLongLong:[attributes fileSize]], @"fileSize",
nil];
return returnedDictionary;
}
答案 0 :(得分:4)
为什么要传递NSURL
参数和NSString
参数?
您可以从应用的NSBundle
获取您要查找的信息:
NSBundle *myBundle = [NSBundle bundleWithPath:@"/Applications/SomeApp.app"];
NSLog(@"%@", [myBundle infoDictionary]);
答案 1 :(得分:2)
term> /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -dump | grep '.app' | grep '.path'
答案 2 :(得分:0)
可以使用bash脚本完成
:#!/bin/bash
cd /Applications
files=(*.app)
for file in "${files[@]}"; do
value=`plutil -p "/Applications/$file/Contents/Info.plist" | grep CFBundleShortVersionString`
echo "${file//.app/}: ${value##*>}" | tr -d '"'
done
示例:
Android Studio:3.6
App Store:3.0
AppCleaner:3.5