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