自动化打包背景介绍
1、背景
2、ios程序包格式、渠道包格式
3、传统的ios打包方式
4、传统的打包带来的问题
自动化打包具体实现
- xcodebuild[-project][-activetarget][-alltargets][-target]...[-parallelizeTargets][-activeconfiguration][-configuration][-sdk |][=]...[]...
- xcodebuild[-version[-sdk |]]
- xcodebuild[-showsdks]
- xcodebuild[-find ][-sdk |]
- xcodebuild[-list]
1、xcodebuild 介绍:
2、xcrun 介绍:
3、具体方案
一些问题
总结:
附录
利用xcode环境一次生成所有包的shell 脚本代码:
- #!/bin/sh
- xcodebuild clean -configuration Distribution //clean项目
- distDir="/Users/xxxx/dist"
- releaseDir="build/Distribution-iphoneos"
- version="1_0_0"
- rm -rdf "$distDir"
- mkdir "$distDir"
- for line in $(cat data.dat) //读取所有渠道号data.dat文件
- do
- ipafilename=`echo $line|cut -f1 -d':'` //渠道名
- sourceid=`echo $line|cut -f2 -d':'` //渠道号
- echo "ipafilename=$ipaname"
- echo "sourceid=$sourceid"
- targetName="youtargename" //项目名称(xcode左边列表中显示的项目名称)
- echo "sourceid=$sourceid"
- echo "ipafilename=$ipafilename"
- echo "$sourceid" > sourceid.dat
- echo "sourceid.dat: "
- cat sourceid.dat
- rm -rdf "$releaseDir"
- ipapath="${distDir}/${targetName}_${version}_from_${sourceid}.ipa"
- echo "***开始build app文件***"
- xcodebuild -target "$targetName" -configuration Distribution -sdk iphoneos build
- appfile="${releaseDir}/${targetName}.app"
- if [ $sourceid == "appstore" ]
- then
- cd $releaseDir
- zip -r "${targetName}_${ipafilename}_${version}.zip" "${targetName}.app"
- mv "${targetName}_${ipafilename}.zip" $distDir 2> /dev/null
- cd ../..
- else
- echo "***开始打ipa渠道包****"
- /usr/bin/xcrun -sdk iphoneos PackageApplication -v "$appfile" -o "$ipapath" --sign "iPhone Distribution:xxxxxx"
- fi
- done
从ipa格式的母包生成其它渠道包的shell脚本实例:
- #!/bin/sh
- sourceipaname="母包名.ipa"
- appname=”app文件名.app” //加压后Pauload目录项.app文件名需要根据自己的项目修改
- distDir="/Users/lxxx/Qa" //打包后文件存储目录
- version="1.0.0"
- rm -rdf "$distDir "
- mkdir "$distDir" unzip $sourceipaname //解压母包文件
- for line in $(cat data.dat) //读取渠道号文件并进行循环
- do
- ipafilename=`echo $line|cut -f1 -d':'`
- sourceid=`echo $line|cut -f2 -d':'`
- echo "ipafilename=$ipaname"
- echo "sourceid=$sourceid"
- targetName="ipa包名"
- echo "sourceid=$sourceid"
- echo "ipafilename=$ipafilename"
- cd Payload
- cd $appname
- echo "replace sourceid.dat before: "
- cat sourceid.dat
- echo "$sourceid" > sourceid.dat
- echo "replace sourceid.dat after: "
- cat sourceid.dat
- if [ $sourceid == "appstroe" ]
- then
- cd ..
- zip -r "${targetName}_${version}_from_${sourceid}.zip" $appname //appstore二进制文件
- mv "${targetName}_${version}_from_${sourceid}.zip" $distDir
- cd ..
- else
- cd ../..
- zip -r "${targetName}_${version}_from_${sourceid}.ipa" Payload //打成其他渠道的包
- mv "${targetName}_${version}_from_${sourceid}.ipa" $distDir
- fi
- done rm -rdf Payload