Azure 백엔드를 사용하는 IOS 앱이 있고 로그인 및 실행중인 앱 버전과 같은 특정 이벤트를 기록하고 싶습니다.
Swift를 사용하여 버전 및 빌드 번호를 어떻게 반환합니까?
답변
편집하다
스위프트 4.2 업데이트
let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
편집하다
새로운 버전의 Xcode에서 @azdev가 지적한 것처럼 이전 솔루션을 시도하는 데 컴파일 오류가 발생합니다.이 문제를 해결하려면!
let nsObject: AnyObject? = Bundle.main.infoDictionary!["CFBundleShortVersionString"]
편집 종료
Objective-C에서와 동일한 논리를 사용하지만 약간의 변경이 있습니다.
//First get the nsObject by defining as an optional anyObject
let nsObject: AnyObject? = NSBundle.mainBundle().infoDictionary["CFBundleShortVersionString"]
//Then just cast the object as a String, but be careful, you may want to double check for nil
let version = nsObject as! String
이것이 도움이되기를 바랍니다.
데이비드
답변
나는 이것이 이미 답변되었지만 개인적으로 이것이 조금 더 깨끗하다고 생각합니다.
스위프트 3.0 :
if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
self.labelVersion.text = version
}
스위프트 <2.3
if let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String {
self.labelVersion.text = version
}
이렇게하면 if let 버전이 조건부 처리를 처리하고 (필자의 경우 레이블 텍스트 설정) infoDictionary 또는 CFBundleShortVersionString이 nil 인 경우 선택적 언 래핑으로 인해 코드가 생략됩니다.
답변
스위프트 3.0 업데이트
NS
-prefixes 지금 스위프트 3.0에 사라와 몇 가지 특성 / 방법이 더 스위프 티 ‘로 이름이 변경되었습니다. 다음은 현재 모습입니다.
extension Bundle {
var releaseVersionNumber: String? {
return infoDictionary?["CFBundleShortVersionString"] as? String
}
var buildVersionNumber: String? {
return infoDictionary?["CFBundleVersion"] as? String
}
}
Bundle.main.releaseVersionNumber
Bundle.main.buildVersionNumber
이전 업데이트 된 답변
나는 원래의 대답 이후로 프레임 워크를 많이 사용하여 솔루션을 여러 번들 환경에서 더 간단하고 훨씬 유용한 것으로 업데이트하고 싶었습니다.
extension NSBundle { var releaseVersionNumber: String? { return self.infoDictionary?["CFBundleShortVersionString"] as? String } var buildVersionNumber: String? { return self.infoDictionary?["CFBundleVersion"] as? String } }
이제이 확장은 앱에서 기본 번들과 포함 된 다른 번들 (확장 프로그래밍을위한 공유 프레임 워크 또는 AFNetworking과 같은 세 번째 프레임 워크)을 모두 식별하는 데 유용합니다.
NSBundle.mainBundle().releaseVersionNumber NSBundle.mainBundle().buildVersionNumber // or... NSBundle(URL: someURL)?.releaseVersionNumber NSBundle(URL: someURL)?.buildVersionNumber
원래 답변
이미 게시 된 답변 중 일부를 개선하고 싶었습니다. 더 논리적 인 방식으로 처리하기 위해 도구 체인에 추가 할 수있는 클래스 확장을 작성했습니다.
extension NSBundle { class var applicationVersionNumber: String { if let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"]
같이? 문자열 {return version} return “버전 번호를 사용할 수 없음”}
class var applicationBuildNumber: String { if let build = NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String { return build } return "Build Number Not Available" } }
이제 다음을 통해 쉽게 액세스 할 수 있습니다.
let versionNumber = NSBundle.applicationVersionNumber
답변
또한 이것이 이미 답변되었지만 이전 답변을 마무리했습니다.
(*) 확장 프로그램 업데이트
extension Bundle {
var releaseVersionNumber: String? {
return infoDictionary?["CFBundleShortVersionString"] as? String
}
var buildVersionNumber: String? {
return infoDictionary?["CFBundleVersion"] as? String
}
var releaseVersionNumberPretty: String {
return "v\(releaseVersionNumber ?? "1.0.0")"
}
}
용법:
someLabel.text = Bundle.main.releaseVersionNumberPretty
@Deprecated : 이전 답변
스위프트 3.1 :
class func getVersion() -> String {
guard let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else {
return "no version info"
}
return version
}
이전 버전의 경우 :
class func getVersion() -> String {
if let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String {
return version
}
return "no version info"
}
레이블 텍스트를 설정하거나 다른 곳에서 사용하려면
self.labelVersion.text = getVersion()
답변
대한 스위프트 4.0
let version = Bundle.main.infoDictionary!["CFBundleShortVersionString"]!
let build = Bundle.main.infoDictionary!["CFBundleVersion"]!
답변
번들에 확장 프로그램을 만들었습니다
extension Bundle {
var appName: String {
return infoDictionary?["CFBundleName"] as! String
}
var bundleId: String {
return bundleIdentifier!
}
var versionNumber: String {
return infoDictionary?["CFBundleShortVersionString"] as! String
}
var buildNumber: String {
return infoDictionary?["CFBundleVersion"] as! String
}
}
그런 다음 사용하십시오
versionLabel.text = "\(Bundle.main.appName) v \(Bundle.main.versionNumber) (Build \(Bundle.main.buildNumber))"
답변
Swift 3.0 NSBundle이 작동하지 않으면 다음 코드가 완벽하게 작동합니다.
let versionNumberString =
Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString")
as! String
빌드 번호의 경우 다음과 같습니다.
let buildNumberString =
Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion")
as! String
혼란스럽게도 ‘CFBundleVersion’은 일반 -> ID의 Xcode에 입력 된 빌드 번호입니다.