今天总结一下
针对非越狱设备的方法两个:
第一个方法,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); }];