xcode编译版本号、bundleID自动化方案

之前比较懒,也是思想上比较懒,没有解放生产力,一次偶然的上线问题把这个事情给安排上了。

前情提要

项目分了两个上线的target,一个是主项目,一个是widget。

主项目 widget
BundleID(测试环境) com.henshuxueTest com.henshuxueWidgetTest
显示名(测试环境) 很数学测试 很数学测试
build(测试环境) 249 249
BundleID com.henshuxue com.henshuxueWidget
显示名 很数学 很数学
build 249 249

上线的时候手动修改一下这两个部分,需要修改6块,非常麻烦,而且含容易出错。显示名如果修改出错在testflight里边都很难看出来,也真是头疼。

解决方案

显示名、bundleID

针对于显示名称跟 bundleID 这个在 xcode 里边已经有了很好的配置办法,只不过就是没有注意过怎么配置。
显示名推荐配置是:

  1. Project -> Build Settings -> 搜索 Bundle Display Name 然后分环境分别配置显示名称
  2. 在 Target 对应的 info 栏里边增加 Bundle display name 属性设置为 $(INFOPLIST_KEY_CFBundleDisplayName)

bundleID推荐配置是:

  1. Target -> Build Settings -> 搜索 Product Bundle Identifier 然后分环境分别配置 bundleID

这样基本上就不用手动在管这两部分了。


有个特别需要注意的地方,xcode的build settings里边的配置,如果修改过的话那么字体是加粗的!!!之前还真没有注意过,如果发现报莫名其妙的错误的时候看配置是空的,但是key是加粗的时候其实是说明还是修改了,只不过修改是空。。。

在Project的build settings 中设置的属性,默认在target中是继承的,因此能设置在Project中的还是尽量设置在Project中会比较方便。如果在target里边需要修改在单独修改,此时修改的key是加粗显示的,知道了这个变化之后还是挺明显的


build号自动化

参考

推荐配置方式:
由于修改版本号只在 Archive 的时候用到其他的时候这个版本号基本上也没啥用处。所以针对于这种情况,只需要修改一下 scheme 的配置。

1.添加一个脚本内容如下,在archive之前执行一下。

# 版本更新到指定日期格式上,譬如说 2021110808
#!/bin/bash

VERSION=""

while getopts "v:h" arg #选项后面的冒号表示该选项需要参数
do
    case $arg in
        v)
            VERSION=$OPTARG
            ;;
        h)
            echo "-v 输入版本号"
            ;;
        ?)
            echo "-v 输入版本号"
            exit 1
            ;;
    esac
done


if [[ $VERSION == "" ]]; then
    echo "-v 输入版本号"
    exit 1
fi

agvtool new-marketing-version $VERSION

build_Number=`date +%Y%m%d%H`
agvtool new-version -all ${build_Number}

echo "编译版本号:$VERSION.${build_Number}"

你可能感兴趣的:(iOS开发,xcode,自动化)