在运行时获取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];