インストールされているアプリの一覧をログ出力する "iOSInstalledApps"
以前、『デバイスにインストールされているアプリ一覧を取得する』という記事を書いたのですが、ここに書いた
- アプリのプロセス名一覧を持っておいて、そのプロセスが存在すればインストールされていると判断する
- アプリのカスタムURLスキーム一覧を持っておいて、そのカスタムURLスキームが使用可能であればインストールされていると判断する
この2つの方法を実装しているOSSがありました。
(リポジトリURL)
https://github.com/arg0s/iOSInstalledApps
ビルドして実機で実行すると、コンソールにわらわらとログが出てきます。
自分の実機で試してみた結果がこちら。
2012-09-28 17:25:53.668 iOSInstalledApps[837:907] Process List: (
"kernel_task",
launchd,
UserEventAgent,
wifid,
timed,
syslogd,
powerd,
lockdownd,
installd,
deleted,
mediaserverd,
mDNSResponder,
locationd,
imagent,
iaptransportd,
fseventsd,
"fairplayd.N94",
AppleIDAuthAgent,
configd,
backboardd,
kbd,
CommCenter,
BTServer,
notifyd,
itunesstored,
(以下略)
)
2012-09-28 17:25:53.704 iOSInstalledApps[837:907] Installed apps: {
"fb:" = 1;
instagram = 0;
"mailto:" = 1;
"sms:" = 1;
"tel:" = 1;
"twitter:" = 0;
}
このログをみると、"Process List" の方は、アプリではないプロセス名がたくさん見受けられます。どうやら、プロセス名一覧を出力してるだけで、アプリのプロセスかどうか、の判断はしてないようです。
また、"Installed apps" の方は、"fb:", "twitter:" 他、6行しか出てきていません。
おや?と思いコードをみると、
NSArray* schemes = @[ @"tel:", @"sms:", @"mailto:",@"mailto:",@"fb:",@"twitter:",@"instagram"];
となっていて、上記配列で定義されたカスタムURLスキームを持つアプリがあるかどうか判定してるだけのようです。
プロセス名とアプリ名、スキームとアプリ名の対応リストが plist 形式か何かでリポジトリに入ってることを期待したのですが・・・
LLInstalledApps クラス
前述した通り判定用のデータはあまり充実してなかったのですが、そちらはあくまでデモプロジェクトで、本体は LLInstalledApps クラス、という位置づけのようです。
で、このクラスは、この用途において使い回しやすいようにつくられていて、
+ (NSArray *) runningApps; - (BOOL) appsInstalledWithScheme:(NSString *)applicationScheme; + (NSDictionary *) appsInstalledWithSchemes:(NSArray *)applicationSchemes;
こんな感じでプロセス一覧を返してくれたり、スキーム一覧の配列を渡せばインストールされてるかどうかの判定結果をNSDictionary型で返してくれたりするメソッドを備えています。
(参考記事)
iOSに何がインストールされているのか調べる「iOSInstalledApps」