OSX / Xcode / Objective-C:如何检测安装的Flash Player版本?

时间:2011-09-12 18:14:31

标签: objective-c macos webkit

我需要采取不同的操作,具体取决于OS X上安装的Flash Player版本(由于Flash错误)。有没有办法以编程方式确定版本号?

我正在使用WebKit,BTW。

编辑:

我也试过

NSBundle* myBundle = [NSBundle bundleWithPath: @"/Library/Internet Plug-Ins/Flash Player.plugin/Contents/Info.plist"];

虽然路径名存在但是。 “myBundle”永远是零。

2 个答案:

答案 0 :(得分:1)

您只需要使用任何可以让您在当前安装的插件的CFBundleVersion处使用的内容。像这样的东西在shell脚本环境中工作:

/usr/libexec/PlistBuddy -c 'Print CFBundleVersion' /Library/Internet\ Plug-Ins/Flash\ Player.plugin/Contents/Info.plist

可能有一种方法可以搜索系统的已安装应用程序列表,以查找与com.macromedia.Flash Player.plugin匹配的软件包ID,并从系统记录中提取软件包版本。

编辑 :看起来NSWorkspace和启动服务只是将项目映射到相关应用的捆绑ID,然后将捆绑ID映射到网址或FSRef。所以最终,通过这种方法,你必须抓住适当的捆绑并从那里拉出版本。

可能还有一种方法可以从webview中运行的某些JavaScript代码中获取此信息。例如,Adobe的SWFObject似乎使这很容易。有关更多信息,请参阅"Detecting Flash Player versions and embedding SWF files with SWFObject 2"

答案 1 :(得分:1)

离开Contents/Info.plist部分;你需要得到捆绑,而不是它的Info.plist:

NSBundle* flashBundle = [NSBundle bundleWithPath: @"/Library/Internet Plug-Ins/Flash Player.plugin"];
NSString flashVersion = flashBundle.infoDictionary[(id)kCFBundleVersionKey];

请记住在没有安装Flash Player的情况下覆盖案例。