iOS 自动打包shell脚本
功能
- git 拉取代码
- CocoaPods 更新
- 根据配置,选择证书、修改版本号、构建版本号、修改项目环境配置
- 自动打包
- 导出
ipa
文件,并重新命名ipa
包 - 利用
FTP
上传ipa
文件到服务器上
所需要了解的知识点
- shell脚本语言
- Git
- CocoaPod
- xcodebuild
- PlistBuddy
- FTP
shell 脚本语言
菜鸟教程
需要掌握的知识点:
变量
传递参数
流程控制
文件包含
-
Linux 命令
- 当前路径获取
- 文件是否存在
- 新建文件夹
- 修改文件名称
- sed 命令
- 删除文件/文件夹
Git
-
拉取代码(这里采取的是 http)
git clone -b 分支名 项目代码地址
CocoaPods
这里不做描述
xcodebuild
可以查看 自动打包 xcodebuild
PlistBuddy
可以查看 PlistBuddy
FTP
FTP
是一个用于计算机网络上在客户端和服务器之间进行文件传输的应用层协议。
在这里需要利用 FTP
命令在服务器创建文件夹和上传文件
创建目录文件
# 创建目录
ftp -n<
- host : 服务器地址
- user_name : 账号
- pass_word : 密码
- path : 所需要创建的文件路径,需要注意的是,这里不能多级创建目录,只能在已有的目录下进行创建,不能多级创建
上传
curl -u $user_name:$pass_word -T $ipa_path $ftp_path/
- user_name : 账号
- paas_word : 密码
- ipa_path : ipa 文件路径
- ftp_path : 需要上传到的服务器路径
Mac 安装 ftp 命令
若提示 ftp
命令找不到,则需要安装 ftp
命令,因为在新的 Mac
系统中已经去掉了自带的 telnet
命令和 ftp
命令,所以需要安装 ftp
命令。
在终端中依次执行以下命令:
brew install telnet
brew install inetutils
brew link --overwrite inetutils
如果没有安装 Homebrew
,则安装 Homebrew
Homebrew官网
将以下命令粘贴到终端安装 Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
思路
- 在脚本文件所在的目录下,创建一个
IPADir
目录,然后再根据项目名称创建一个文件夹,再根据打包的时间作为文件夹名创建一个文件夹出来 - 利用
Git
将最新的代码clone
下来,更新CocoaPods
- 根据配置的环境变量、版本号、构建版本号依次修改项目环境(开发环境/测试环境/上架)、修改
info.plist
文件的版本号和构建版本号、修改证书和描述文件 - 打包
- 导出
ipa
文件 - 按照规格修改
ipa
文件名 - 利用
ftp
上传ipa
文件到服务器上
实现shell脚本自动打包
-
创建一个
autoArchiveConfiguration.sh
用于每次打包参数变量配置-
project_name
: 工程名字 (若有多个项目,可以根据工程名字创建对应的文件夹,存放ipa
文件和clone
代码) -
version
: 版本号 -
build_version
: 构建版本号 -
archive_model
: 打包环境(主要区分打包测试,还是上传到App Store) -
loginLine
: 打包环境(主要是域名的切换)
以上就是需要配置的变量,然后脚本文件会根据这些变量,自动打包成对应项目的
ipa
文件 -
-
创建
codeSignProvisiongProfile.sh
文件,顾名思义是用来配置项目证书和描述文件的,如果只有一个项目,则可以不创建这个文件,这里主要是因为多个项目,区分开来-
test_code_sign_identity
: 打包测试证书 -
test_provisioning_profile
: 打包测试描述文件UUID
-
test_development_team
: 打包测试developmentTeam
-
test_provisioning_profile_specifier
: 打包测试描述文件名称 -
dis_code_sign_identity
: 生产证书 -
dis_provisioning_profile
: 生产环境描述文件UUID
-
dis_development_team
: 生产环境development Team
-
dis_provisioning_profile_specifier
: 生产环境描述文件名称 -
branch_name
: 项目所处的分支名称
在这测试证书,使用的是
Ad Hoc
证书,接下主要说下code_sign_identity
、provisioning_profile_specifier
如何配置-
code_sign_identity
的配置钥匙串 → 我的证书 → 打开项目对应的证书
直接复制所圈出的那块区域
provisioning_profile_specifier
则是在下载描述文件时,给描述文件所名称,比如**_AdHoc.mobileprovision
,所需要的是**_AdHoc
至于 描述文件
UUID
的获取,在 xcodebuild 中有讲解,如何去获取到一个描述文件的UUID
,这里就不做详细的描述了 -
创建
uploadFile.sh
文件,通过这个脚本文件,实现将ipa
文件上传到服务器上去创建
autoArchive.sh
文件,通过这个脚本文件,包含以上三个文件,进行脚本运行,然后实现自动打包和上传
在这里着重描述一下,如何去修改 info.plist
、project.pbxproj
第一种方式: sed -i -r 修改 info.plist
、 project.pbxproj
文件
我们可以通过 sed -i -r
的命令方式对内容进行修改,-i
代表着修改文件内容,-r
代表着可以通过正则表达式去配置到我们需要修改的内容,格式为:
sed -i -r "s/需要配置的正则表达式/需要替换的内容/g" 文件路径
举个例子,在这里,需要修改 Appdelegate.m
中的环境配置变量
# [ 需要转义,$ 在正则表达式里面是代表尾部,而在 shell 中表示取值,所以也需要转义
sed -i -r "s/\[GYHSLoginManager shareInstance\].loginLine.*\$/[GYHSLoginManager shareInstance].loginLine = $loginLine;/g" $appdelegate_path;
我们可以通过这个方式,对我们所需要修改的变量进行修改,但是每次执行完成后,都会在所在的文件夹中会自动生成对应的 -r
文件,这个文件我们不需要,所以要进行删除操作
# 删除 AppDelegate-r 文件
rm -rf $appdelegate_path-r
第二种方式:PlistBuddy 修改 info.plist
、 project.pbxproj
文件
其实 project.pbxproj
文件,也是一种plist
文件,所以我们完全可以使用 PlistBuddy
来修改
比如我们需要修改版本号
# 修改版本号
/usr/libexec/PlistBuddy -c "set CFBundleShortVersionString 版本号" info.plist的路径
修改打包证书,也就是修改 project.pbxproj
文件的内容.
我们先打开 project.pbxproj
文件,然后搜索 CODE_SIGN_IDENTITY
,如果搜索不到,在工程配置中将证书配置取消自动配置,并且进行一次手动配置证书和描述文件操作,然后再重新搜索 CODE_SIGN_IDENTITY
。就会发现 CODE_SIGN_IDENTITY
是 buildSettings
的元素,而 buildSettings
又是另外一个很长的字符串的元素,在这里我的是 8A91212723A33A290030DB0E
, 而8A91212723A33A290030DB0E
又是objects
的一个元素,这是 Debug
模式下的后去,还有Release
,也是同样的方式去获取.
接下来,修改这个元素
/usr/libexec/PlistBuddy -c "set :objects:8A91212723A33A290030DB0E:buildSettings:CODE_SIGN_IDENTITY iPhone Distribution" project.pbxproj的路径
这样就修改完成了,我们需要修改工程中的 CODE_SIGN_IDENTITY
、CODE_SIGN_IDENTITY[sdk=iphoneos*]
、DEVELOPMENT_TEAM
、PROVISIONING_PROFILE_SPECIFIER
,别忘了 Debug
和 Release
环境下都需要修改
通过以上两种方式,都可以对内容进行修改,只不过 PlistBuddy
只能修改 plist
类型的文件。
以上就是关于自动打包的一些介绍
最后附上代码:
自动打包代码