概述

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

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

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

iOS开发系列-自动化分发测试打包的更多相关文章

  1. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

  2. iOS开发系列--App扩展开发

    概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...

  3. iOS开发系列--通知与消息机制

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...

  4. iOS开发系列--网络开发

    概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...

  5. iOS开发系列

    因为最近面试了一些人,校招.初中级.高级.架构师,各种级别的,发现大家水平差异很大,有的高级的工程师很多问题都回答不上来,所以想梳理下iOS的知识点,写成一个系列,如果时间允许的话,会录制成视频放到网 ...

  6. iOS开发系列--通知与消息机制--转

    来自:http://www.cocoachina.com/ios/20150318/11364.html 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户 ...

  7. iOS开发系列文章(持续更新……)

    iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...

  8. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

  9. iOS开发系列--数据存取

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...

随机推荐

  1. VirtualBox的源码学习

    VMM重要的组件 TRPM (Trap Manager) PGM (Page Manager) REM (Recompiled Execution Manager) EM (Execution Man ...

  2. MySQL数据库(三)—— 表相关操作(二)之约束条件、关联关系、复制表

    表相关操作(二)之约束条件.关联关系.复制表 一.约束条件  1.何为约束 除了数据类型以外额外添加的约束 2.约束条件的作用 为了保证数据的合法性,完整性 3.主要的约束条件 NOT NULL # ...

  3. python实现马赛克拼图!

    python实现马赛克拼图 直接上代码! 代码如下: #!/usr/local/bin/python3#  --*-- coding:utf8 --*-- import getoptimport sy ...

  4. js图片放大境效果

    放大境效果如下图所示,当鼠标放到小图时,就会出现浅黄色的小块,而右边方框也出现了,并且右边方框的内容时根据浅黄色小块的内容变换而变换: 原理: 1,准备2张图,一大一小,如上图所示,小图的盒子div1 ...

  5. swagger2 注解说明 ( @ApiImplicitParams )

    @Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" value="该参数没什么意义,在UI界面上也看到,所以不需要配置&q ...

  6. 使用fastClick.js所产生的一些问题

    开发h5活动页时想到移动端会有300ms的延迟,于是便打算用fastClick.js解决. 页面引入fastClick.js后,滑动H5页面的时候发现谷歌浏览器会报错,如下: Unable to pr ...

  7. 从零开始搭建系统1.1——CentOs安装

    本篇主要是记录安装CentOs的过程,为什么会选择CentOs,没有过多的原因,主要是出于CentOs相对来说安装的人比较多, 以后有问题了方便查资料.本次安装是安装在一台笔记本上,WIN7+Cent ...

  8. linux常用命令-3文件与目录相关命令

    cd .. #返回上一级目录 cd ../.. #返回上两级目录 cd - #返回上次所在目录 cp file1 file2 #将file1复制为file2 cp -a dir1 dir2 #复制一个 ...

  9. BeanUtils.copyProperties用法

    spring的BeanUtils.copyProperties用法 原创 2010年06月03日 13:43:00 标签: spring / struts / 数据库 / 工具 / action 一. ...

  10. nodejs 在MYSQL 数据库中插入和查询数据

    插入前的数据库: 插入后的数据库: 输出结果: demo var mysql = require('mysql'); var connection = mysql.createConnection({ ...