我正在尝试使用此代码:
NSString *appName = [[NSBundle bundleWithIdentifier:item] objectForInfoDictionaryKey:@"CFBundleExecutable"];
要从其Bundle Identifier获取应用程序的名称,但是对于所有非库存应用程序,此方法返回nil。我试图找到解决这个问题的方法无济于事。如何从iOS 8中的软件包ID获取应用程序的名称?
编辑:为了澄清,我想将此用于我自己以外的应用程序 - 我之前就同一主题提出了一个问题,但所有答案仅针对我的应用程序,所以我已经进一步解释了这个问题。答案 0 :(得分:2)
您无法访问其他应用的捆绑包。您只能访问应用的捆绑包。当您使用bundleWithIdentifier:
时,iOS会查找与您应用的沙箱中提供的标识符相匹配的捆绑包。在上面提到的情况下,没有可用的NSBundle
,所以它将返回nil。
bundleWithIdentifier:
返回先前创建的具有的NSBundle实例 指定的包标识符。
声明
<强>夫特强>
init?(identifier identifier: String) -> NSBundle
<强>目标C 强>
+ (NSBundle *)bundleWithIdentifier:(NSString *)identifier
<强>参数强>
identifier
现有NSBundle实例的标识符。
返回值
以前创建的具有捆绑包的NSBundle实例 标识符标识符如果请求的包不是,则返回nil 找到。
讨论
此方法通常由框架和插件用于定位 他们自己的捆绑包在运行时。这种方法可能会更多一些 比使用
bundleForClass:
尝试定位捆绑包更有效 方法。但是,如果已经加载和缓存的初始查找 具有指定标识符的bundle失败,此方法使用 尝试找到捆绑包的潜在耗时启发法。