(iOS)自定义打包上传

推荐一个自动化打包的工具套件,提供一个运行良好的持续部署流程,只需要运行一个简单的命令就可以触发这个流程。下面是Github地址

https://github.com/fastlane/fastlane

出于初始化的时候需要账号密码,所以只是简单的使用它打包了项目,后续贴出fastlane的实践步骤。


当然了,根据自己的需求写了一个打包以及上传的脚本,大致思路为:

1.使用xcodebuild进行打包

2.备份打包过程中的文件

3.上传打包文件到公司服务器


现在就上面几个步骤贴出完整步骤(由于涉及公司名称,所以有些地方修改了下名称):

1.由于涉及到自动生成plist文件等,所以单独拿出来一个文件放配置信息,

iOS_Config.sh :

software-package^https://app.xxxxxx.com/app/TestProject/iOS/^提示内容^1.222^software^com.chenzhe.test^/xx/yy/TestProject/iOS^/xx/plist/TestProject

software-package , software 这两个不用修改,plist文件里面需要的

https://app.xxxxxx.com/app/TestProject/iOS/ 这是ipa包存放的前缀地址

提示内容,1.222,com.chenzhe.test 这三个分别是企业证书下载时弹出的提示文本,plist文件中app的版本号,plist文件中app的BundleID

/xx/yy/TestProject/iOS,/xx/plist/TestProject 这两个分别代表ipa的服务器绝对地址和plist文件的绝对地址

以上配置对于企业证书打包很重要,因为会自动生成plist文件,对于Store的只需要最后打出的ipa包即可。


2.配置启动脚本,因为要与真正的打包脚本分开,所以,iOS_Build.sh是单独的shell脚本,传入参数后触发打包脚本。

iOS_Build.sh

#/bin/bash

#cd到项目目录下

cd $4

#检查以及修改配置文件信息,可注释

`open serviceConfig.sh`;

echo "检查完毕并立即执行?y/n";

read result;

if [ "$result" != "y" ]

then

echo '无效命令,请重新运行';

exit;

fi

#开始执行打包脚本

echo "/***                          打包中,请勿关闭...";

source $4/iOS_Archive.sh $1 $2 $3 $4 $5;

echo "***                            打包结束,可关闭/";

大致步骤为打开配置文件信息进行核对,当然不需要的话可以自行注释掉,然后就传入基本参数进行脚本打包。

3.执行打包脚本

iOS_Archive.sh

#!/bin/bash

#1.工程名 2.当前工程描述文件名称 3.打包后的IPA名 4.脚本所在目录地址(也就是项目路径) 5.commit号,后续开放

#################################################配置信息#################################################

#获取当前用户名以及时间戳

userName=`whoami`

timeVar=`date +%Y-%m-%d-%H-%M`

#获取配置信息

aTemp=""

filePath=`pwd`

plistName=$3

while read line

do

aTemp=$line

done < "$filePath/iOS_Config.sh"

IFS='^'

argsArray=($line)

#basePath 打包文件备份根路径

#toolArchivePath 将Archive文件保存到原目录,比如说友盟做崩溃日志收集等使用(如果Xcode改名的话自己一定要修改下面的Xcode参数)

basePath="/Users/$userName/Desktop"

toolArchivePath="/Users/$userName/Library/Developer/Xcode"

if [ ! -d "/Users/$userName/Desktop" ]

then

basePath="/Users/admin/Desktop";

toolArchivePath="/Users/admin/Library/Developer/Xcode"

fi

#ipaPath 打包文件备份实际存放路径

ipaPath="$basePath/IOSProject/$1/$timeVar"

#提示用户信息,5秒后进行打包

printf "\e[31m %-50s\e[0m\n" "打包工程名:                        $1";

printf "\e[31m %-50s\e[0m\n" "BundleID:                          ${argsArray[5]}";

printf "\e[31m %-50s\e[0m\n" "描述文件名称:                      $2";

printf "\e[31m %-50s\e[0m\n" "项目版本号:                        ${argsArray[3]}";

printf "\e[31m %-50s\e[0m\n" "项目路径:                          $4";

printf "\e[31m %-50s\e[0m\n" "ipa文件所在服务器路径:            ${argsArray[1]}$plistName.ipa";

printf "\e[31m %-50s\e[0m\n" "plist文件所在服务器路径:          ${argsArray[1]}$plistName.plist";

printf "\e[31m %-50s\e[0m\n" "下载描述信息:                      ${argsArray[2]}";

echo "请确认信息,5秒后开始打包......";

sleep 5;

#################################################打包工作#################################################

#删除可能存在的缓存包

rm -rf "./$3.ipa"

rm -rf "./$3.plist"

rm -rf "./$timeVar.xcarchive"

#使用xcodebuild进行打包,默认采取静默方式,有额外需求自行添加(比如有多个Target的项目,自行添加-target等等)

#workspace 工作空间

#scheme 项目Scheme

#archivePath Archive路径

xcodebuild clean build -configuration Release -workspace "$1.xcworkspace" -scheme $1 -archivePath "./$timeVar.xcarchive" archive;

xcodebuild -exportArchive -exportFormat IPA -archivePath "./$timeVar.xcarchive" -exportPath "./$3.ipa" -exportProvisioningProfile $2;

除了xcodebuild那两行,上面的基本工作就是配置基本路径信息,比如备份文件存储的地址等,红色提示用户打包基本信息进行核对,然后archive以及生成ipa文件。

然后生成plist文件:

#生成plist文件initPlist() {echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "items">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "assets">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "kind">> "$plistName.plist"echo "${argsArray[0]}">> "$plistName.plist"echo "url">> "$plistName.plist"echo "${argsArray[1]}$plistName.ipa">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "metadata">> "$plistName.plist"echo "">> "$plistName.plist"echo "bundle-identifier">> "$plistName.plist"echo "${argsArray[5]}">> "$plistName.plist"echo "bundle-version">> "$plistName.plist"echo "${argsArray[3]}">> "$plistName.plist"echo "kind">> "$plistName.plist"echo "${argsArray[4]}">> "$plistName.plist"echo "title">> "$plistName.plist"echo "${argsArray[2]}">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "}">> "$plistName.plist"}

initPlist $plistName "$filePath/$plistName.plist";

#创建原目录文件夹

mkdir -p "$toolArchivePath/toolArchives/$1/$timeVar"

然后是打包后的后续操作了,比如上传到服务器上或者分发到别的渠道等:

#################################################分发项目包#################################################

#供用户选择

Excute_Page=(

[0]='1'

[1]='2'

)

Excute_Handler=(

[0]='上传到SFTP服务器'

[1]='退出'

)

Excute_Count=${#Excute_Page[@]}

#输出用户选项

screen_echo() {

printf "%-7s |" '序号'

printf "%-30s\n" '执行操作'

for((i=0; i<$Excute_Count; ++i))

do

printf "\e[31m %-5s\e[0m" `expr $i + 1`

printf "\033[36m %-30s \033[0m\n" "${Excute_Handler[$i]}"

done

}

screen_echo

#创建备份目录

mkdir -p $ipaPath

read -p '请输入要登陆的服务器序号(非以上选项都以退出处理): ' Excute_Number

echo ${Excute_Number};

#执行用户选择

if [ ${Excute_Number} -eq '1' ];

then

#上传ipa plist等文件到服务器上

`$4/iOS_Dispatch.sh ${argsArray[6]} $4 $plistName ${argsArray[7]}`

elif [ ${Excute_Number} -eq '2' ];

then

`open $ipaPath`

else

echo "输入错误,退出";

`open $ipaPath`

fi

#################################################后续收尾工作################################################

#拷贝文件到备份目录下去

cp "$4/$3.ipa" $ipaPath

cp "$4/$3.plist" $ipaPath

cp -R "$4/$timeVar.xcarchive" $ipaPath

cp -R "$4/$timeVar.xcarchive" "$toolArchivePath/toolArchives/$1/$timeVar"

#删除文件

rm -rf "$4/$3.ipa"

rm -rf "$4/$3.plist"

rm -rf "$4/$timeVar.xcarchive"

暂时只满足了上传到服务器和直接打开下载包地址的功能,如果有自己分发渠道的可以自行添加选项:

Excute_Handler=(

[0]='上传到SFTP服务器'

[1]='退出'

)

4.上传到服务器

由于第三步用户已经选择了上传到服务器,这里只需要实现自己的上传脚本即可,后面的脚本命令就不贴出来了。


以上基本就简单实现了基本的打包以及分发的功能,不是很完善,后续有时间会持续更新。


差点忘了,因为我是上传到我们公司的ftp服务器上,所以推荐一个mac的软件

brew install lftp

如果你是升级到新系统或者Sierra这些,而且brew 也搜索不到lftp的话,可以使用:

brew install homebrew/boneyard/lftp

你可能感兴趣的:((iOS)自定义打包上传)