버전 및 빌드 정보를 검색하기 위해 Main NSBundle에 대한 액세스 권한을 얻으려고합니다. 문제는 신속하게 시도하고 싶습니다 .Objective-C에서 Build.text = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
. 그러나 나는 신속하게 시작해야 할 곳을 모르고 새로운 구문으로 작성하려고 시도했습니다.
버전 및 빌드 정보를 검색하기 위해 Main NSBundle에 대한 액세스 권한을 얻으려고합니다. 문제는 신속하게 시도하고 싶습니다 .Objective-C에서 Build.text = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
. 그러나 나는 신속하게 시작해야 할 곳을 모르고 새로운 구문으로 작성하려고 시도했습니다.
답변:
Swift 구문에 어떤 문제가 있습니까? 이것은 작동하는 것 같습니다.
if let text = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
print(text)
}
let
있지만 그렇지 않으면 정확 해 보입니다.
let text = NSBundle.mainBundle().infoDictionary["CFBundleVersion"]! as String
Swift 3/4 버전
func version() -> String {
let dictionary = Bundle.main.infoDictionary!
let version = dictionary["CFBundleShortVersionString"] as! String
let build = dictionary["CFBundleVersion"] as! String
return "\(version) build \(build)"
}
Swift 2.x 버전
func version() -> String {
let dictionary = NSBundle.mainBundle().infoDictionary!
let version = dictionary["CFBundleShortVersionString"] as String
let build = dictionary["CFBundleVersion"] as String
return "\(version) build \(build)"
}
Xcode 6의 최종 릴리스를 위해
NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String
"?" 여기서 infoDictionary 뒤의 문자가 중요합니다.
다음은 빌드 및 버전을 얻는 간단한 방법입니다.
Swift 4.X의 경우
if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
print(version)
}
if let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
print(build)
}
Objective C의 경우
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSString * currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
문제가 있으면 알려주세요. 이것은 나를 위해 일하고 있습니다.
AppName
, AppVersion
및 BuildNumber
...에 대한 신속한 방법
if let dict = NSBundle.mainBundle().infoDictionary {
if let version = dict["CFBundleShortVersionString"] as? String,
let bundleVersion = dict["CFBundleVersion"] as? String,
let appName = dict["CFBundleName"] as? String {
return "You're using \(appName) v\(version) (Build \(bundleVersion))."
}
}
Bundle.main
infoDictionary
나를 위해 비어 있었다; 아마도 실행 파일이나 앱이 아닌 프레임 워크 내에서 수행하고 있기 때문일까요? Bundle(for: MyClass.self)
예상 값을 포함합니다.
신속하게 UIApplication의 확장으로 다음과 같이 만들 것입니다.
extension UIApplication {
func applicationVersion() -> String {
return NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
}
func applicationBuild() -> String {
return NSBundle.mainBundle().objectForInfoDictionaryKey(kCFBundleVersionKey as String) as! String
}
func versionBuild() -> String {
let version = self.applicationVersion()
let build = self.applicationBuild()
return "v\(version)(\(build))"
}
}
그런 다음 다음을 사용하여 필요한 모든 것을 얻을 수 있습니다.
let version = UIApplication.sharedApplication.applicationVersion() // 1
let build = UIApplication.sharedApplication.applicationBuild() // 80
let both = UIApplication.sharedApplication.versionBuild() // 1(80)
// 앱의 버전 번호를 반환합니다.
public static var appVersion: String? {
return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
}
// 앱의 빌드 번호 반환
public static var appBuild: String? {
return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as? String
}
스위프트 5.0
AppInfo 라는 모든 앱의 한곳에서 앱 관련 문자열 을 가져 오기 위해 Swift 5 용 래퍼를 만들었습니다 .
struct AppInfo {
var appName : String {
return readFromInfoPlist(withKey: "CFBundleName") ?? "(unknown app name)"
}
var version : String {
return readFromInfoPlist(withKey: "CFBundleShortVersionString") ?? "(unknown app version)"
}
var build : String {
return readFromInfoPlist(withKey: "CFBundleVersion") ?? "(unknown build number)"
}
var minimumOSVersion : String {
return readFromInfoPlist(withKey: "MinimumOSVersion") ?? "(unknown minimum OSVersion)"
}
var copyrightNotice : String {
return readFromInfoPlist(withKey: "NSHumanReadableCopyright") ?? "(unknown copyright notice)"
}
var bundleIdentifier : String {
return readFromInfoPlist(withKey: "CFBundleIdentifier") ?? "(unknown bundle identifier)"
}
var developer : String { return "my awesome name" }
// lets hold a reference to the Info.plist of the app as Dictionary
private let infoPlistDictionary = Bundle.main.infoDictionary
/// Retrieves and returns associated values (of Type String) from info.Plist of the app.
private func readFromInfoPlist(withKey key: String) -> String? {
return infoPlistDictionary?[key] as? String
}
}
다음과 같이 사용할 수 있습니다.
print("The apps name = \(AppInfo.appname)")
CFBundleDisplayName
[업데이트 : Xcode 6.3.1] 위의 모든 작업을 시도했지만 Xcode 6.3.1에서는 이러한 작업이 전혀 수행되지 않았지만 다음과 같은 결과가 나타납니다.
(NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String)!
또 다른 옵션은 AppDelegate에서 변수를 정의하는 것입니다.
var applicationVersion:String {
return NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
}
var applicationBuild:String {
return NSBundle.mainBundle().objectForInfoDictionaryKey(kCFBundleVersionKey as String) as! String
}
var versionBuild:String {
let version = self.applicationVersion
let build = self.applicationBuild
return "version:\(version) build:(\(build))"
}
AppDelegate에서 변수로 참조 할 수있는
스위프트 3 :
let textVersion
= Bundle.main.infoDictionary?["CFBundleVersion"] as? String