根据名称或包标识符获取iOS应用程序的路径

时间:2012-03-24 22:30:54

标签: ios objective-c jailbreak

获取iOS应用程序的路径是否比搜索/var/mobile/Applications

更简单

我知道名称和包标识符,但路径在不同的iOS设备上不一致。

这适用于越狱调整,因此我可以使用PrivateFrameworks和Apple不允许的其他代码。

3 个答案:

答案 0 :(得分:4)

如果您正在运行在Springboard中执行的代码,这应该相当简单。获取SBApplicationController的{​​{1}},然后使用sharedInstance方法(或使用您选择的任何方法)获取您正在寻找的SBApplicationapplicationWithDisplayIdentifier:类包含SBApplicationpathcontainerPath(以及其他许多内容)的属性,其中一个应该是您正在寻找的内容。我自己没试过,所以我不能保证它会工作,但是基于快速浏览一下Springboard头文件(你可以看看here,或者自己转储头文件),它应该工作。

另一方面,如果你没有从Springboard运行(即,如果你正在制作一个真正的App Store风格的应用程序),那么你可能会运气不好。您可以查看与Springboard的进程间通信,看看是否可以在那里完成某些事情,但它可能比它的价值更麻烦。

答案 1 :(得分:3)

如果在应用中运行,您可以定义:

extern NSString* SBSCopyBundlePathForDisplayIdentifier(NSString* bundleId);

并链接到SpringboardServices框架。

答案 2 :(得分:2)

或者您可以使用库AppList,然后使用它:

ALApplicationList *al = [ALApplicationList sharedApplicationList];
NSString *appPath = [al valueForKey:@"path" forDisplayIdentifier:bundleID];

在这种情况下,它正在做 Andrew R。在他的回答中提到的内容。 (我假设需要相同的要求,即必须从Springboard运行。)

更新:这似乎不再适用于iOS 11。