1. 背景
在iOS项目打包时,有两个版本号,一个是Version,即显示在AppStore中的版本号,其key为CFBundleShortVersionString
,另一个是Build,即编译版本号,其key为CFBundleVersion
。
2. 问题发现
当App准备上架时,需要打包提交至AppStore审核,在这个过程中我们可能会多次上传ipa包。在Version相同的情况下,若Build还相同,则上传到App Store Connect时会提示已有该版本,不能再次上传。
3. 问题解决
为了避免这种情况,我们可以在每次打包前去手动修改Build,以保证不会重复。或者我们可以通过脚本让Build在每次打包时自动加一,省去每次手动修改的麻烦。
添加脚本的流程:
- Xcode切换到 Build Phases 选项卡;
- 点击左上角"+"号来增加一项"New Run Script Phase";
- 添加如下脚本代码:
#!/bin/sh
# ******************************************************
#
# Copyright 2015-2020 BTStudio. All rights reserved.
#
# Author : Wangzhi
# Last modified : 2020-08-12 14:30
# Email : wzqsyk@126.com
# Description : 每次编译或打包后Build自动加1
# 注意: Build设置为整数时,该脚本才能
# 实现其功能,即Build自动加1
# ******************************************************
#
# 每次编译后是否Build自动加1,
# 可以修改该常量的值,以决定编译后还是打包后Build自动加1
# # 0: 每次打包后Build自动加1
# # 1: 每次编译后Build自动加1
DEBUG_ENVIRONMENT_SYMBOL=0
#
#
# 编译或打包环境的标志,默认为编译环境
configuration_flag="Debug"
if [ $DEBUG_ENVIRONMENT_SYMBOL -eq 0 ]; then
configuration_flag="Release"
fi
# 打印当前Xcode的环境配置
echo "The current environment configuration for Xcode is: $CONFIGURATION"
if [ $configuration_flag == "${CONFIGURATION}" ]; then
echo "The build version number needs to be increased."
build_version=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${INFOPLIST_FILE}")
# 判断读取出来的build_version变量是否为 $(CURRENT_PROJECT_VERSION) :
# 若是,则从 CURRENT_PROJECT_VERSION 读取Build版本号,然后+1;
# 若不是,则读取出来的build_version变量即为Build版本号,直接+1;
if [ $build_version == '$(CURRENT_PROJECT_VERSION)' ]; then
build_version=${CURRENT_PROJECT_VERSION}
fi
build_version=$(($build_version + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build_version" "${INFOPLIST_FILE}"
else
echo "The build version number does not need to be increased."
fi
-
效果如下:
添加Build自动+1的脚本代码
-
之后每次进行打包时,Build会自动+1,避免了Build重复的问题。
提示:
- 可以双击 Build Auto Increase 进行名称的修改,增加一项 New Run Script Phase 后,Xcode默认名称为:Run Script ;
每次编译或打包后,可以查看脚本的执行结果,如下图所示:
脚本的执行结果
网友评论