Launcher 如何获取我的 iPhone 的已安装应用程序列表?

How could Launcher get the list of installed apps of my iPhone?

许多人使用 Launcher 应用程序。

我很好奇 Laucher 是如何获得我 iPhone 的已安装应用程序列表的?


我找到了一些方法来做类似的事情,但都不是完美的。

1.use canOpenUrl:, 这个api 需要很多url-schemes of apps.

2.search plist文件/private/var/mobile/Library/Caches/com.apple.mobile.installation.plist,非越狱不可用iPhone。此外,此 plist 文件在 ios9.

中不再存在

3.search/Applications,非越狱不可用iPhone.


问题是,Launcher 如何能够搜索我的 iPhone 并获取已安装应用程序的列表?

所以我将 Launcher 下载到 iTunes 中并查看了它的 info.plist。 事实证明它按照您最初的建议执行,查询 canOpenURL: 很多次以计算出您安装的内容。

以下是 1.3.6 版本 LSApplicationQuerySchemes 的内容:

https://gist.github.com/liamnichols/53069b01da032498bd04

全部4561人

最近我找到了使用预定义的Apple 类 LSApplicationWorkspace_classLSApplicationProxy的解决方案我们可以实现这个.

Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");

NSObject* workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];

for (LSApplicationProxy *apps in [workspace performSelector:@selector(allApplications)])
{ 
    NSString *localizedName = apps.localizedName;

    if([apps.applicationType isEqualToString:@"User"])
    {
        NSLog(@"\nlocalizedName: %@",localizedName);
        NSLog(@"minimumSystemVersion: %@",apps.minimumSystemVersion);
        NSLog(@"fileSharingEnabled: %d",apps.fileSharingEnabled);
        NSLog(@"sdkVersion: %@",apps.sdkVersion);
    }
}