最近有好一段时间没有整理博客了,也不是因为忙,就是太懒。或者说程序员都自带懒属性😅,表现在对于一些机械性重复性的工作,宁愿一次性多花些精力去封装、去写出各种各样的工具来替自己干活,也不愿意多次重复劳动(就算那是很简单的工作)。这不我结合最近的工作,研究着写了两份Shell脚本,一是关于Xcode脚本打包,还有一个是关于crash log解析(这个将在另一篇文章说明)。
Shell打包脚本实现了如下功能
- 指定打包项目的Build号,Version版本号——Version号可选择自增或自定义(在测试阶段打包时,每次手动改变Version号很是麻烦,而且不方便管理;而如果能打包时通过脚本参数控制,so easy~)
- 导出xcarchive文件,通过xcarchive文件得到dSYM文件,这是很重要的。查找线上crash时,缺它不可!crash log解析请看这里。
- 打包生成ipa文件,这个就是最终需要的渠道包了。
另外打包脚本可以根据项目配置,每一次成功打包后,都会生成对应目录,并生成记录本次打包的log日志文件。
打包脚本
1 |
|
脚本详解
开始部分,对输入参数进行了判断,脚本命令:
[]表示可选参数,<>表示必填参数
1
./Release.sh <Project directory name> [-w] [-s <Name>] [-e] [-d] [-a] [-b <Build number>] [-v <Version number>]
第二步,判断并修改Build号以及Version号,
-b <Build number> -v <Version number>
,分别取对应的值;如果是-a
则Version号自增,在旧版本号的基础上+1,其中的主版本号、副版本号、发布号默认采用的是10进制规则,举例1.0.0
执行-a
后为1.0.1
1.1.9
执行-a
后为1.2.0
导出xcarchive文件,这里要区分是project项目,还是workspace项目,如果你使用了CocoPads管理项目,那么打包的就是workspace项目
1
2
3
4
5
6
7if [[ ${Archive_type} == "workspace" ]];then
#打包workspace
xcodebuild archive -workspace "${Workspace_name}" -scheme "${Scheme_name}" -configuration "${Configuration}" -archivePath "${Archive_path}" >> $Log_path
else
#打包project
xcodebuild archive -project "${Project_name}" -scheme "${Scheme_name}" -configuration "${Configuration}" -archivePath "${Archive_path}" >> $Log_path
fi${Workspace_name}
是.xcworkspace文件的完整路径(${Project_name}
一样),${Scheme_name}
表示项目Scheme的名称,${Configuration}
有两个值:Debug和Release,${Archive_path}
是生成的xcarchive文件的导出路径,>> $Log_path
表示将log日志输出到Log_path文件生成ipa文件
1
xcodebuild -exportArchive -archivePath "${Archive_path}" -exportPath "${IPA_path}" -exportOptionsPlist "${ExportOptionsPlist}" >> $Log_path
${ExportOptionsPlist}
指向ReleaseDir文件夹下的ExportOptions.plist文件,可以在文件内填写跟打包相关的配置compileBitcode:不上架App Store,Xcode是否启用Bitcode重新编译,默认为YES。
method:归档类型,包括app-store、ad-hoc、
package、enterprise、development以及developer-id。uploadBitcode:上线App Store是否开启Bitcode,默认为YES。
uploadSymbols:上线App Store,是否开启符号序列化,这是与查crash相关的,默认为YES。
关于更多的xcodebuild指令,可以通过xcodebuild -help
查看。
最后附上两张打包成功的图片
脚本资源👆看这里。另外补充一点,脚本打包前请先在Xcode,General—Targets—Signing中选择好对应的证书。