Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 70 additions & 47 deletions IPABuildShell.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
# ----------------------------------------------------------------------
Expand All @@ -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"
Expand All @@ -52,18 +52,26 @@ function usage
echo " -t | --target <targetName> 指定构建的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 <provisionfile> 查看描述文件的信息详情(development、enterprise、app-store、ad-hoc)"
echo " --debug Debug和Release构建模式,默认Release模式,"
echo " --enable-bitcode 开启BitCode, 默认不开启"
echo " --auto-buildversion 自动修改构建版本号(设置为当前项目的git版本数量),默认不开启"
echo " --xcconfig <filename> 构建的时候,会去加载在该文件中定义的Build Setting 的配置。注:如果出现与其他参数配置相同的功能,这里的配置会覆盖其他所有设置。它与xcodebuild 命令的\" -xcconfig <filename> \" 参数用法一致。文件格式为:key=value"
echo " --env-filename <filename> 指定开发和生产环境的配置文件"
echo " --env-varname <varname> 指定开发和生产环境的配置变量"
echo " --env-production <YES/NO> YES 生产环境, NO 开发环境(只有指定filename和varname都存在时生效)"

echo ""
echo "================================================"
echo "作者:fenglh"
echo "Email:335418265@qq.com"
echo "GitHub:https://github.com/fenglh/IPABuildShell"
echo "================================================"


exit 0
Expand Down Expand Up @@ -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)
Expand All @@ -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(){
Expand All @@ -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
Expand Down Expand Up @@ -1264,6 +1270,9 @@ while [ "$1" != "" ]; do
shift
UNLOCK_KEYCHAIN_PWD="$1"
;;
-s | --show-sign )
ONLYSHOWSIGN=true
;;
-v | --verbose )
VERBOSE=true
;;
Expand Down Expand Up @@ -1296,6 +1305,10 @@ while [ "$1" != "" ]; do
--auto-buildversion )
AUTO_BUILD_VERSION='YES'
;;
--xcconfig )
shift
USER_XCCONFIG_FILE="$1"
;;

--env-filename )
shift
Expand Down Expand Up @@ -1330,7 +1343,7 @@ startTimeSeconds=`date +%s`

historyBackup
## 初始化用户配置
initUserXcconfig
# initUserXcconfig
if [[ $? -eq 0 ]]; then
logit "【数据备份】上一次打包文件已备份到:$Package_Dir/History"
fi
Expand Down Expand Up @@ -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"



Expand Down Expand Up @@ -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"
Expand All @@ -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"
Expand All @@ -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"


9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 脚本执行调试模式.
Expand Down Expand Up @@ -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描述文件匹配
#--------------------------------------------
Expand Down
32 changes: 0 additions & 32 deletions user.xcconfig

This file was deleted.