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

这怎么能实现? 我想获得这个名字,所以我可以在应用程序中显示它,当然,每当我更改一个名称时,无需在代码中更改它。

尝试这个

NSBundle *bundle = [NSBundle mainBundle]; NSDictionary *info = [bundle infoDictionary]; NSString *prodName = [info objectForKey:@"CFBundleDisplayName"]; 

这里的答案很好。
我会添加一件事。
而不是使用@“CFBundleDisplayName”,它有可能在未来发生变化,最好是像下面这样强制转换CFBundle.h提供的string常量:

 [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]; 

这样可以防止您的代码受到威胁。

根据苹果,使用- objectForInfoDictionaryKey:直接在NSBundle对象是首选:

使用此方法优于其他访问方法,因为当返回一个可用的密钥的本地化值时。

这是Swift中的一个例子:

 let appName = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as! String // Or use key "CFBundleDisplayName" 

Swift 3的更新 – 感谢Jef。

 let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as! String 

当我通过使用InfoPlist.strings本地化我的应用程序名称时遇到问题,例如

 CFBundleDisplayName = "My Localized App Name"; 

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

在这种情况下,我使用像下面这样的localizedInfoDirectory。

 NSDictionary *locinfo = [bundle localizedInfoDictionary]; 

为了完整性,Swift 3.0会是;

 let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String 

你可以使用直接的方法,

 NSString* appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]; 

下面是我可以使用Swift 3最简洁的方法:

 let productName = Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String 

这里是@ epatel的答案Xamarin.iOS版本:

 var prodName = NSBundle.MainBundle.InfoDictionary.ObjectForKey(new NSString("CFBundleDisplayName")) as NSString; 

对于这个非常古老的问题,这只是一个迅速的更新。 我需要迅速的答案,这是一种棘手(解包optionals)在迅速的语法,所以在这里分享

 let productName = NSBundle.mainBundle().infoDictionary!["CFBundleName"]! 

下面的代码会更好。

 NSBundle *bundle = [NSBundle mainBundle]; NSDictionary *info = [bundle infoDictionary]; self.appName = [info objectForKey:@"CFBundleExecutable"]; 

你可以从这个词典的“信息”中获得所有的捆绑信息。 打印这本字典,并得到你想要的。

 NSBundle *bundle = [NSBundle mainBundle]; NSDictionary *info = [bundle infoDictionary];