在运行时获取iPhone应用程序的产品名称?

时间:2009-08-07 21:41:35

标签: ios iphone

如何实现这一目标?我希望得到这个名称,以便我可以在应用程序中显示它,而不必在每次更改名称时更改代码。

13 个答案:

答案 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

enter image description here

let productName =  Bundle.main.infoDictionary?["CFBundleName"] as? String

enter image description here

答案 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];