在Xcode中手动设置版本号和版本号很容易,并且我学会了如何在构建时使用宏来增加它们。但是,我如何在代码中引用它们的值?参考代码中的内部版本号或版本号
回答
当然,你可以问你的主束的信息目录,其中包括您的info.plist的所有键和值,包括版本号:
NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
NSString *version = [info objectForKey:@"CFBundleShortVersionString"];
你可以得到的info.plist值这片代码(与要比照Recommended Info.plist Keys Info.plist中的主要替代CFBundleShortVersionString
)
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0
NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42
这是否记录在Apple文档的任何位置?谢谢! – snowbound 2014-10-02 03:10:34
https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html记录了可以在应用程序(实际上是任何包)中Info.plist的密钥,包括这些二。 – 2014-10-02 03:31:19
NSBundle *bundle = [NSBundle mainBundle];
NSString *appVersion = [bundle objectForInfoDictionaryKey:(NSString *)@"CFBundleShortVersionString"];
NSString *appBuildNumber = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
由于这些值存储在应用程序的Info.plist
你可以通过设置在NSBundle
方法读取,然后:
NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: CFBundleShortVersionString];
见Accessing bundles contents作为权威参照从你的Info.plist文件和Core Foundation keys可用的Info.plist获取数据键。
@robo 我确实按照如何自动增加内部版本号(不是版本号,但是非常相似)写了一篇文章,但现在我找不到它了。我会尽力解释我做了什么。我希望已经足够清楚了。
在Xcode 4中,查看Navigator窗格,它是Xcode屏幕左侧的窗格。它在顶部有7个图标。选择最左边的图标(看起来像一个文件夹)以获得Project Navigator窗格。
现在单击该窗格中的第一项,即项目本身。这在中间打开一个大窗口,左边有一个窄栏。
窄栏包含2个部分:“PROJECT”和“TARGETS”。在“TARGETS”部分点击您的项目名称。现在中间窗格顶部有5个选项卡:“摘要”,“信息”,“生成设置”,“生成阶段”和“生成规则”。
点击“Build Phases”标签。如果您的配置与我的配置相同,您现在将在主窗口中看到4个部分:“目标相关性”,“复制束资源”,“编译源”和“链接...”。点击“添加生成阶段”(在右下角)并选择“添加运行脚本”。第5部分现在出现在中心窗格中,标题为“运行脚本”。将“运行脚本”部分向上拖动,使其位于“目标相关性”下方的第二部分。
现在单击运行脚本部分的显示三角形。这将打开一个窗口,您可以在其中放置脚本。将以下脚本复制并粘贴到该窗口中。
#!/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"
非常感谢。 (10char) – phlebotinum 2012-04-09 11:02:25
令我惊讶的是,我已经了解到,十六进制版本号未通过App Store的验证。我在下面发布了一个回复,其中包含一个修改后的十进制算术脚本。见下文。 – RobertL 2013-01-26 17:41:34
我继续前进,并在您的小数点脚本中对此答案的底部进行了编辑。这样,其他答案可以删除,减少一些杂乱无章。 – thegrinner 2013-06-28 18:33:07
在斯威夫特:
let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String
- 1. ASP.Net版本号/内部版本号
- 2. 新版本的Xcode内部版本号
- 3. 内部版本VS版本号
- 4. 版本内部版本号与TortoiseSNV
- 5. Xcode版本和内部版本号
- 6. Xcode的内部版本号
- 7. 显示Silverlight应用程序的内部版本号或版本?
- 8. 将Octopack nuget版本号更改为teamcity的内部版本号
- 9. MonoTouch的自动增量内部版本号版本号为
- 10. 内部版本号/指纹
- 11. TFS 2015内部版本号
- 12. TeamCity内部版本号与Ant版本号任务
- 13. BIOS内部版本号和标识号?
- 14. 需要跨几个文件设置版本号或内部版本号
- 15. SQL Azure中的内部版本号
- 16. 保存代码 - R中的版本号
- 17. 以前版本号的版本号
- 18. App store的版本号和版本号
- 19. Maven,删除部分版本并替换内部版本号
- 20. 如何在NPM版本中表示内部版本号?
- 21. 在C#代码中增加版本号
- 22. 当项目内部版本号为x.x. *或x.x.x. *时,Visual Studio生成内部版本号的规则是什么?
- 23. 版本号不使用SVN版本号
- 24. “没有版本符号的符号版本部分”
- 25. 哈德森不增加失败版本的内部版本号
- 26. 了解内部版本号在Android的
- 27. iTunes Connect的内部版本号重置
- 28. Inno setup的每页内部版本号
- 29. maven版本插件没有获取内部版本号
- 30. Xcode版本和内部版本号并提交给iTunes Connect
你有关于如何AUTOCREATE版本#分别引用/链接? – phlebotinum 2012-04-04 16:27:44
@robo在下面看到我的“回复”。 – RobertL 2012-04-08 17:22:10