![Creative The name of the picture]()

Clash Royale CLAN TAG#URR8PPP
Getting an iPhone app's product name at runtime?
How can this be achieved? I would like to get the name so i can display it within an app, without having to change it in code each time i change a name, of course.
12 Answers
12
Try this
NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];
NSString *prodName = [info objectForKey:@"CFBundleDisplayName"];
CFBundleDisplayName
Good answers here. I would add one thing though.
Rather than using @"CFBundleDisplayName", which has the potential to change in future, it's best to cast the string constant supplied in CFBundle.h like so:
[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
Thus future-proofing your code.
According to Apple, using - objectForInfoDictionaryKey: directly on the NSBundle object is preferred:
- objectForInfoDictionaryKey:
NSBundle
Use of this method is preferred over other access methods because it returns the localized value of a key when one is available.
Here's an example in Swift:
let appName = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as! String
// Or use key "CFBundleDisplayName"
Update for Swift 3 - thanks Jef.
let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as! String
kCFBundleNameKey
kCFBundleNameKey as String
I had a problem when I localize my application name by using InfoPlist.strings, like
CFBundleDisplayName = "My Localized App Name";
I could not obtain localized application name if I use infoDictionary.
In that case I used localizedInfoDirectory like below.
NSDictionary *locinfo = [bundle localizedInfoDictionary];
You can use the direct approach,
NSString* appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"];
For completeness, Swift 3.0 would be;
let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String
Here's the cleanest approach I could come up with using Swift 3:
let productName = Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String
Here is the Xamarin.iOS version of @epatel's answer:
var prodName = NSBundle.MainBundle.InfoDictionary.ObjectForKey(new NSString("CFBundleDisplayName")) as NSString;
This is just a swift update for this very old question. I was in need of swift answer and it was kind of tricky(Unwrapping optionals) in swift syntax so sharing it here
let productName = NSBundle.mainBundle().infoDictionary!["CFBundleName"]!
The following code would be better.
NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];
self.appName = [info objectForKey:@"CFBundleExecutable"];
let productName = Bundle.main.infoDictionary?["CFBundleName"] as? String

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

You could have all bundle details from this dictionary "info". print this dictionary and get what you want.
NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
sweetness, thanks!
– Edward An
Aug 8 '09 at 0:20