Получение информации о версии и сборке с помощью Swift
Я пытаюсь получить доступ к основному NSBundle для получения версии и сборки информации. Дело в том, что я хочу попробовать его в swift, я знаю, как получить его в Objective-C с Build.text = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];. Но я не знаю, с чего начать с swift, я попытался написать его в новом синтаксисе безрезультатно. Спасибо за любую помощь!
13 ответов:
что было не так с синтаксисом Swift? Это, кажется, работает:
if let text = Bundle.main.infoDictionary?["CFBundleVersion"] as? String { print(text) }
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? StringThe"?"характер после infoDictionary важен здесь
как ножом по
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))." } }
в swift я бы сделал это как расширение для 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 }
этот код работает для Swift 3, в Xcode 8:
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0" let build = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"
вот простой способ получить сборку и версию.
Для 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"];Дайте мне знать, если любой вопрос. Это работает на меня.
другой вариант-определить в 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,заменить NSBundle mainBundle с пакета и заменен просто на главной.
let AppVersion = Bundle.main.infoDictionary!["CFBundleVersion"] as! String
[обновлений: в Xcode 6.3.1] я попробовал все вышеперечисленное и ни один из них не работает в Xcode 6.3.1, но я нашел, что это:
(NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String)!
SWIFT 3 Version
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()
Comments