在运行时获取iPhone应用程序的产品名称?

Edw*_* An 69 iphone ios

怎么能实现这一目标?我想得到这个名字,所以我可以在一个应用程序中显示它,而不必在每次更改名称时更改代码,当然.

epa*_*tel 138

试试这个

NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];
NSString *prodName = [info objectForKey:@"CFBundleDisplayName"];
Run Code Online (Sandbox Code Playgroud)

  • CFBundleDisplayName返回Bundle显示名称.OP要求提供产品名称.为此使用CFBundleName.在大多数情况下,两者将是相同的,但如果您设置新的显示名称(对于图标下显示的不适合作为文件名的内容),可能会有所不同. (23认同)
  • Apple在[技术文章]中讨论了这个问题.(http://developer.apple.com/library/mac/#qa/qa1544/_index.html).特别值得注意的是,`CFBundleDisplayName`没有常数 - 字符串文字是正确的用法. (4认同)
  • CFBundleName对我有用 (3认同)
  • @ChrisNewman不正确:CFBundleName绝对不是产品名称(您可以通过在xcode设置中更改一个而不是另一个来检查).它们默认是相同的.(我发现这很难). (2认同)

imn*_*mnk 54

这里的答案很好.我会添加一件事.

而不是使用@"CFBundleDisplayName",它有可能在将来发生变化,最好将CFBundle.h中提供的字符串常量强制转换为:

[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
Run Code Online (Sandbox Code Playgroud)

从而使您的代码面向未来.

  • 这是一个不同的密钥,可能不是所有情况下的显示名称.令人惊讶的是,对于这种特殊情况,字符串文字是[Apple推荐](http://developer.apple.com/library/mac/#qa/qa1544/_index.html). (8认同)

gup*_*ron 39

根据Apple的说法,- objectForInfoDictionaryKey:直接在NSBundle对象上使用是首选:

使用此方法优于其他访问方法,因为它在可用时返回键的本地化值.

这是Swift中的一个例子:

let appName = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as! String
// Or use key "CFBundleDisplayName"
Run Code Online (Sandbox Code Playgroud)

Swift 3的更新 - 谢谢杰夫.

let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as! String
Run Code Online (Sandbox Code Playgroud)


tok*_*ken 13

我通过使用InfoPlist.strings本地化我的应用程序名称时出现问题

CFBundleDisplayName = "My Localized App Name";
Run Code Online (Sandbox Code Playgroud)

如果我使用infoDictionary,我无法获得本地化的应用程序名称.

在那种情况下,我使用了像下面的localizedInfoDirectory.

NSDictionary *locinfo = [bundle localizedInfoDictionary];
Run Code Online (Sandbox Code Playgroud)


kar*_*rim 8

你可以使用直接方法,

NSString* appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"];
Run Code Online (Sandbox Code Playgroud)


Pat*_*ick 6

为了完整起见,Swift 3.0将是;

let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String
Run Code Online (Sandbox Code Playgroud)