iOS shell 自动打包IPA上传蒲公英

主要是为了打包的时候不占用xcode的时候,让他自己打包就行了

使用方法:
1.创建一个后缀名是.sh的文件我用的文件名就是shell.sh(文件在下面)

2.创建一个后缀名是.plist文件我用的文件名就是exportTest.plish(文件在下面)

3.把.sh和.plist这两个文件放在和.xcodeproj这个目录同级

4.用命令cd 到你项目的根目录

5.再输入 ./shell.sh

6.选择你你要打包的模式(目前只测试了2:打包上传蒲公英 3:不上传打包)

就让他自己运行就好了


shell.sh代码如下(注:需要更具自己的项目自行修改“【*需要修改*】”这些的地方)


#需要修改的地方【*需要修改*】
#判断是否有IPADir文件夹 没有就创建
if [ ! -d ./IPADir ];
then
mkdir -p IPADir;
fi


#工程绝对路径
project_path=$(cd `dirname $0`; pwd)

#工程名 将***替换成自己的工程名【*需要修改*】
project_name=***

#scheme名 将***替换成自己的sheme名【*需要修改*】
scheme_name=***

#scheme名 将***替换成自己的product_name名(如果和targets一样就和scheme_name一样)【*需要修改*】
product_name=***

#蒲公英上的API Key 【*需要修改*】
apiKey="**************************"

#如果不是选择1上传Appstore下面两个就不需要修改
#appstore AppleID的账号 【*需要修改*】
appstore_name="**********"
#appstore AppleID密码 【*需要修改*】
appstore_pwd="**********"

#打包模式 Debug/Release
development_mode=Release

#build文件夹路径
build_path=${project_path}/build

#plist文件所在路径 -- 打包导出ipa
exportOptionsPlistPath=${project_path}/exportTest.plist

#导出.ipa文件所在路径
exportIpaPath=${project_path}/IPADir/${development_mode}

echo "请输入数字选择打包模式 ? [ 1:上传app-store 2:打包上传蒲公英 3:不上传打包] "

##
read number
while([[ $number != 1 ]] && [[ $number != 2 ]] && [[ $number != 3 ]])
do
echo "选择错误请输入 1 or 2 or 3"
echo "请输入数字选择打包模式 ? [ 1:上传app-store 2:打包上传蒲公英 3:不上传打包] "
read number
done

if [ $number == 1 ];then
exportOptionsPlistPath=${project_path}/exportAppstore.plist
echo "----------您选择的是上传app-store \n"
elif [ $number == 2 ];then
exportOptionsPlistPath=${project_path}/exportTest.plist
echo "----------你选择的是打包上传蒲公英 \n"
else
exportOptionsPlistPath=${project_path}/exportTest.plist
echo "----------你选择的是不上传打包 \n\n"
fi

#检查apikey
if [ -z "$apiKey" ] && [ $number != 3 ]; then
    echo "上传蒲公英apiKey不能为空"
    exit 1
fi

echo '///-----------'
echo '/// 删除之前的编译文件夹【build】'
echo '///-----------'
rm -rf build || exit

echo '///-----------'
echo '/// 正在清理工程'
echo '///-----------'
xcodebuild \
clean -configuration ${development_mode} -quiet  || exit

echo '///--------'
echo '/// 清理完成'
echo '///--------'
echo ''

echo '///-----------'
echo '/// 正在编译工程:'${development_mode}
echo '///-----------'
xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${build_path}/${project_name}.xcarchive  -quiet  || exit

echo '///--------'
echo '/// 编译完成'
echo '///--------'
echo ''

echo '///----------'
echo '/// 开始ipa打包'
echo '///----------'
xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \
-configuration ${development_mode} \
-exportPath ${exportIpaPath} \
-exportOptionsPlist ${exportOptionsPlistPath} \
-quiet || exit

if [ -e $exportIpaPath/$product_name.ipa ]; then
echo '///----------'
echo '/// 打包ipa完成'
echo '///----------'
echo ''
else
echo '///-------------'
echo '/// 打包ipa失败 '
echo '///-------------'
exit 1
fi

#打开ipa文件夹
open $exportIpaPath
echo '///------------'
echo '/// --- 打开IPA文件夹 '
echo '///------------'


if [ $number == 1 ];then

#验证并上传到App Store
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
"$altoolPath" --validate-app -f ${exportIpaPath}/${product_name}.ipa -u ${appstore_name} -p ${appstore_pwd} -t ios --output-format xml
"$altoolPath" --upload-app -f ${exportIpaPath}/${product_name}.ipa -u  ${appstore_name} -p ${appstore_pwd} -t ios --output-format xml

elif [ $number == 2 ];then

echo "\n\n\033[32m  -----------------------上传到蒲公英-----------------------  \033[0m\n\n\n"

IPAPATHOUT=$exportIpaPath/$product_name.ipa
echo '\n\033[34m  上传到蒲公英ipa地址======\033[0m'${IPAPATHOUT}

uploadCommand() {
    result=$(eval $@)
}

# ---------------------------------------------------------------
# 获取上传凭证
# ---------------------------------------------------------------
echo '\n\033[34m  -----------------------获取上传凭证-----------------------\033[0m\n'

uploadCommand "curl -s -F '_api_key=${apiKey}' -F 'buildType="ipa"' http://www.pgyer.com/apiv2/app/getCOSToken";

[[ "${result}" =~ \"endpoint\":\"([\:\_\.\/\\A-Za-z0-9\-]+)\" ]] && endpoint=`echo ${BASH_REMATCH[1]} | sed 's!\\\/!/!g'`
[[ "${result}" =~ \"key\":\"([\.a-z0-9]+)\" ]] && key=`echo ${BASH_REMATCH[1]}`
[[ "${result}" =~ \"signature\":\"([\=\&\_\;A-Za-z0-9\-]+)\" ]] && signature=`echo ${BASH_REMATCH[1]}`
[[ "${result}" =~ \"x-cos-security-token\":\"([\_A-Za-z0-9\-]+)\" ]] && x_cos_security_token=`echo ${BASH_REMATCH[1]}`

if [ -z "$key" ] || [ -z "$signature" ] || [ -z "$x_cos_security_token" ] || [ -z "$endpoint" ]; then
    echo "\033[31m -----------------------获取凭证失败-----------------------\033[0m"
    exit 1
else
	echo "\n\n\033[32m  -----------------------获取凭证成功-----------------------  \033[0m\n\n\n"
	echo "\033[32m  tokenKey:${key}  \033[0m"
	echo "\033[32m  signature:${signature}  \033[0m"
	echo "\033[32m  x_cos_security_token:${x_cos_security_token}  \033[0m"
	echo "\033[32m  endpoint:${endpoint}  \033[0m"
fi

# ---------------------------------------------------------------
# 上传文件到蒲公英
# ---------------------------------------------------------------
echo '\n\033[34m  -----------------------上传文件到蒲公英-----------------------\033[0m\n'
file_name=${IPAPATHOUT##*/}

uploadCommand "curl -o /dev/null -w '%{http_code}' \
--form-string 'key=${key}' \
--form-string 'signature=${signature}' \
--form-string 'x-cos-security-token=${x_cos_security_token}' \
--form-string 'x-cos-meta-file-name=${file_name}' \
-F 'file=@${IPAPATHOUT}' ${endpoint}"

# if http code != 204, upload failed
if [ $result -ne 204 ]; then 
    echo "\033[31m -----------------------上传文件失败-----------------------\033[0m"
    exit 1
else
	echo "\n\n\033[32m  -----------------------文件已上传完毕-----------------------  \033[0m\n\n\n"
fi


# ---------------------------------------------------------------
# 检查上传结果
# ---------------------------------------------------------------
echo '\n\033[34m  -----------------------检查上传结果-----------------------\033[0m\n'
for i in {1..60}; do
    uploadCommand "curl -s http://www.pgyer.com/apiv2/app/buildInfo?_api_key=${apiKey}\&buildKey=${key}"
    [[ "${result}" =~ \"code\":([0-9]+) ]] && code=`echo ${BASH_REMATCH[1]}`
    [[ "${result}" =~ \"buildIdentifier\":\"([\:\_\.\/\\A-Za-z0-9\-]+)\" ]] && buildIdentifier=`echo ${BASH_REMATCH[1]} | sed 's!\\\/!/!g'`
    [[ "${result}" =~ \"buildShortcutUrl\":\"([\:\_\.\/\\A-Za-z0-9\-]+)\" ]] && buildShortcutUrl=`echo ${BASH_REMATCH[1]} | sed 's!\\\/!/!g'`
    [[ "${result}" =~ \"buildQRCodeURL\":\"([\:\_\.\/\\A-Za-z0-9\-]+)\" ]] && buildQRCodeURL=`echo ${BASH_REMATCH[1]} | sed 's!\\\/!/!g'`
    currentTime=$(date +"%Y-%m-%d %H:%M:%S")
    if [ $code -eq 0 ]; then
        echo "\033[32m  -----------------------上传文件成功-----------------------  \033[0m"
		echo "\033[32m 应用包名:${buildIdentifier}  \033[0m"
        echo "\033[32m 应用短链接:https://www.pgyer.com/${buildShortcutUrl}  \033[0m"
        echo "\033[32m 应用上传时间:${currentTime}  \033[0m"
        echo "\033[32m 本次上传二维码地址:${buildQRCodeURL}  \033[0m"
        break
    else
        sleep 1
    fi
done


echo '\n\n-----------------------正在删除打包后的编译文件和配置文件(所有自动打包的文件包括本脚本)-----------------------'
echo '-----------------------删除文件夹 【build】-----------------------'
rm -rf build || exit
echo '-----------------------【build 删除成功】-----------------------'
echo '-----------------------删除文件夹 【IPADir】-----------------------'
rm -rf IPADir || exit
echo '-----------------------【IPADir 删除成功】-----------------------'
echo '-----------------------删除文件 【exportTest.plist】-----------------------'
rm -rf exportTest.plist || exit
echo '-----------------------【exportTest.plist 删除成功】-----------------------'
echo '-----------------------删除文件 【shell.sh】-----------------------'
rm -r shell.sh || exit
echo '-----------------------【shell.sh 删除成功】-----------------------'
 

else

echo '-----------------------不上传只打包end-----------------------'

fi

exit 0



exportTest.plish代码如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>signingStyle</key>
	<string>automatic</string>
	<key>iCloudContainerEnvironment</key>
	<string>Production</string>
	<key>method</key>
	<string>ad-hoc</string>
	<key>compileBitcode</key>
	<false/>
</dict>
</plist>

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值