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

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

当然,你可以问你的主要包的信息目录,其中包括您的info.plist的所有键和值,包括版本号:

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

@robo我做了如何自动增加内部编号(不是版本号,但是非常相似),但现在我找不到它了。 我会尽力解释我做了什么。 我希望已经足够清楚了。

在Xcode 4中,在导航器窗格中查看,该窗格是Xcode屏幕左侧的窗格。 它在顶部有7个图标。 select最左边的图标(看起来像一个文件夹)来获得Project Navigator窗格。

现在点击该窗格中的第一个项目,即项目本身。 这在中间开了一个大窗户,左边有一个窄小的柱子。

狭窄的专栏有两个部分:“项目”和“目标”。 在“TARGETS”部分点击您的项目名称。 现在,中间窗格顶部有5个选项卡:“摘要”,“信息”,“生成设置”,“生成阶段”和“生成规则”。

点击“Build Phases”标签。 如果您的configuration与我的configuration相同,您现在将在主窗口中看到4个部分:“目标相关性”,“复制束资源”,“编译源”和“链接…”。 点击“添加生成阶段”(在右下angular)并select“添加运行脚本”。 第五部分现在出现在中心窗格中,标题为“运行脚本”。 拖动“运行脚本”部分,使其位于“目标相关性”下面的第二部分。

现在点击运行脚本部分的显示三angular形。 这将打开一个窗口,您可以放置​​一个脚本。 将以下脚本复制并粘贴到该窗口中。

 #!/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" 

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

而已! 现在,每次构build项目时,内部版本号都会自动递增。

此脚本假定您的info.plist文件中有一个纯正的hex内部版本号,并将其作为hex进行递增。 我不知道如果内部版本号丢失,它会发生什么。 但是input起始值很简单 – 只需在上面使用的同一中心窗格中的“摘要”选项卡上,然后在“生成”框中input“1”(或任何您喜欢的值)(但不是格式化的string像1.0)。


我认为我先给的hex脚本无效提交给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" 
 NSBundle *bundle = [NSBundle mainBundle]; NSString *appVersion = [bundle objectForInfoDictionaryKey:(NSString *)@"CFBundleShortVersionString"]; NSString *appBuildNumber = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; 

你可以用这段代码得到info.plist值(用你想要的info.plist的密钥replaceCFBundleShortVersionString cf. Recommended Info.plist Keys )

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

由于这些值存储在您应用程序的Info.plist ,因此可以通过NSBundle提供的方法进行阅读:

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

请参阅访问捆绑软件内容作为从Info.plist文件获取数据的权威参考,以及获取可用Info.plist密钥的Core Foundation密钥。

在Swift中:

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