在OS X中查找已安装应用程序的版本

时间:2014-02-19 10:14:05

标签: macos cocoa nsfilemanager .app

我正在创建一个应用程序,它收集OS X中已安装应用程序的信息。

我尝试使用".app"扩展名

查找Applications文件夹中安装的所有应用程序

我创建了一个函数,它可以获取已安装应用程序的一些信息,但我正在寻找更多数据,如版本,包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;
}

3 个答案:

答案 0 :(得分:4)

  1. 为什么要传递NSURL参数和NSString参数?

  2. 您可以从应用的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