Get App Name in Swift

This should work:

NSBundle.mainBundle().infoDictionary!["CFBundleName"] as! String

infoDictionary is declared as a var infoDictionary: [NSObject : AnyObject]! so you have to unwrap it, access it as a Swift dictionary (rather than use objectForKey), and, as the result is an AnyObject, cast it.

Update Swift 3 (Xcode 8 beta 2)

Always better to use constants (and optionals) where possible, too:

Bundle.main.infoDictionary?[kCFBundleNameKey as String] as? String

I believe this solution is more elegant. What's more, using object(forInfoDictionaryKey:) is encouraged by Apple:

"Use of this method is preferred over other access methods because it returns the localized value of a key when one is available."

extension Bundle {
    var displayName: String? {
        return object(forInfoDictionaryKey: "CFBundleDisplayName") as? String
    }
}

Accessing bundle display name:

if let displayName = Bundle.main.displayName {
    print(displayName)
}

Tags:

Cocoa

Swift