如何检测已安装的iOS应用





今天总结一下


针对非越狱设备的方法两个:

第一个方法,canOpenURL 可以看这里:http://blog.csdn.net/ydj213/article/details/8053393
第二个,sysctl(),获取进程名然后比较 ,可以看这里 http://blog.csdn.net/ydj213/article/details/8186761


一个私有方法获取应用列表

#include <objc/runtime.h>
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject* workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
NSLog(@"apps: %@", [workspace performSelector:@selector(allApplications)]);



下面是一个开源的项目,利用的大概也是这两个方法


在github上发现了ihanApps项目;

之前这个项目是加密的,但是现在都完全开放了,可以看到源码;

下载地址:https://github.com/danielamitay/iHasApp


实现方式:

我们使用了多种方法。  如果你需要检测的其他应用程序有一个自定义的URL注册,您可以查看,URL是否存在。  否则,你可以看一下该应用程序在后台运行的进程名称。

一些研究表明,有4个[ 1 , 2 , 3 , 4 ]的方法通过用户的应用程序进行搜索。 最后两个是私有的API /越狱,方便的前两个特别提到由Bump: 检查设备 (以及已安装的应用程序) 的支持,如果一个特定的URL方案 ,并比较该装置目前正在运行的进程称为应用程序的可执行文件名 ​​。 具体而言,这两个功能是canOpenUrl:和sysctl()。

在不进入技术细节的情况下,开发人员是否具有一系列的iOS应用程序的应用程序的ID,可执行文件的名称,并在支持的URL方案(如有),然后,开发人员可以检查与相对精度什么应用程序被安装。注意,提供有关安装的应用程序,这是不同的开发人员必须了解更多的信息比。 的准确性是信息的数据库的规模和质量的好坏。

不过有个缺点就是,手机上不常用的程序检测不出来,所以还是不太准确的。


使用方法:

#import "iHasApp.h"

iHasApp *detectionObject = [iHasApp new];
[detectionObject detectAppDictionariesWithIncremental:^(NSArray *appDictionaries) {
    NSLog(@"Incremental appDictionaries.count: %i", appDictionaries.count);
} withSuccess:^(NSArray *appDictionaries) {
    NSLog(@"Successful appDictionaries.count: %i", appDictionaries.count);
} withFailure:^(NSError *error) {
    NSLog(@"Failure: %@", error.localizedDescription);
}];




你可能感兴趣的:(ios,iPhone,检测应用)