【问题标题】:Get path to iOS application based on name or bundle identifier根据名称或包标识符获取 iOS 应用程序的路径
【发布时间】:2012-03-24 22:30:54
【问题描述】:

有没有比搜索 /var/mobile/Applications 更简单的方法来获取 iOS 应用程序的路径?

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

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

【问题讨论】:

    标签: ios objective-c jailbreak


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      extern NSString* SBSCopyBundlePathForDisplayIdentifier(NSString* bundleId);
      

      并链接到SpringboardServices 框架。

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-12-18
          • 1970-01-01
          • 2014-01-19
          • 1970-01-01
          • 2020-01-10
          • 2023-04-08
          • 1970-01-01
          相关资源
          最近更新 更多