获取iOS 8中所有已安装应用程序的列表

13

如何在iOS 8中以编程方式获取iPhone设备上所有安装的应用程序列表。

如果有人知道如何使用私有API(但设备未越狱)解决此问题,那就太好了。

我知道可以使用iTunes搜索API实现,但它只提供从iTunes安装的应用程序。我需要设备上所有的应用程序,无论是来自iTunes还是用户开发的或系统应用程序。

2个回答

21

试试这个。 它有效,我已测试过。

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

1
@RaduVlad "iHasApp"是检测已安装应用程序的“App Store安全”方式,如果您无法找到所有列表中的应用程序,则可以“策划自己的数据集(在他的Github readme中)”。据我所知,iHasApp使用了两种方法来获取已安装的应用程序列表:第一种方法是“canOpenUrl()”,这意味着注册了自定义URL的应用程序将被找到;第二种方法是检查正在运行的应用程序的“进程名称”,这意味着不经常运行的应用程序将不会被找到。希望这些信息能够有所帮助 :) - Roxasora
1
大家好,iOS9怎么样了?有没有办法获取已安装或正在运行的应用程序列表? - Dmitry Isakov
1
@DmitryIsakov 伙计,你可以看一下ios-runtime-headers 链接,如果那里仍然有LSApplicationWorkspace类,那么你可以使用上面的解决方案以相同的方式获取已安装的应用程序。如果你想获取正在运行的应用程序...我知道一个旧方法,但我没有在iOS9上尝试过,你可以给我你的电子邮件,我会把主要函数发送给你:D - Roxasora
@Roxasora,我已经回复了你的电子邮件。你看到我的信了吗? - Dmitry Isakov
1
这是私有API,使用它将导致应用程序被苹果拒绝。苹果没有提供获取已安装应用程序列表的方法。 - Mohit kumar
显示剩余13条评论

6

我已经对以上代码进行了重构,以适应Xcode 7.3。它在iOS9上运行得非常好。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接