请参阅代码中的内部版本号或版本号

时间:2012-04-04 16:23:32

标签: objective-c version

在Xcode中手动设置构建版本和版本号很容易,我学习了如何在构建时使用宏来增加它们。但是我如何在代码中引用它们的值?

7 个答案:

答案 0 :(得分:92)

NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0
NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42 

答案 1 :(得分:76)

当然,你可以向你的主要包索取info目录,其中包括你的info.plist的所有键和值,包括版本号:

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

答案 2 :(得分:13)

@robo 我确实关注了如何自动增加内部版本号(不是版本号,但这非常相似),但现在我找不到了。我会试着解释一下我做了什么。我希望很明显可以遵循。

在Xcode 4中,查看Navigator窗格,它是Xcode屏幕左侧的窗格。它顶部有7个图标。选择最左侧的图标(看起来像文件夹)以获取Project Navigator窗格。

现在单击该窗格中的第一个项目,即项目本身。这会在中心打开一个大窗口,左侧有一个窄柱。

窄栏有两个部分:“PROJECT”和“TARGETS”。在“目标”部分中单击您的项目名称。现在,中心窗格顶部有5个选项卡:“摘要”,“信息”,“构建设置”,“构建阶段”和“构建规则”。

单击“构建阶段”选项卡。如果您的配置与我的配置相同,您现在将在主窗口中看到4个部分:“目标依赖关系”,“复制包资源”,“编译源”和“链接...”。单击“添加构建阶段”(位于右下角)并选择“添加运行脚本”。第5部分现在出现在中心窗格中,标题为“运行脚本”。拖动“运行脚本”部分,使其成为顶部的第2部分,就在“目标依赖性”下方。

现在单击Run Script部分的显示三角形。这会打开一个窗口,您可以在其中放置脚本。将以下脚本复制并粘贴到该窗口中。

#!/bin/bash    
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
bN=$((0x$bN)) 
bN=$(($bN + 1)) 
bN=$(printf "%X" $bN)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE"

确保“未安装时仅运行脚本”未检查。

就是这样!现在,每次构建项目时,构建编号都会自动递增。

此脚本假定您在info.plist文件中有一个普通的十六进制内部版本号,并以十六进制的形式递增。如果缺少构建号,我不确定它会怎么做。但是输入起始值很容易 - 只需转到上面使用的同一中心窗格中的“摘要”选项卡,然后在“构建”框中输入“1”(或任何你喜欢的值)(但不是格式化)字符串如1.0)。


我认为我首先提供的十六进制脚本无法提交到App Store。这是使用十进制算术的相同脚本。

#!/bin/bash    
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") 
((bN += 1))
bN=$(printf "%d" $bN)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE"

答案 3 :(得分:12)

NSBundle *bundle = [NSBundle mainBundle];   
NSString *appVersion = [bundle objectForInfoDictionaryKey:(NSString *)@"CFBundleShortVersionString"];
NSString *appBuildNumber = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];

答案 4 :(得分:4)

您可以使用此段代码获取info.plist值(将CFBundleShortVersionString替换为您想要的info.plist键。Recommended Info.plist Keys

[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]

答案 5 :(得分:4)

由于这些值存储在您应用的Info.plist中,您可以通过NSBundle上提供的方法阅读:

NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: CFBundleShortVersionString];

请参阅Accessing bundles contents作为从Info.plist文件获取数据的权威参考,并Core Foundation keys获取可用的Info.plist密钥。

答案 6 :(得分:0)

在斯威夫特:

let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String