【问题标题】:Get list of installed apps on iPhone获取 iPhone 上已安装应用的列表
【发布时间】:2016-10-20 17:14:44
【问题描述】:

有没有办法(某些 API)获取 iPhone 设备上已安装应用程序的列表。

在搜索类似问题时,我发现了一些与url registration 相关的东西,但我认为必须有一些 API 来执行此操作,因为我不想对应用程序做任何事情,我只想要列表.

【问题讨论】:

    标签: objective-c ios ios4


    【解决方案1】:

    不,应用是沙盒化的,Apple 接受的 API 不包含任何可以让您这样做的东西。

    但是,您可以测试是否安装了某个应用:

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

    您可以从here 获取应用列表和 URL 方案。

    【讨论】:

    • +1 喜欢根据 url 注册测试应用是否会在此处的想法
    • 有一个精巧的小框架可以处理这个问题并检查当前正在运行的内容(无论它是否具有 URL 方案),称为 iHasApp。刚刚了解到:ihasapp.com
    【解决方案2】:

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

    -(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");                   
    }
    

    【讨论】:

    • 甚至不进入if条件。我这边有什么问题?
    • @sathiamoorthy : 你的设备越狱了吗?以上代码仅适用于越狱设备
    【解决方案3】:

    对于未越狱的设备,我们可以使用第三方框架,叫做“ihaspp”,它也是免费的并且被苹果接受。他们还提供了很好的文档如何集成和如何使用。可能这对你有帮助。祝你好运!!

    https://github.com/danielamitay/iHasApp

    【讨论】:

    • 谢谢你,我不再做这个了,但我一定会检查的。
    • 不客气兄弟!!肯定行得通,我已经试过了!!
    • 这不能正常工作,它没有显示我在设备上安装的所有应用程序,它使用 iTunes API,所以用户/开发者安装的应用程序没有显示在这个列表中
    • @Mr.Mehul Thakkar,我只检查了 iOS 7,我没有尝试使用 iOS 8
    【解决方案4】:

    您可以通过以下方式做到这一点:

     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);
    

    然后通过访问每个元素并对其进行拆分,您可以获得您的应用名称,甚至还有 Bundle Identifier。

    【讨论】:

      【解决方案5】:

      好吧,不确定在给出最后一个答案时这是否可用(iOS 6 之前) 这个也是时间密集型的,但很简单: 进入设置>生成>使用。至少现在使用的第一个类别是存储。

      它将显示部分应用列表。在这个部分列表的底部是一个按钮,上面写着“显示所有应用程序”。 点击它,您将不得不逐屏浏览并截取屏幕截图(快速锁定按钮和主页按钮截取屏幕截图)。 我现在正在这样做,我的 iPhone 上有数百个应用程序。所以这需要我一段时间。但至少在该过程结束时,我将拥有我所有应用程序的图像。

      【讨论】:

      • 虽然这不是真正的程序化方法 :-)
      • 这也是以前可用的,但我想以编程方式执行此操作。无论如何,感谢您花时间提供答案:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 2011-11-05
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多