当前位置: 首页 > news >正文

Xcode build和version

参考
一个叫做Version,一个叫做Build,(version是版本号,build是打正式包每次Archive时的都增加的值)这两个值都可以在Xcode中选中target,点击“Summary”后看到。 Version在plist文件中的key是“CFBundleShortVersionString”,和AppStore上的版本号保持一致,Build在plist中的key是“CFBundleVersion”,代表build的版本号,该值每次build之后都应该增加1。这两个值都可以在程序中通过下面的代码获得:

[[[NSBundle mainBundle] infoDictionary] valueForKey:@"key"]

Archive后自动增长build号 除此之外,如果我们想在Archive后build号自动增长,就可以使用到Xcode的run script来实现,步骤是

选中项目的target,点击“Build Phases“
点击右下角的”Add Build Phrase“,选择”Add run script“,会产生一个新的Run Script项
拖拽新生成的Run Script项到最上面
点开该项,copy下面的shell代码进去,代码来自[这里](http://stackoverflow.com/questions/9855955/xcode-increment- build-number-only-during-archive?answertab=active#tab-top),如下图所示

if [ $CONFIGURATION == Release ]; thenecho "Bumping build number..."plist=${PROJECT_DIR}/${INFOPLIST_FILE}#increment the build number (ie 115 to 116)buildnum=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${plist}")if [[ "${buildnum}" == "" ]]; thenecho "No build number in $plist"exit 2fibuildnum=$(expr $buildnum + 1)/usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "${plist}"echo "Bumped build number to $buildnum"elseecho $CONFIGURATION " build - Not bumping build number."
fi

这段shell脚本的意思就是说,如果当前的配置是Release(Archive时该值为Release,直接在模拟器上运行是Debug),就设置build值为当前build值+1, 否则什么都不干。

这样在build的时候就会看到build号会自动加1的,想看build时输出的信息,可以通过”View -> Navigators -> Log”来查看最新的build时产生的log。

参考
一个version,一个build,都是设置版本的地方,有什么区别呢?

在ios中(Android等工程中也一样),有两种version,一种是 CFBundleVersion (“Bundle Version”),也就是我们看到的version,另一种是CFBundleShortVersionString (“Bundle version string, short”),也就是我们看到的Build。

普通情况下,我们只使用version即可,设置为"1.0", “1.1”, “2.0” , etc,但如果你要使用两个版本号时候,需要将build设置为1,2,3…等递增的整数,有什么用呢?

version我们可以通过App Store、itunes或其它软件看到,是给用户看的,而build是我们在团队开发中内部只用的,只有我们自己可以看到。比如团队打算发布1.0版本的时候,会发布很多build版本供测试或QA团队进行测试,你发布了很多build,因为一直在修改着代码,因此当你收到一条bug信息时候,你怎么知道是那个build引起的问题呢,这时候build版本号的有点就可以体现出来了

当前运行版本信息可以通过info.plist文件中的bundle version中获取:

NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];

CFShow(infoDic);      

可以自己输出看一下CFShow打印出来的时什么

下面的代码是如果你想在UI上展示给用户看的获取Version的代码,对比是否升级也是通过version对比,而不是build,也是用下面代码

NSString * appVersion = [[NSBundle mainBundle]objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];

=============================================================

version是app发布时用户看到的版本号。

build的为了方便开发者多次提交binary, 比如被苹果reject后。

例如,第一次提交version和build都是1.0.

假如审核没过,那么修改代码后新的构建的version还是1.0,build改为1.0.1就ok了。

http://www.lryc.cn/news/131625.html

相关文章:

  • 前端面试:【原型链】代码世界的家族传承
  • 2D应用开发是选择WebGL 还是选择Canvas?
  • Android Framework 常见解决方案(20)UDP广播无效问题
  • VINS-Mono中的边缘化与滑窗 (4)——VINS边缘化为何是局部变量边缘化?
  • 真·VB.NET彻底释放Interop.Excel对象
  • 记录hutool http通过代理模式proxy访问外面的链接
  • Selenium 自动化 | 案例实战篇
  • 前端技术栈es6+promise
  • windows vscode使用opencv
  • json文件读取数据报错 AttributeError: ‘str‘ object has no attribute ‘items‘
  • 1、Spring_IOC
  • Socks5、IP代理在爬虫开发与HTTP通信中的应用
  • 重新认识小米
  • react之react-redux的介绍、基本使用、获取状态、分发动作、数据流、reducer的分离与合并等
  • 滑块验证码-接口返回base64数据
  • 智能文件改名,一键与上上级目录名称同步,让文件整理更加便捷
  • RK3399平台开发系列讲解(内核调试篇)Valgrind使用案例
  • 07_缓存预热缓存雪崩缓存击穿缓存穿透
  • 常见前端基础面试题(HTML,CSS,JS)(三)
  • CSS(JavaEE初阶系列14)
  • 学习笔记230810--get请求的两种传参方式
  • 游戏找不到msvcr100.dll解决方法,常见的三种解决方法
  • 机器学习知识点总结:什么是GBDT(梯度提升树)
  • SpringBoot + Vue 微人事权限组管理模块 (十四)
  • Liunx系统编程:进程信号的概念及产生方式
  • 宝塔端口监听不到端口
  • 机器学习入门的概念
  • 插入排序优化——超越归并排序的超级算法
  • 面试之快速学习STL-容器适配器
  • 性能比较 - Spring Boot 应用程序中的线程池与虚拟线程 (Project Loom)