【发布时间】:2016-10-20 17:14:44
【问题描述】:
有没有办法(某些 API)获取 iPhone 设备上已安装应用程序的列表。
在搜索类似问题时,我发现了一些与url registration 相关的东西,但我认为必须有一些 API 来执行此操作,因为我不想对应用程序做任何事情,我只想要列表.
【问题讨论】:
标签: objective-c ios ios4
有没有办法(某些 API)获取 iPhone 设备上已安装应用程序的列表。
在搜索类似问题时,我发现了一些与url registration 相关的东西,但我认为必须有一些 API 来执行此操作,因为我不想对应用程序做任何事情,我只想要列表.
【问题讨论】:
标签: objective-c ios ios4
不,应用是沙盒化的,Apple 接受的 API 不包含任何可以让您这样做的东西。
但是,您可以测试是否安装了某个应用:
[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"thisapp://foo"]
您可以从here 获取应用列表和 URL 方案。
【讨论】:
对于越狱设备,您可以使用下一个代码片段:
-(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");
}
【讨论】:
对于未越狱的设备,我们可以使用第三方框架,叫做“ihaspp”,它也是免费的并且被苹果接受。他们还提供了很好的文档如何集成和如何使用。可能这对你有帮助。祝你好运!!
【讨论】:
您可以通过以下方式做到这一点:
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。
【讨论】:
好吧,不确定在给出最后一个答案时这是否可用(iOS 6 之前) 这个也是时间密集型的,但很简单: 进入设置>生成>使用。至少现在使用的第一个类别是存储。
它将显示部分应用列表。在这个部分列表的底部是一个按钮,上面写着“显示所有应用程序”。 点击它,您将不得不逐屏浏览并截取屏幕截图(快速锁定按钮和主页按钮截取屏幕截图)。 我现在正在这样做,我的 iPhone 上有数百个应用程序。所以这需要我一段时间。但至少在该过程结束时,我将拥有我所有应用程序的图像。
【讨论】: