在iOS8上从我自己的Bundle ID获取应用程序的名称

时间:2015-02-15 11:28:54

标签: ios objective-c

我正在尝试使用此代码:

NSString *appName = [[NSBundle bundleWithIdentifier:item] objectForInfoDictionaryKey:@"CFBundleExecutable"];

要从其Bundle Identifier获取应用程序的名称,但是对于所有非库存应用程序,此方法返回nil。我试图找到解决这个问题的方法无济于事。如何从iOS 8中的软件包ID获取应用程序的名称?

编辑:为了澄清,我想将此用于我自己以外的应用程序 - 我之前就同一主题提出了一个问题,但所有答案仅针对我的应用程序,所以我已经进一步解释了这个问题。

1 个答案:

答案 0 :(得分:2)

您无法访问其他应用的捆绑包。您只能访问应用的捆绑包。当您使用bundleWithIdentifier:时,iOS会查找与您应用的沙箱中提供的标识符相匹配的捆绑包。在上面提到的情况下,没有可用的NSBundle,所以它将返回nil。

根据NSBundle Class Reference

  

bundleWithIdentifier:

     

返回先前创建的具有的NSBundle实例   指定的包标识符。

     

声明

     

<强>夫特

     

init?(identifier identifier: String) -> NSBundle

     

<强>目标C

     

+ (NSBundle *)bundleWithIdentifier:(NSString *)identifier

     

<强>参数

     

identifier

     

现有NSBundle实例的标识符。

     

返回值

     

以前创建的具有捆绑包的NSBundle实例   标识符标识符如果请求的包不是,则返回nil   找到。

     

讨论

     

此方法通常由框架和插件用于定位   他们自己的捆绑包在运行时。这种方法可能会更多一些   比使用bundleForClass:尝试定位捆绑包更有效   方法。但是,如果已经加载和缓存的初始查找   具有指定标识符的bundle失败,此方法使用   尝试找到捆绑包的潜在耗时启发法。