Swift를 사용하여 버전 및 빌드 정보 가져오기
메인에 접근하려고 합니다NSBundle
버전 및 빌드 정보를 검색합니다.중요한 것은 Swift에서 사용해보고 싶고, Objective-C에서 다음을 사용하여 검색하는 방법을 알고 있다는 것입니다.
text = [NSBundle.mainBundle.infoDictionary objectForKey:@"CFBundleVersion"];
하지만 Swift를 어디서부터 시작해야 할지 모르겠어요. 새로운 구문으로 쓰려고 했지만 소용이 없었어요.
Swift 구문에 무엇이 잘못되었습니까?이것은 효과가 있는 것 같습니다.
if let text = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
print(text)
}
스위프트 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)"
}
여기서 보는 바와 같이
스위프트 5.0
저는 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)")
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)
}
목표 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))."
}
}
신속하게 다음과 같이 UIA 애플리케이션의 확장으로 만들겠습니다.
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
}
다른 옵션은 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에서 변수로 참조할 수 있습니다.
이 코드는 Swift 3, Xcode 8에서 작동합니다.
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
let build = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"
Swift 3의 경우 NSBundle을 번들 및 mainBundle로 바꾸기는 main으로 간단히 대체됩니다.
let AppVersion = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
[업데이트: Xcode 6.3.1] 위의 모든 것을 시도해 보았지만 Xcode 6.3.1에서는 이러한 작업이 수행되지 않았습니다.
(NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String)!
스위프트 3:
let textVersion
= Bundle.main.infoDictionary?["CFBundleVersion"] as? String
SWIFT 3 버전
if let infoPath = Bundle.main.path(forResource: "Info.plist", ofType: nil),
let infoAttr = try? FileManager.default.attributesOfItem(atPath: infoPath),
let infoDate = infoAttr[.creationDate] as? Date
{
return infoDate
}
return Date()
Framework 번들에서 버전 가져오기
사용할 수 있는 프레임워크에 대한 결과를 얻으려면
//inside framework
let version = bundle.infoDictionary?["CFBundleShortVersionString"] as? String
신속한 100% 작동 테스트
단일 변수를 사용하여 쉽게 얻을 수 있고 공개할 수 있습니다.당신은 그것을 당신이 원하는 모든 곳에서 사용할 수 있습니다.
(API용 User Agent 헤더를 가져옵니다.)
public let userAgent: String = {
if let info = Bundle.main.infoDictionary {
let executable = info[kCFBundleExecutableKey as String] as? String ?? "Unknown"
let bundle = info[kCFBundleIdentifierKey as String] as? String ?? "Unknown"
let appVersion = info["CFBundleShortVersionString"] as? String ?? "Unknown"
let appBuild = info[kCFBundleVersionKey as String] as? String ?? "Unknown"
let osNameVersion: String = {
let version = ProcessInfo.processInfo.operatingSystemVersion
let versionString = "\(version.majorVersion).\(version.minorVersion).\(version.patchVersion)"
let osName: String = {
#if os(iOS)
return "iOS"
#elseif os(watchOS)
return "watchOS"
#elseif os(tvOS)
return "tvOS"
#elseif os(macOS)
return "OS X"
#elseif os(Linux)
return "Linux"
#else
return "Unknown"
#endif
}()
return "\(osName) \(versionString)"
}()
return "\(executable)/\(appVersion) (\(bundle); build:\(appBuild); \(osNameVersion)) "
}
return "MyApp"
}()
출력:
"User-Agent": "MyApp/4.6.0 (com.app.myapp; build:4.6.0.0; iOS 15.2.0) "
언급URL : https://stackoverflow.com/questions/24501288/getting-version-and-build-information-with-swift
'programing' 카테고리의 다른 글
상위 컨테이너로 SVG 스케일을 만들려면 어떻게 해야 합니까? (0) | 2023.07.31 |
---|---|
도커 볼륨을 사용하는 컨테이너를 확인하는 방법은 무엇입니까? (0) | 2023.07.31 |
python: 유효한 UUID를 문자열에서 UUID로 변환하는 방법은 무엇입니까? (0) | 2023.07.31 |
쿼리 중 MySQL 서버에 대한 연결 끊김 (0) | 2023.07.26 |
파이썬 및 MySQL (0) | 2023.07.26 |