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

6
有没有更简单的方法获取iOS应用程序的路径,而不是搜索`/var/mobile/Applications`?
我知道应用程序的名称和包标识符,但是在不同的iOS设备上,路径是不一致的。
这是为了在越狱调整中使用,因此我可以使用PrivateFrameworks和其他苹果不允许的代码。
3个回答

5
如果您正在运行在Springboard中的代码,这应该很简单。获取SBApplicationControllersharedInstance,然后使用applicationWithDisplayIdentifier:方法(或使用您选择的任何方法)获取您要查找的SBApplicationSBApplication类包含pathcontainerPathbundle等属性(以及许多其他属性),其中一个属性应该是您要查找的内容。我自己没有尝试过,所以不能保证它会起作用,但根据对Springboard头文件的快速浏览(您可以在此处查看,或自己转储头文件),它应该可以工作。
另一方面,如果您不是从Springboard运行(即如果您正在制作真正的App Store-style应用程序),那么您可能没有什么好运。您可以研究与Springboard的进程间通信,看看是否可以在那里做些什么,但这可能会带来更多的麻烦。

3
如果在应用程序中运行,您可以定义:
extern NSString* SBSCopyBundlePathForDisplayIdentifier(NSString* bundleId);

并链接到SpringboardServices框架。


3

或者你可以使用库AppList,然后就是:

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

在这种情况下,它正在执行安德鲁R.在他的回答中提到的操作。 (我假设相同的要求是必要的,即必须从Springboard运行。)
更新:在iOS 11上似乎不再起作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接