概述

项目在测试阶段需要频繁打包给测试人员,对于这些固定化的操作我们可以使用自动化的手段去解决,将时间放在有意义的事情上。

xcodebuild 是苹果发布自动构建的工具。

Shell脚本打包

xcrun PackageApplication方式在Xcode升级到8.3已就过期了,苹果建议我们使用xcodebuild -exportArchive的方式。

我们平时通过Xcode执行Run命令,生成iPa的中间主要分为两个大的步骤:

  1. xcodebuild archive生成ProjectName..xcarchive文件
  2. xcodebuild -exportArchive将1步骤中的.xcarchive生成ipa安装包

打包脚本编写

创建一个xcodebuild.sh用来编写脚本如下:

#!/bin/bash

ZWProjectName="TestProj"
ZWScheme="TestProj"
ZWConfiguration="Release" ZWDate=`date +%Y%m%d_%H%M`
ZWWorkspace=`pwd`
echo "workspace=$ZWWorkspace-----------------------"
ZWBuildDir="$ZWWorkspace/build" #build路径
ZWBuildTempDir="$ZWBuildDir/temp/$ZWDate" #构建过程中的文件
HCIpaDir="$ZWBuildDir/ipa" #生成ipa文件路径 #-------PackageApplication已经不推荐使用了 warning: PackageApplication is deprecated, use `xcodebuild -exportArchive` instead.----- xcodebuild archive \
-workspace "$ZWWorkspace/$ZWProjectName.xcodeproj/project.xcworkspace" \
-scheme "$ZWScheme" \
-configuration "$ZWConfiguration" \
-archivePath "$ZWBuildTempDir/$ZWProjectName.xcarchive"
#CODE_SIGN_IDENTITY="" #证书
#PROVISIONING_PROFILE="" #描述文件UUID xcodebuild \
-exportArchive \
-archivePath "$ZWBuildTempDir/$ZWProjectName.xcarchive" \
-exportPath "$HCIpaDir/$ZWDate/" \
-exportOptionsPlist "./exportOptionsPlist.plist" \
#CODE_SIGN_IDENTITY="" #证书
#PROVISIONING_PROFILE="" #描述文件UUID

对于证书文件与描述文件我们可以添加,如果这里没有填写,那么会默认按着xcode的当前配置。如果你想在这里配置,可通过下面的方式来获取CODE_SIGN_IDENTITY与PROVISIONING_PROFILE对应的内容。

CODE_SIGN_IDENTITY的获取

在钥匙串找到我们的证书,右键显示简介,可查看对应证书的CODE_SIGN_IDENTITY

PROVISIONING_PROFILE的获取

描述文件UUID的获取,安装的的描述文件在电脑的安装路径/Users/haifeng/Library/MobileDevice/Provisioning Profiles。点击对应的证书预览中就可以看到UUID。

exportOptionsPlist.plist

对于通过xcodebuild -exportArchive方式生成ipa需要一个exportOptionsPlist.plist文件。主要描述了打包的一些信息。这个可能随着xcode版本会变化,我们可以通过第一次使用Xcode手动打包一次生成不止ipa还有一个ExportOptions.plist的文件。我们只需要将这个文件名修改exportOptionsPlist.plist就可以了。

执行脚本自动化打包

Xcode配置

在执行脚本之前确保一下配置

  • 当前编译配置release

  • 由于我这里没有开发者账号密码 我手动配置



    配置完后编译项目不存在报错就可以了,可以继续下面的流程。

将我们编写的xcodebuild.sh与exportOptionsPlist.plist放在Project.xcodeproj的同目录下,终端执行脚本。

这里我在生成ipa的工程中报错,发现不会主动创建ipad文件夹原因导致,这里我展示通过手动在build目录下创建ipa文件夹解决的。

分发

我这里通过蒲公英进行发布。这是在上面的脚本添加了蒲公英官方文档中的分发脚本。

#通过蒲公英提供的上传应用 API,调用系统的 curl 命令来上传应用。
FilePath="$HCIpaDir/$ZWDate/${ZWScheme}.ipa"
UKey="User key" #开发者的用户 Key,在应用管理-API中查看
ApiKey="API key" #是开发者的 API Key,在应用管理-API中查看 注意不是APPKey chmod -R 777 "${FilePath}"
curl \
-F "file=@${FilePath}" \
-F "uKey=${UKey}" \
-F "_api_key=${ApiKey}" \
https://www.pgyer.com/apiv2/app/upload

关于蒲公英uKey与_api_key的获取在应用管理-API中查看 注意不是应用的APPKey

再次执行脚本,终端最终输出如下,就代表上传应用成功。

最新文章

  1. XSL学习笔记4 XSLT模式匹配的语法
  2. 建模算法(七)——排队论模型
  3. android MotionEvent 获取长按压时间长
  4. FZU2127
  5. [安卓] 9、线程、VIEW、消息实现从TCP服务器获取数据动态加载显示
  6. MySQL日期和时间函数
  7. 我的新顶级域名vell001.ml
  8. 从NIB中加载VIEW
  9. asp.net 定时器
  10. ural 1090 In the Army Now
  11. Python 中的装饰器
  12. Tomcat多域名访问
  13. JQuery EasyUI 之 messager基本使用
  14. 监控单个进程占用cpu与内存的使用情况
  15. Python实现随机漫步
  16. Java中的内存泄露的几种可能
  17. php5.6安装Zend Opcache扩展
  18. Shiro中Realm
  19. Web安全 之 X-Frame-Options响应头配置
  20. MySQL主从复制(Replication for Backup)

热门文章

  1. jquery中的ajax请求用法以及参数详情
  2. 牛客 最大值减去最小值小于或等于 num 的子数组数量
  3. CSS Sprite初探之原理、使用
  4. angularJS 绑定操作
  5. PHPExcel导出工作蒲(多表合并)教程+详细代码解读
  6. 四(2)、springcloud之Ribbon负载均衡
  7. 关于js的地址跳转
  8. zabbix--监控的组件和进程介绍
  9. JQuery日记6.7 Javascript异步模型(二)
  10. mysql数据库 --表操作