iOS开发之Build版本号自增

2020-08-12  本文已影响0人  BrianWang

1. 背景

在iOS项目打包时,有两个版本号,一个是Version,即显示在AppStore中的版本号,其key为CFBundleShortVersionString,另一个是Build,即编译版本号,其key为CFBundleVersion

2. 问题发现

当App准备上架时,需要打包提交至AppStore审核,在这个过程中我们可能会多次上传ipa包。在Version相同的情况下,若Build还相同,则上传到App Store Connect时会提示已有该版本,不能再次上传。

3. 问题解决

为了避免这种情况,我们可以在每次打包前去手动修改Build,以保证不会重复。或者我们可以通过脚本让Build在每次打包时自动加一,省去每次手动修改的麻烦。

添加脚本的流程:
  1. Xcode切换到 Build Phases 选项卡;
  2. 点击左上角"+"号来增加一项"New Run Script Phase";
  3. 添加如下脚本代码:
#!/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

  1. 效果如下:


    添加Build自动+1的脚本代码
  2. 之后每次进行打包时,Build会自动+1,避免了Build重复的问题。

提示:

  1. 可以双击 Build Auto Increase 进行名称的修改,增加一项 New Run Script Phase 后,Xcode默认名称为:Run Script
  2. 每次编译或打包后,可以查看脚本的执行结果,如下图所示:


    脚本的执行结果
上一篇 下一篇

猜你喜欢

热点阅读