获取iPhone上已安装应用程序的列表

12

有没有一种方法(某些API)可以获取iPhone设备上安装的应用程序列表。

在寻找类似问题时,我发现了与URL注册相关的内容,但我认为必须有某些API来处理此事,因为我不想对应用程序做任何操作,我只需要这个列表。

5个回答

17

不,应用程序是沙箱化的,并且苹果认可的API中没有任何可以让您这样做的内容。

但是,您可以测试特定应用程序是否已安装:

  • 如果已知该应用程序处理某种类型的URL
  • 使用 [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"thisapp://foo"]

您可以从此处获取应用程序和URL方案列表。


1
有一个非常棒的框架可以处理这个问题,并检查当前正在运行的应用程序(无论它是否具有URL方案),它叫做iHasApp。我刚刚了解到它:http://www.ihasapp.com/ - Matthew Frederick

4

对于越狱设备,您可以使用下面的代码片段:

-(void)appInstalledList
{
 static NSString* const path = @"/private/var/mobile/Library/Caches/com.apple.mobile.installation.plist";

NSDictionary *cacheDict = nil;
BOOL isDir = NO;
if ([[NSFileManager defaultManager] fileExistsAtPath: path isDirectory: &isDir] && !isDir) 
{
    cacheDict = [NSDictionary dictionaryWithContentsOfFile: path];

    NSDictionary *system = [cacheDict objectForKey: @"System"]; // First check all system (jailbroken) apps
    for (NSString *key in system)
    {
        NSLog(@"%@",key);
    }
    NSDictionary *user = [cacheDict objectForKey: @"User"]; // Then all the user (App Store /var/mobile/Applications) apps

    for (NSString *key in user)
    {
        NSLog(@"%@",key);
    }
    return;
}
NSLog(@"can not find installed app plist");                   
}

2
我没有进入if条件。问题出在我这边吗? - sathiamoorthy
@sathiamoorthy:你的设备越狱了吗?上面的代码只适用于越狱设备。 - Mehul Thakkar

3
您可以通过使用以下内容来实现:

 Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
 SEL selector = NSSelectorFromString(@"defaultWorkspace");

 NSObject* workspace = [LSApplicationWorkspace_class performSelector:selector];

 SEL selectorALL = NSSelectorFromString(@"allApplications");

 NSMutableArray *Allapps = [workspace performSelector:selectorALL];

 NSLog(@"apps: %@", Allapps);

然后通过访问每个元素并对其进行拆分,您可以获取应用程序名称,甚至是包标识符。


3

对于未越狱的设备,我们可以使用第三方框架"ihaspp",该框架免费且通过了苹果的认证。此外,他们提供了良好的文档说明如何集成和使用。希望这对你有所帮助。祝好运!

https://github.com/danielamitay/iHasApp


谢谢,我已经不再继续开发它了,但是我肯定会去看一下的。 - Vikram.exe
不客气兄弟!!肯定有效,我已经试过了!! - Anilkumar iOS - ReactNative
这个程序有问题,它不能正确地显示我设备上安装的所有应用程序,它使用iTunes API,因此用户/开发者安装的应用程序不会显示在列表中。 - Mehul Thakkar
@Mr.Mehul Thakkar,我只检查了iOS 7,没有尝试过iOS 8。 - Anilkumar iOS - ReactNative

2

不确定在上一次回答之前是否有这个功能(iOS 6之前) 此外,这很耗时间,但很简单: 进入“设置”>“通用”>“存储空间”。目前至少在使用下的第一个类别是存储。

它将显示部分应用列表。在这个部分应用列表底部有一个按钮,上面写着“显示所有应用程序”。 点击那个按钮,你需要逐屏浏览,并拍屏幕截图(快速锁定按钮和主页按钮可以拍屏幕截图)。 我正在进行这个过程,我的iPhone上有数百个应用程序。所以这需要花费一些时间。但至少在整个过程结束时我会有所有应用程序的图像。


1
这并不是一个真正的编程方法 :-) - Anders R. Bystrup
这之前也是可以做到的,但我想以编程的方式实现。无论如何,感谢您抽出时间提供答案 :) - Vikram.exe

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