如何以代码形式获取iOS项目的当前版本?

11dmarpk  于 2023-02-01  发布在  iOS
关注(0)|答案(8)|浏览(145)

我希望能够以NSString对象的形式获取iOS项目/应用的当前版本,而无需在文件中定义常量。我不想在两个地方更改版本值。
在Project目标摘要中提升版本时,需要更新该值。

wvyml7n5

wvyml7n51#

您可以按如下方式获取版本号和内部版本号:

let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String

或者在Objective-C中

NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];
NSString * build = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];

我在UIApplication上的一个类别中有以下方法:

extension UIApplication {

    static var appVersion: String {
        return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
    }

    static var appBuild: String {
        return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String
    }

    static var versionBuild: String {
        let version = appVersion, build = appBuild            
        return version == build ? "v\(version)" : "v\(version)(\(build))"
    }
}

要点:

下面是Objective-C中的等价物:

+ (NSString *) appVersion
{
    return [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];    
}

+ (NSString *) build
{
    return [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];
}

+ (NSString *) versionBuild
{
    NSString * version = [self appVersion];
    NSString * build = [self build];

    NSString * versionBuild = [NSString stringWithFormat: @"v%@", version];

    if (![version isEqualToString: build]) {
        versionBuild = [NSString stringWithFormat: @"%@(%@)", versionBuild, build];
    }

    return versionBuild;
}

要点:

ecr0jaav

ecr0jaav2#

以下是Xcode 8和Swift 3的工作原理:

let gAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
let gAppBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"

print("Version: \(gAppVersion)")
print("Build: \(gAppBuild)")
628mspwn

628mspwn3#

目标C:
1)要获取应用程序版本,您必须使用:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

2)要获取构建版本,您必须使用:

NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
aurhwmvo

aurhwmvo4#

  • [快速版本:第5.2条]*

所有iOS应用程序都必须在其Info.plist文件中存储应用程序版本号,但没有内置的方法将其作为可在代码中使用的字符串。
我创建了一个UIApplication的小扩展,它读取Info.plist文件并自动返回版本号。
下面是代码:

extension UIApplication {
    static var appVersion: String? {
        return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
    }
}

控制器内部

@IBOutlet weak var tv_version: UILabel!
override func viewDidLoad() {
    super.viewDidLoad()
   
    //Display Version
    setUpCurrentVersion()
}

func setUpCurrentVersion(){
    tv_version.text = "v" + UIApplication.appVersion!
}
50few1ms

50few1ms5#

在Swift中,您可以通过以下方式获取捆绑包版本:

let info:NSDictionary = NSBundle.mainBundle().infoDictionary!

let version:String = info.objectForKey("CFBundleShortVersionString") as! String

versionLabel.text = "Version:" + version
ddarikpa

ddarikpa6#

我的一个开源项目App Update Tracker以类方法的形式提供了此功能(以及更多功能):

  • + (NSString *)getShortVersionString
  • + (NSString *)getLongVersionString

您可以这样使用它:

#import "AppUpdateTracker.h"

NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]);
NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);
um6iljoc

um6iljoc7#

下面是分别针对这两种情况的Swift版本:

let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

它包括在这个回购,看看它:
https://github.com/goktugyil/EZSwiftExtensions

yhxst69z

yhxst69z8#

只是提醒

要获取任何键的本地化值,应使用CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)

相关问题