2011-09-12 3 views
3

OS XにインストールされているFlash Playerのバージョンに応じて、別のアクションをとる必要があります(Flashのバグのため)。プログラムでバージョン番号を確認する方法はありますか?OSX/Xcode/Objective-C:インストールされているFlash Playerのバージョンを検出する方法は?

私はこのためにWebKitを使用しています。

EDIT:

私も

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 Playerを使用する他の種類のネイティブアプリですか? –

答えて

1

あなたは、現在インストールされているプラ​​グインのCFBundleVersionであなたをお待ちしています。このような何かが、シェルスクリプト環境で動作します。

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

com.macromedia.Flash Player.pluginに一致するバンドルIDについてインストールされているアプリケーションのシステムのリストを検索し、同様に、システムレコードからのバンドル版を引き出すための方法があるかもしれません。

EDIT:それは両方のNSWorkspaceのように見え、打ち上げサービスだけで、関連するアプリケーションのIDをバンドルする項目をマッピングして、URLまたはFSRefにバンドルIDをマッピングします。最終的には、このアプローチでは、適切なバンドルを取得してそこからバージョンを取得する必要があります。

ウェブビュー内で実行されているJavaScriptコードからこの情報を取得する方法もあります。 AdobeのSWFObjectはこれを非常に簡単にするようです。詳細については、"Detecting Flash Player versions and embedding SWF files with SWFObject 2"を参照してください。

+0

プラグインのバンドルフォルダを見つけるために、 'mdfind 'kMDItemCFBundleIdentifier ==" com.macromedia.Flash Player.plugin "''はトリックをうまくやります。 –

+0

私は以下を試しましたが、 "myBundle"は常に "nil"です - NSBundle * myBundle = [NSBundle bundleWithIdentifier:@ "com.macromedia.Flash Player.plugin"]; [myBundle load]; //理由はわからない! – JasonGenX

+0

@Ron M .:アプリのバンドルの外には見えません。そのバンドルIDのバンドルURLを見つけるには、適切な 'NSWorkspace'メソッドまたはLaunch Services関数(希望どおり)を使用する必要があります。そのURLを使用して 'NSBundle'を作成することができます。 –

1

Contents/Info.plist部分をそのまま残してください。

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

何のFlash Playerがインストールされていないがあるときにケースをカバーすることを忘れないでください:あなたは、バンドルではなく、そのInfo.plistファイルを取得する必要があります。

関連する問題