在iphone上查找已安装的应用程序列表

时间:2011-01-06 12:02:04

标签: iphone objective-c ios

是否可以通过编程方式找到iOS设备上安装的所有应用的名称? 有没有可用的API?

感谢您的帮助

7 个答案:

答案 0 :(得分:13)

不,由于沙盒环境,iOS应用程序无法访问/关于其他应用程序的信息。

答案 1 :(得分:4)

是的,可以获取所有已安装应用的列表

-(void) allInstalledApp
{    
    NSDictionary *cacheDict;

    NSDictionary *user;

    static NSString *const cacheFileName = @"com.apple.mobile.installation.plist";

    NSString *relativeCachePath = [[@"Library" stringByAppendingPathComponent: @"Caches"] stringByAppendingPathComponent: cacheFileName];

    NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent: @"../.."] stringByAppendingPathComponent: relativeCachePath];

    cacheDict    = [NSDictionary dictionaryWithContentsOfFile: path];

    user = [cacheDict objectForKey: @"User"];

    NSDictionary *systemApp=[cacheDict objectForKey:@"System"];
}   

systemApp Dictionary包含所有系统相关应用的列表 并且user Dictionary包含其他应用信息。

答案 2 :(得分:2)

不是来自设备。但是,从桌面上你可以窥视iTunes资料库。

答案 3 :(得分:1)

有一些方法可以在没有越狱设备的情况下执行此操作,并且不会拒绝您的应用 1.获取当前正在运行的进程列表,请参阅this SO回答。您需要将流程名称翻译为应用名称 2.检查是否有任何应用程序使用UIApplicationDelegate canOpenURL注册了唯一的URL方案。有一些网站编目已知的网址方案,this是最好的网站。

如果某个应用当前未运行且未注册自定义网址方案,则这些方法将无法检测到该应用。我有兴趣听到一个允许在应用程序商店中使用的方法比这更好。

答案 4 :(得分:0)

您可以通过使用canOpenURL方法检查应用程序是否已安装,或检查后台进程并将其与您感兴趣的应用程序名称相匹配来执行此操作。

答案 5 :(得分:0)

试试这个,它甚至可以用于非越狱设备:

#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]);//will give you all **Bundle IDS** of user's all installed apps

答案 6 :(得分:0)

您可以使用运行时目标c来获取所有已安装应用的列表。它将为您提供一组LSApplicationProxy个对象。

以下是一个代码段,用于打印设备中安装的所有应用程序的名称。

Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject* workspace = [LSApplicationWorkspace_class performSelector:NSSelectorFromString(@"defaultWorkspace")];
NSMutableArray *array = [workspace performSelector:NSSelectorFromString(@"allApplications")];

NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
for (id lsApplicationProxy in array) {
    if(nil != [lsApplicationProxy performSelector:NSSelectorFromString(@"itemName")]){
        [mutableArray addObject:[lsApplicationProxy performSelector:NSSelectorFromString(@"itemName")]];
    }
}
NSLog(@"********* Applications List ************* : \n %@",mutableArray);

不要忘记包含<objc/runtime.h>