美文网首页
『ios』自动化脚本打包

『ios』自动化脚本打包

作者: butterflyer | 来源:发表于2018-12-11 14:51 被阅读42次

最近搞了下公司自动化打包ps(一次打3个包每个包配置还不一样,受不了),第一次搞~,通过各种查也总算实现了,需求。

介绍脚本之前先介绍下里面需要的东西吧,在我们平时打包出来的ipa文件里,打开包内容就能看到这个东西,ExportOptions.plist。
里面包含了 比如
method 我们打的什么包,相如enterprise就是企业包了。
compileBitcode就是是否包含bitcode
provisioningProfiles里面包含我们的证书。
还有teamID等。

image.png image.png

然后下面是脚本

#! /bin/bash
# created by 信昊
# 注意:1、打包前:确保代码最新并正常运行 2、打包后:完成之后删除build目录及ipa导出目录
# Usage: 1、把tvm_app_auto_package文件夹及app_auto_package.sh脚本放到工程根目录 2、命令行cd到工程根目录 3、执行如下脚本
# ./app_auto_package.sh -t AppStore |or| ./app_auto_package.sh -t Enterprise |or| ./app_auto_package.sh -t AdHoc |or| ./app_auto_package.sh -t AdHoc-QA

#提供三种模式的包
appstore="AppStore"
enterprise="Enterprise"
adhoc="AdHoc"
adhocqa="AdHoc-QA"

if [ $# -lt 1 ];then
echo "出错了!你应该输入: (AdHoc or AppStore or Enterprise or AdHoc-QA)."
echo ""
exit 2
fi

while getopts 't:' optname
do
case "$optname" in
t)
if [ ${OPTARG} != $enterprise ] && [ ${OPTARG} != $appstore ] ;then
echo "出错了!你应该输入: -t [Enterprise or AdHoc or AppStore or AdHoc-QA]"
echo ""
exit 1
fi
type=${OPTARG}
;;
*)
echo "出错了!请确认输入无误后重试!"
echo ""
exit 2
;;
esac
done

#工程绝对路径
project_path=$(pwd)

#工程名
project_name=TVMInteractiveTime

#打包模式 Debug/Release
development_mode=Release

#scheme名,默认TVMInteractiveTime,企业包应该为TVMInteractiveTime-Enterprise
scheme_name=TVMInteractiveTime

if [ $type == $enterprise ]; then
echo '*** 此包为企业包 ***'
scheme_name=TVMInteractiveTime-Enterprise
elif [ $type == $appstore ]; then
echo '*** 此包为AppStore包 ***'
elif [ $type == $adhoc ];then
echo '*** 此包为AdHoc包 ***'
elif [ $type == $adhocqa ];then
echo '*** 此包为AdHoc-QA包 ***'
scheme_name=TVMInteractiveTime-QA
fi

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

#plist文件所在路径
exportOptionsPlistPath=${project_path}/tvm_app_auto_package/${type}ExportOptions.plist

#导出.ipa文件所在路径
exportFilePath=${project_path}/tvm_app_auto_package/${type}_ipa

echo '*** 正在清理工程 ***'

xcodebuild \
clean -configuration ${development_mode} -quiet  || exit

echo '*** 清理完成 ***'

if [ -f $exportFilePath/${scheme_name}.ipa ]; then
echo "*** ipa文件已存在,正在删除老的ipa ***"
rm -f $exportFilePath/${scheme_name}.ipa
echo "*** 已删除老ipa文件 ***"
fi

echo '*** 正在编译工程 Type: '${development_mode}

xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${build_path}/${project_name}.xcarchive -quiet  || exit

echo '*** 编译完成 ***'
echo '*** 正在打包 ***'

xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \
-configuration ${development_mode} \
-exportPath ${exportFilePath} \
-exportOptionsPlist ${exportOptionsPlistPath} -allowProvisioningUpdates \
-quiet || exit

echo "*** 正在导出ipa文件 ***"

if [ -e $exportFilePath/${scheme_name}.ipa ]; then
echo "*** ipa文件已导出 ***"
open $exportFilePath
else
echo "*** 创建ipa文件失败 ***"
fi

echo '*** 打包完成 ***'

坐下解释看图。


image.png

这是tvm_app_auto_package里的构成,包含我们所需的ExportOptions.plist(从ipa包里拿,比如你打了企业的包,就从里面拿企业包对应的plist,如果是appstore包就拿他对应的。)里面还包含我们打包好的build目录和ipa目录

记录下遇到的报错

error: exportArchive: The data couldn’t be read because it isn’t in the correct format.

Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value., NSFilePath=/var/folders/_r/3_bstv751wvd5312csbl2hp00000gn/T/ipatool-json-filepath-h8AXks}

原因是开启了bitcode,把bitcode关闭就好了。

第一阶段先这样~有时间再看下其他方面的。

想要找一群一起进步的人,请加入我

image.png

相关文章

网友评论

      本文标题:『ios』自动化脚本打包

      本文链接:https://www.haomeiwen.com/subject/haoshqtx.html