如何实现这一点?我想获取名称,以便在应用程序中显示它,而不必每次更改名称时都在代码中进行更改。
试一试这个
NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];
NSString *prodName = [info objectForKey:@"CFBundleDisplayName"];
这里有很好的答案。我想再补充一点。
不要使用可能在未来更改的@"CFBundleDisplayName",最好像下面这样将在CFBundle.h中提供的字符串常量转换:
[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
这样可以使你的代码具有未来兼容性。
根据Apple的说法,直接在NSBundle
对象上使用-objectForInfoDictionaryKey:
方法是首选:
使用此方法比其他访问方法更可取,因为当可用时,它返回键的本地化值。
以下是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
kCFBundleNameKey
代替简单字符串: kCFBundleNameKey as String
。 - Matt Mc当我使用 InfoPlist.strings 进行应用名称本地化时,出现了问题,例如:
CFBundleDisplayName = "My Localized App Name";
如果我使用infoDictionary,我无法获取本地化的应用程序名称。
在这种情况下,我可以像下面这样使用localizedInfoDirectory。
NSDictionary *locinfo = [bundle localizedInfoDictionary];
NSString* appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"];
完整的说,Swift 3.0 就是:
let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String
这是我使用 Swift 3 所能想到的最简洁方法:
let productName = Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String
var prodName = NSBundle.MainBundle.InfoDictionary.ObjectForKey(new NSString("CFBundleDisplayName")) as NSString;
// (Swift 5)
static let bundleName = Bundle.main.object(forInfoDictionaryKey: kCFBundleNameKey as String) as! String
// (Swift 5)
// To use this, include a key and value in your app's Info.plist file:
// Key: ProductName
// Value: $(PRODUCT_NAME)
// By default PRODUCT_NAME is the same as your project build target name, $(TARGET_NAME), but this may be changed.
// If you do so, you may wish to change the CFBundleName value to $(TARGET_NAME) in the Info.plist file.
// PRODUCT_NAME is defined in the target's Build Settings in the Packaging section.
static let productName = Bundle.main.object(forInfoDictionaryKey: "ProductName") as! String
CFBundleDisplayName
没有常量 -- 使用字符串字面量是正确的方法。 - Phil Calvin