【发布时间】:2012-03-24 22:30:54
【问题描述】:
有没有比搜索 /var/mobile/Applications 更简单的方法来获取 iOS 应用程序的路径?
我知道名称和包标识符,但是路径在不同的 iOS 设备上不一致。
这是用于越狱调整,所以我可以使用 PrivateFrameworks 和其他 Apple 不允许的代码。
【问题讨论】:
标签: ios objective-c jailbreak
有没有比搜索 /var/mobile/Applications 更简单的方法来获取 iOS 应用程序的路径?
我知道名称和包标识符,但是路径在不同的 iOS 设备上不一致。
这是用于越狱调整,所以我可以使用 PrivateFrameworks 和其他 Apple 不允许的代码。
【问题讨论】:
标签: ios objective-c jailbreak
如果您正在运行在 Springboard 中执行的代码,这应该相当简单。获取SBApplicationController 的sharedInstance,然后使用applicationWithDisplayIdentifier: 方法(或使用您选择的任何方法)获取您正在寻找的SBApplication。 SBApplication 类包含 path、containerPath 和 bundle(以及许多其他)的属性,其中之一应该是您正在寻找的。我自己没有尝试过,所以我不能保证它会起作用,但是基于对 Springboard 头文件的快速浏览(你可以看一下here,或者自己转储头文件),它应该工作。
另一方面,如果您不是从 Springboard 运行(即,如果您正在制作一个实际的 App Store 风格的应用程序),那么您可能会不走运。您可以查看 Springboard 的进程间通信,看看是否可以在那里完成某些事情,但这可能比它的价值更麻烦。
【讨论】:
如果在应用程序中运行,您可以定义:
extern NSString* SBSCopyBundlePathForDisplayIdentifier(NSString* bundleId);
并链接到SpringboardServices 框架。
【讨论】:
或者你可以使用库AppList 然后是:
ALApplicationList *al = [ALApplicationList sharedApplicationList];
NSString *appPath = [al valueForKey:@"path" forDisplayIdentifier:bundleID];
在这种情况下,它正在做 Andrew R. 在他的回答中提到的内容。 (我假设相同的要求是必要的,即必须从 Springboard 运行。)
更新:这似乎不再适用于 iOS 11。
【讨论】: