diff --git a/IPABuildShell.sh b/IPABuildShell.sh index 810379a..b618651 100755 --- a/IPABuildShell.sh +++ b/IPABuildShell.sh @@ -6,7 +6,7 @@ # version: 3.0.4(225) # createTime: 2018-07-30 # description: iOS 自动打包 -# author: 冯立海 +# author: itx # email: 335418265@qq.com # github: https://github.com/aa335418265/IPABuildShell # ---------------------------------------------------------------------- @@ -27,7 +27,7 @@ Shell_Work_Path=$(pwd) ##脚本文件目录 Shell_File_Path=$(cd `dirname $0`; pwd) ## 用户配置 -Shell_User_Xcconfig_File="$Shell_File_Path/user.xcconfig" +# Shell_User_Xcconfig_File="$Shell_File_Path/user.xcconfig" ## 脚本临时生成最终用于构建的配置 Tmp_Build_Xcconfig_File="$Package_Dir/build.xcconfig" Tmp_Log_File="$Package_Dir/`date +"%Y%m%d%H%M%S"`.txt" @@ -52,18 +52,26 @@ function usage echo " -t | --target 指定构建的target。默认当项目是单工程(非workspace)或者除Pods.xcodeproj之外只有一个工程的情况下,自动构建工程的第一个Target" echo " -v | --verbose 输出详细的构建信息" echo " -h | --help 帮助." + echo " -s | --show-sign 显示签名配置" echo " -x 脚本执行调试模式." - echo " --non-dsym 不生成dsym文件" + echo " --non-dsym 不生成dsym文件" echo " --show-profile-detail 查看描述文件的信息详情(development、enterprise、app-store、ad-hoc)" echo " --debug Debug和Release构建模式,默认Release模式," echo " --enable-bitcode 开启BitCode, 默认不开启" echo " --auto-buildversion 自动修改构建版本号(设置为当前项目的git版本数量),默认不开启" + echo " --xcconfig 构建的时候,会去加载在该文件中定义的Build Setting 的配置。注:如果出现与其他参数配置相同的功能,这里的配置会覆盖其他所有设置。它与xcodebuild 命令的\" -xcconfig \" 参数用法一致。文件格式为:key=value" echo " --env-filename 指定开发和生产环境的配置文件" echo " --env-varname 指定开发和生产环境的配置变量" echo " --env-production YES 生产环境, NO 开发环境(只有指定filename和varname都存在时生效)" + echo "" + echo "================================================" + echo "作者:fenglh" + echo "Email:335418265@qq.com" + echo "GitHub:https://github.com/fenglh/IPABuildShell" + echo "================================================" exit 0 @@ -131,24 +139,22 @@ function initBuildXcconfig() { echo $xcconfigFile } -function initUserXcconfig() { - if [[ -f "$Shell_User_Xcconfig_File" ]]; then - local allKeys=(CONFIGRATION_TYPE ARCHS CHANNEL ENABLE_BITCODE DEBUG_INFORMATION_FORMAT AUTO_BUILD_VERSION UNLOCK_KEYCHAIN_PWD API_ENV_FILE_NAME API_ENV_VARNAME API_ENV_PRODUCTION PROVISION_DIR ) - for key in ${allKeys[@]}; do - local value=$(getXcconfigValue "$Shell_User_Xcconfig_File" "$key") - - # echo "===$value=====" - if [[ "$value" ]]; then - eval "$key"='$value' - logit "【初始化用户配置】${key} = `eval echo "$value"`" - fi - - done - fi +# function initUserXcconfig() { +# if [[ -f "$Shell_User_Xcconfig_File" ]]; then +# local allKeys=(CONFIGRATION_TYPE ARCHS CHANNEL ENABLE_BITCODE DEBUG_INFORMATION_FORMAT AUTO_BUILD_VERSION UNLOCK_KEYCHAIN_PWD API_ENV_FILE_NAME API_ENV_VARNAME API_ENV_PRODUCTION PROVISION_DIR ) +# for key in ${allKeys[@]}; do +# local value=$(getXcconfigValue "$Shell_User_Xcconfig_File" "$key") +# # echo "===$value=====" +# if [[ "$value" ]]; then +# eval "$key"='$value' +# logit "【初始化用户配置】${key} = `eval echo "$value"`" +# fi +# done +# fi +# } -} function checkOpenssl() { local opensslInfo=$(openssl version) @@ -160,17 +166,17 @@ function checkOpenssl() { logit "【构建信息】OpenSSL 版本:$opensslVersion" } -function getXcconfigValue() { - local xcconfigFile=$1 - local key=$2 - if [[ ! -f "$xcconfigFile" ]]; then - exit 1 - fi - ## 去掉//开头 ; 查找key=特征,去掉双引号 - local value=$(grep -v "[ ]*//" "$xcconfigFile" | grep -e "[ ]*$key[ ]*=" | tail -1| cut -d "=" -f2 | grep -o "[^ ]\+\( \+[^ ]\+\)*" | sed 's/\"//g' | sed "s/\'//g" ) +# function getXcconfigValue() { +# local xcconfigFile=$1 +# local key=$2 +# if [[ ! -f "$xcconfigFile" ]]; then +# exit 1 +# fi +# ## 去掉//开头 ; 查找key=特征,去掉双引号 +# local value=$(grep -v "[ ]*//" "$xcconfigFile" | grep -e "[ ]*$key[ ]*=" | tail -1| cut -d "=" -f2 | grep -o "[^ ]\+\( \+[^ ]\+\)*" | sed 's/\"//g' | sed "s/\'//g" ) - echo $value -} +# echo $value +# } ## 解锁keychain function unlockKeychain(){ @@ -191,7 +197,7 @@ function setXCconfigWithKeyValue() { local key=$1 local value=$2 - local xcconfigFile=$Tmp_Build_Xcconfig_File + local xcconfigFile=$3 if [[ ! -f "$xcconfigFile" ]]; then exit 1 fi @@ -1264,6 +1270,9 @@ while [ "$1" != "" ]; do shift UNLOCK_KEYCHAIN_PWD="$1" ;; + -s | --show-sign ) + ONLYSHOWSIGN=true + ;; -v | --verbose ) VERBOSE=true ;; @@ -1296,6 +1305,10 @@ while [ "$1" != "" ]; do --auto-buildversion ) AUTO_BUILD_VERSION='YES' ;; + --xcconfig ) + shift + USER_XCCONFIG_FILE="$1" + ;; --env-filename ) shift @@ -1330,7 +1343,7 @@ startTimeSeconds=`date +%s` historyBackup ## 初始化用户配置 -initUserXcconfig +# initUserXcconfig if [[ $? -eq 0 ]]; then logit "【数据备份】上一次打包文件已备份到:$Package_Dir/History" fi @@ -1545,26 +1558,36 @@ if [[ ! "$result" ]]; then errorExit "签名ID:${codeSignIdentity}无效,请检查钥匙串是否导入对应的证书或脚本访问keychain权限不足,请使用-p参数指定密码 " fi +if [[ $ONLYSHOWSIGN ]]; then + exit; +fi + ### 进行构建配置信息覆盖,关闭BitCode、签名手动、配置签名等 xcconfigFile=$(initBuildXcconfig) -if [[ "$xcconfigFile" ]]; then - logit "【签名设置】初始化XCconfig配置文件:$xcconfigFile" -fi -setXCconfigWithKeyValue "ENABLE_BITCODE" "$ENABLE_BITCODE" -setXCconfigWithKeyValue "DEBUG_INFORMATION_FORMAT" "$DEBUG_INFORMATION_FORMAT" -setXCconfigWithKeyValue "CODE_SIGN_STYLE" "$CODE_SIGN_STYLE" -setXCconfigWithKeyValue "PROVISIONING_PROFILE_SPECIFIER" "$(getProvisionfileName "$provisionFile")" -setXCconfigWithKeyValue "PROVISIONING_PROFILE" "$(getProvisionfileUUID "$provisionFile")" -setXCconfigWithKeyValue "DEVELOPMENT_TEAM" "$(getProvisionfileTeamID "$provisionFile")" -setXCconfigWithKeyValue "CODE_SIGN_IDENTITY" "$codeSignIdentity" -setXCconfigWithKeyValue "PRODUCT_BUNDLE_IDENTIFIER" "$projectBundleId" -setXCconfigWithKeyValue "ARCHS" "$ARCHS" -setXCconfigWithKeyValue "SUPPORTS_MACCATALYST" "NO" +setXCconfigWithKeyValue "ENABLE_BITCODE" "$ENABLE_BITCODE" "$xcconfigFile" +setXCconfigWithKeyValue "DEBUG_INFORMATION_FORMAT" "$DEBUG_INFORMATION_FORMAT" "$xcconfigFile" +setXCconfigWithKeyValue "CODE_SIGN_STYLE" "$CODE_SIGN_STYLE" "$xcconfigFile" +setXCconfigWithKeyValue "PROVISIONING_PROFILE_SPECIFIER" "$(getProvisionfileName "$provisionFile")" "$xcconfigFile" +setXCconfigWithKeyValue "PROVISIONING_PROFILE" "$(getProvisionfileUUID "$provisionFile")" "$xcconfigFile" +setXCconfigWithKeyValue "DEVELOPMENT_TEAM" "$(getProvisionfileTeamID "$provisionFile")" "$xcconfigFile" +setXCconfigWithKeyValue "CODE_SIGN_IDENTITY" "$codeSignIdentity" "$xcconfigFile" +setXCconfigWithKeyValue "PRODUCT_BUNDLE_IDENTIFIER" "$projectBundleId" "$xcconfigFile" +setXCconfigWithKeyValue "ARCHS" "$ARCHS" "$xcconfigFile" +setXCconfigWithKeyValue "SUPPORTS_MACCATALYST" "NO" "$xcconfigFile" + + + +### 合并用户的xcconfig 文件 +if [[ -f "$USER_XCCONFIG_FILE" ]]; then + cat "$USER_XCCONFIG_FILE" >> $xcconfigFile ##追加 +fi + +logit "【签名设置】初始化xcconfig文件:$xcconfigFile" @@ -1627,7 +1650,7 @@ checkIPA "$exportPath" ##清理临时文件 rm -rf "$Tmp_Options_Plist_File" ##清理option.plist rm -rf "$Tmp_Build_Xcconfig_File" ##清理xcconfig -# rm -rf "$archivePath" ##清理xcarchive +rm -rf "$archivePath" ##清理xcarchive rm -rf "$Package_Dir/Packaging.log" #清理日志 rm -rf "$Package_Dir/ExportOptions.plist" rm -rf "$Package_Dir/DistributionSummary.plist" @@ -1643,8 +1666,7 @@ exportDir=${exportPath%/*} ipaName=$(finalIPAName "$targetName" "$apiEnvFile" "$API_ENV_VARNAME" "$infoPlistFile" "$(getProfileTypeCNName $CHANNEL)" "$configurationId" "$xcodeprojPath" ) -mv "$exportPath" "${exportDir}/${ipaName}.ipa" -mv "$Tmp_Log_File" "${exportDir}/${ipaName}.txt" + if [[ -f "$Package_Dir/dsym.tar.gz" ]]; then mv "$Package_Dir/dsym.tar.gz" "${exportDir}/${ipaName}.dysm.tar.gz" logit "【IPA 信息】DYSM路径:${exportDir}/${ipaName}.dysm.tar.gz" @@ -1658,6 +1680,7 @@ logit "【IPA 信息】日志路径:${exportDir}/${ipaName}.txt" endTimeSeconds=`date +%s` logit "【构建时长】构建时长:$((${endTimeSeconds}-${startTimeSeconds})) 秒" - +mv "$exportPath" "${exportDir}/${ipaName}.ipa" +mv "$Tmp_Log_File" "${exportDir}/${ipaName}.txt" diff --git a/README.md b/README.md index e27face..a789239 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ Usage:IPABuildShell.sh -[abcdptx] [--enable-bitcode YES/NO] [--auto-buildversion -d | --provision-dir dir 指定授权文件目录,默认会在~/Library/MobileDevice/Provisioning Profiles 中寻找 -p | --keychain-password passoword 指定访问证书时解锁钥匙串的密码,即开机密码 -t | --target targetName 指定构建的target。默认当项目是单工程(非workspace)或者除Pods.xcodeproj之外只有一个工程的情况下,自动构建工程的第一个Target +-s | --show-sign 显示签名配置 -v | --verbose 输出详细的构建信息 -h | --help 帮助. -x 脚本执行调试模式. @@ -209,6 +210,14 @@ source ~/.bash_profile ``` # 2020/05/22 +# 版本:3.0.7 +# 1. 增加-s参数:-s | --show-sign 显示签名配置 +#-------------------------------------------- +# 2020/05/22 +# 版本:3.0.6 +# 1. 增加dsym文件备份 +#-------------------------------------------- +# 2020/05/22 # 版本:3.0.5 # 1. 支持通配符bundleid描述文件匹配 #-------------------------------------------- diff --git a/user.xcconfig b/user.xcconfig deleted file mode 100644 index e1ff97a..0000000 --- a/user.xcconfig +++ /dev/null @@ -1,32 +0,0 @@ -//脚本全局参数配置文件(脚本参数优先于全局配置参数) - - -//keychain解锁密码,即PC开机密码。通常只有在第一次执行脚本时候需要。相当于脚本参数 -p | --keychain-password -UNLOCK_KEYCHAIN_PWD = - -//构建模式:Debug/Release ;默认 Release。相当于脚本参数 -t | --configration-type -CONFIGRATION_TYPE= - -//架构集 :arm64/armv7/armv7 arm64 ;默认 arm64。相当于脚本参数 -a | --archs -ARCHS = - -//是否启动bitcode :YES/NO 关闭; 默认 NO。相当于脚本参数 --enable-bitcode -ENABLE_BITCODE = - -//是否自动修改build version:YES/NO ;默认 NO (取当前项目git的版本数量作为build version )。相当于脚本参数 --auto-buildversion -AUTO_BUILD_VERSION = - -//授权文件目录,默认在~/Library/MobileDevice/Provisioning Profiles。相当于脚本参数 -d | --provision-dir -PROVISION_DIR= - - - - -//例如在AppDelegate.h 声明变量 static BOOL isProduction = NO;来控制接口的生产环境和开发环境 -//指定配置接口生产环境的文件名。相当于脚本参数 --env-filename -API_ENV_FILE_NAME = -//指定配置接口生产环境的变量名。相当于脚本参数 --env-varname -API_ENV_VARNAME = -//指定配置接口生产环境的变量值:YES/NO 相当于脚本参数 --env-production -API_ENV_PRODUCTION = -