(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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容

  • 起初想法: 基于公司原有的Jenkins服务的基础上,最近在公司自动化打包的时,遇到一个尴尬的问题?为什么不能直接...
    Evans_Xiao阅读 3,701评论 0 3
  • 前言 自动化(Automation)是指机器设备、系统或过程(生产、管理过程)在没有人或较少人的直接参与下,按照人...
    秦明Qinmin阅读 2,458评论 1 12
  • 前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段。用户们都是很挑剔的。如果一个公司的推广...
    偏偏就是祢阅读 8,886评论 34 59
  • 前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段。用户们都是很挑剔的。如果一个公司的推广...
    闲云清烟阅读 2,479评论 1 4
  • 使用xcodebuild和xcrun打包签名 要构建Xcode项目,可以从包含项目的目录(即包含名称的目录)运行x...
    花椒不麻牙阅读 424评论 1 0