iOS shell 脚本自动打包

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脚本自动打包

  1. 创建一个 autoArchiveConfiguration.sh 用于每次打包参数变量配置

    • project_name : 工程名字 (若有多个项目,可以根据工程名字创建对应的文件夹,存放 ipa 文件和 clone 代码)
    • version : 版本号
    • build_version : 构建版本号
    • archive_model : 打包环境(主要区分打包测试,还是上传到App Store)
    • loginLine : 打包环境(主要是域名的切换)

    以上就是需要配置的变量,然后脚本文件会根据这些变量,自动打包成对应项目的 ipa 文件

  2. 创建 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_identityprovisioning_profile_specifier 如何配置

    • code_sign_identity的配置

      钥匙串 → 我的证书 → 打开项目对应的证书

      image

      直接复制所圈出的那块区域

    • provisioning_profile_specifier 则是在下载描述文件时,给描述文件所名称,比如 **_AdHoc.mobileprovision,所需要的是 **_AdHoc

    至于 描述文件 UUID 的获取,在 xcodebuild 中有讲解,如何去获取到一个描述文件的 UUID,这里就不做详细的描述了

  3. 创建 uploadFile.sh 文件,通过这个脚本文件,实现将 ipa 文件上传到服务器上去

  4. 创建 autoArchive.sh 文件,通过这个脚本文件,包含以上三个文件,进行脚本运行,然后实现自动打包和上传

在这里着重描述一下,如何去修改 info.plistproject.pbxproj

第一种方式: sed -i -r 修改 info.plistproject.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.plistproject.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_IDENTITYbuildSettings 的元素,而 buildSettings 又是另外一个很长的字符串的元素,在这里我的是 8A91212723A33A290030DB0E, 而8A91212723A33A290030DB0E又是objects的一个元素,这是 Debug 模式下的后去,还有Release,也是同样的方式去获取.
接下来,修改这个元素

/usr/libexec/PlistBuddy -c "set :objects:8A91212723A33A290030DB0E:buildSettings:CODE_SIGN_IDENTITY iPhone Distribution" project.pbxproj的路径

这样就修改完成了,我们需要修改工程中的 CODE_SIGN_IDENTITYCODE_SIGN_IDENTITY[sdk=iphoneos*]DEVELOPMENT_TEAMPROVISIONING_PROFILE_SPECIFIER,别忘了 DebugRelease 环境下都需要修改

通过以上两种方式,都可以对内容进行修改,只不过 PlistBuddy 只能修改 plist 类型的文件。

以上就是关于自动打包的一些介绍

最后附上代码:
自动打包代码

你可能感兴趣的:(iOS shell 脚本自动打包)