背景
之前公司打包并不统一,测试取包走的是自动打包流程,App打包上传到TestFlight以供审核采用的是人工打包及上传,人力重复劳动就很不舒服,所以搜索资料搞了搞自动打包与自动上传TestFlight的脚本。
打包过程中所需要的各种目录路径
为了便于在不同开发者拉取代码之后都能够顺利打包,不需要再动脚本,我将脚本放到了项目工程同目录下
#当前工作目录
WORKSPACE_PATH=`pwd`
#工程目录
PROJECT_PATH=$(dirname "${WORKSPACE_PATH}")/AllYoga/
#获取主工程路径
PROJECT=${PROJECT_PATH}/${PROJECT_NAME}.xcodeproj
PROJECT_W=${PROJECT_PATH}/${PROJECT_NAME}.xcworkspace
BUILD_DIR=${WORKSPACE_PATH}
# 删除缓存目录
rm -rf ${BUILD_DIR}/output
mkdir ${BUILD_DIR}/output
#指定archive路径
ARCHIVE_PATH=${BUILD_DIR}/output/${PROJECT_NAME}.xcarchive
#指定到处文件的路径和对应的plist文件路径
EXPORT_PATH=${BUILD_DIR}/output
API_KEY=""
API_ISSUER_KEY=""
如上述脚本的一些目录路径配置,这里说明的一点在当前目录下获取上级目录的方法
$(dirname "${WORKSPACE_PATH}")
整体目录是这个样子,打包脚本及产出物统一放置在与项目工程目录同级的package文件下,这两者的上级目录为git操作的文件
API_KEY 及 API_ISSUER_KEY
上传TestFlight需要用到这两个参数,参数获取可以到 用户和访问-> 密钥 -> AppStoreConnect API,生成一下,要注意,生成之后将对应的.p8文件下载下来保存好,这个文件只能下载一次,可以放到git仓库保管,下载后,还需要在电脑的用户目录下新建一个 private_keys文件,将.p8文件放到里面,否则在上传TestFlight时可能报错
Archive 脚本
#echo "删除xcode缓存文件"
rm -drf ~/Library/Developer/Xcode/DerivedData/*
#再clean一次目标PROJECT_NAME
xcodebuild clean -configuration ${BUILD_TYPE} -workspace ${PROJECT_W} -scheme "${PROJECT_NAME}"
#xcodebuild编译
if [ ${BUILD_TYPE} == "Debug" ];then
xcodebuild -configuration ${BUILD_TYPE} -workspace ${PROJECT_W} -scheme "${PROJECT_NAME}" -sdk iphoneos VALID_ARCHS="armv7 arm64" -archivePath ${ARCHIVE_PATH} archive
else
xcodebuild -configuration ${BUILD_TYPE} -workspace ${PROJECT_W} -scheme "${PROJECT_NAME}" -sdk iphoneos VALID_ARCHS="armv7 arm64" -archivePath ${ARCHIVE_PATH} archive
fi
Export 出ipa文件
xcodebuild -exportArchive -archivePath ${ARCHIVE_PATH} -exportPath ${EXPORT_PATH} -exportOptionsPlist ${BUILD_DIR}/ExportOptions.plist || exit 1
上传TestFlight
# 上传ipa
xcrun altool --upload-app -f ${IPAPATH} -t iOS --apiKey ${API_KEY} --apiIssuer ${API_ISSUER_KEY} --verbose