教えてください - OSX にインストールされているアプリケーションに関する情報を客観的な c または macruby で取得するために、どのオブジェクトとどのメソッドを使用できますか?
7 に答える
Appleのコマンドラインツールを呼び出すだけですsystem_profiler
。
% system_profiler SPApplicationsDataType
CまたはObjective-Cの場合system()
、これを行うために使用できます。
詳細情報:
% man system
% man system_profiler
すべてのGUIアプリを一覧表示する場合は、LaunchServicesを使用できます。関数のリストについては、リファレンスを参照してください。
.app
バンドルを手動でリストしないでください!それはすでにシステムによって行われており、クエリを実行するだけです。lsregister
で呼び出されるコマンドラインプログラムがあります
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
これは、LaunchServiceデータベースの詳細なダンプを取得するために使用できます。このツールは役立つ場合がありますが、配送プログラムではそれに依存しないでください。
OS Xには、実際には「アプリのインストール」という概念はありません。OS Xアプリケーションは、Finderに単一の仮想ファイルとして表示される自己完結型のバンドルです。中央レジストリはありません。ユーザーごとの「インストール」のために、アプリケーションが/ Applicationsまたは〜/Applicationsに配置されるという規則だけです。
あなたができる最善のことは、それらのディレクトリをその内容として列挙することであり、あなたが見つけたすべての「.app」ディレクトリはアプリケーションです。網羅的ではありません(ダウンロードしたばかりの場合は、デスクトップなどから小さなアプリを実行することがよくあります)。
以下の方法で移動しました。
コードからコマンドを実行
system_profiler SPApplicationsDataType -xml
します。キーSPApplicationsDataType
は、アプリケーション データのみが必要であることを意味します。-xml
より簡単に解析できるように xml の結果が表示されることを期待していることを意味します。パース結果配列
ここでは、コードからのコマンド実行に関する良い例を見つけることができます: Cocoa アプリからターミナル コマンドを実行します。
全体のコード例は次のようになります。
NSStirng * commangString = @"system_profiler SPApplicationsDataType -xml";
NSData * resultData = [CommandLineTool runCommand:commangString];
NSArray * appArray = [PlistManager objectFromData:resultData];
// parse array of NSDictionaries here ....
// method from PlistManager
+ (id) objectFromData: (NSData *) data {
NSString *errorString = nil;
NSPropertyListFormat format;
id object = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:NSPropertyListMutableContainers format:&format errorDescription:&errorString];
if (!errorString) {
return object;
} else {
NSLog(@"Error while plist to object conversion: %@", errorString);
return nil;
}
}
// runCommand method was used from post I mentioned before
UNIXライクなOSであるため、インストールした内容を実際に確認する方法はありません(もちろん、他のアプリを制御できる場合を除きます。明らかな理由で、これを行う方法はたくさんあります)。
通常、アプリは/ Applicationsまたは〜/ Applicationsに配置されますが、それらのフォルダーではなく、どこからでも実行できます(UNIXマシンのように)