如何实现这一目标?我希望得到这个名称,以便我可以在应用程序中显示它,而不必在每次更改名称时更改代码。
答案 0 :(得分:138)
试试这个
NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];
NSString *prodName = [info objectForKey:@"CFBundleDisplayName"];
答案 1 :(得分:53)
这里的答案很好。我会补充一点。
而不是使用@“CFBundleDisplayName”,它有可能在将来发生变化,最好将CFBundle.h中提供的字符串常量强制转换为:
[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
从而为您的代码提供面向未来的保障。
答案 2 :(得分:36)
根据Apple的说法,首选- objectForInfoDictionaryKey:
对象是NSBundle
首选:
使用此方法优于其他访问方法,因为它在一个键可用时返回键的本地化值。
这是斯威夫特的一个例子:
let appName = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as! String
// Or use key "CFBundleDisplayName"
Swift 3更新 - 谢谢杰夫。
let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as! String
答案 3 :(得分:13)
使用InfoPlist.strings(例如
)本地化我的应用程序名称时出现问题CFBundleDisplayName = "My Localized App Name";
如果我使用infoDictionary,我无法获取本地化的应用程序名称。
在这种情况下,我使用了localInfoDirectory,如下所示。
NSDictionary *locinfo = [bundle localizedInfoDictionary];
答案 4 :(得分:8)
您可以使用直接方式,
NSString* appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"];
答案 5 :(得分:6)
为了完整性,Swift 3.0将是;
let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String
答案 6 :(得分:2)
这是我使用Swift 3提出的最简洁的方法:
let productName = Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String
答案 7 :(得分:1)
以下是@ epatel答案的Xamarin.iOS版本:
var prodName = NSBundle.MainBundle.InfoDictionary.ObjectForKey(new NSString("CFBundleDisplayName")) as NSString;
答案 8 :(得分:0)
这只是对这个非常古老的问题的快速更新。我需要快速回答,它在swift语法中有点棘手(解包选项),所以在这里分享
let productName = NSBundle.mainBundle().infoDictionary!["CFBundleName"]!
答案 9 :(得分:0)
以下代码会更好。
NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];
self.appName = [info objectForKey:@"CFBundleExecutable"];
答案 10 :(得分:0)
INSERT INTO tableB (id, something, somethingElse)
SELECT id, 'asdasd', 'asdasdasd'
FROM TableA
let productName = Bundle.main.infoDictionary?["CFBundleName"] as? String
答案 11 :(得分:0)
一个简单的方法如下。请注意,这会返回您应用程序包的名称,您可以将其更改为与应用程序的产品名称不同。
// (Swift 5)
static let bundleName = Bundle.main.object(forInfoDictionaryKey: kCFBundleNameKey as String) as! String
如果您需要您的应用与捆绑包具有不同的名称并且可能会更改 Info.plist,您可以执行以下操作:
// (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
答案 12 :(得分:-2)
您可以从此词典“info”获取所有捆绑详细信息。打印这本词典,得到你想要的东西。
NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];