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_class和LSApplicationProxy的解决方案我们可以实现这个.
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);
}
}
许多人使用 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_class和LSApplicationProxy的解决方案我们可以实现这个.
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);
}
}