2011-09-12 125 views
3

根據安裝在OS X上的Flash Player版本(由於Flash錯誤),我需要採取不同的操作。有沒有辦法編程確定版本號?OSX/Xcode/Objective-C:如何檢測安裝的Flash Player版本?

我正在爲此使用WebKit,順便說一句。

編輯:

我也試過

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

而且雖然路徑存在。 「myBundle」總是零。

+0

可能值得指出的是,可能沒有安裝任何Flash版本。我非常肯定目前發行的Mac OS X版本沒有與Flash一起提供;用戶必須從Adobe安裝它。 –

+0

是的。真正。檢測應該準備好「沒有安裝」場景 – JasonGenX

+0

你在寫什麼?網頁瀏覽器?一個瀏覽器插件?其他一些使用Flash播放器的原生應用程序? –

回答

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映射到一個URL或FSRef。所以最終,用這種方法,你必須抓住合適的捆綁包並從那裏取出版本。

還有一種方法可以從webview中運行的一些JavaScript代碼獲取此信息。例如,Adobe的SWFObject似乎使這很容易。有關更多信息,請參見"Detecting Flash Player versions and embedding SWF files with SWFObject 2"

+0

爲了找到插件的包文件夾,'mdfind'kMDItemCFBundleIdentifier ==「com.macromedia.Flash Player.plugin」''會很好地實現這個技巧。 –

+0

我嘗試了以下方法,但「myBundle」總是「無」 - NSBundle * myBundle = [NSBundle bundleWithIdentifier:@「com.macromedia.Flash Player.plugin」]; [myBundle加載]; //不知道爲什麼! – JasonGenX

+0

@Ron M .:這不會超出你的應用程序包。您需要使用適當的'NSWorkspace'方法或啓動服務功能(無論您喜歡什麼)來查找該捆綁包ID的捆綁包URL。然後你可以使用該URL創建'NSBundle'。 –

1

只要放棄Contents/Info.plist部分;你需要得到的捆綁,而不是它的Info.plist:

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

記住覆蓋的情況下,當沒有安裝Flash播放器。

相關問題