由于公司项目很多,作为iOS端的开发工程师,在打包和上传App Store过程中超级费时,而且往往会有频繁更改需求重新打包、上传的情况。这些过程让我不胜其烦。之前有听说过自动打包,一直没有时间尝试,此次有了接触的机会并尝试成功。

网上搜索,会出现一堆的自动打包资料。顿时迷失在巨量的信息中。简单统计了下两种方式:

1、.sh脚本

2、FastLane

.sh 脚本是shell脚本,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。(摘自百度百科)。简而安之,shell脚本是包含了一系列命令的文件,当然我们的sh脚本就是用来打包的命令的集合。

FastLane是一种配置iOS和Android自动化Beta部署和发布的最简单的方法之一。它可以简化一些乏味、单调、重复的工作,像截图、代码签名以及发布App。

从对FastLane的描述中看可以知道,FastLane的功能强大,不仅仅是用来自动打包,做为刚刚接触自动打包的我来说,感觉sh脚本更适合本人对自动打包的需求,所以就选取了最基本的shell脚本处理先做了解和尝试,本文就是本人对sh脚本自动打包的尝试和总结。下边就开始此次的自动打包之旅,其中包含踩过的坑和注意事项。

开始shell脚本之前需要了解的:

xcodebuild是一个命令行工具,可以用来对Xcode工程或工作区进行编译、查找、分析、测试等各种操作。我们这里的sh脚本就包含xcodebuild命名,用来做清理工程、打包和导出操作。

用xcodebuild命令的时候一定要注意,自己将要编译的工程是xcodeproj后缀的还是xcworkspace后缀的,调用xcodebuild命令编译时,是不同的调用命令。我们这里就介绍xcodeproj的文件编译和打包。

前提:我们这边测试都是用的testflight,所以一般打包测试都是上传到App Store的,所以这里边的都是以打包上传为目的的。各位如果需要打其他测试包或者企业包都是寻找到对应的文件、配置需要的信息即可。

自动打包需要的准备文件为两个:plist文件和sh文件

plist 文件为配置sh文件中对应命令需要的信息,我这边起名为AppStoreExportOptionsPlist.plist这个文件名字要记得,因为sh文件里边要用到这个文件名,此处配置如下图所示:

method 字段设置为app-store为上传appStore的包。其他还有可选key为 package, ad-hoc, enterprise, development, developer-id,和 mac-application分别对应不同的打包需求(看名字大家都能识别哈)。

provisioningProfiles 字典,下边包含key为包名,value 为配置文件的名称或者是UUID的项。

uploadBitcode 即对应Xcode设置里边的bitcode 对应值,我这里设置为NO,具体情况请自行做设置。

uploadSymbols 对应为上传appStore是否要包含symbols ,默认为YES

当然还有一些key可以自由设置 比如teamID、manifest等。

sh文件就是我们需要的脚本文件,这里集合了需要做的指令集合,包含打包,上传命令行,下边会做详细说明,开始之前请先理解命令行里边需要的变量如下:

Configuration 是环境配置分为Release或者Debug

Project_Name 是工程名称 需要打包的工程名称

AppStoreBundleID 是对应的bundleID

APPSTORECODE_SIGN_IDENTITY 变量是证书对应的证书名,查找方法是打开钥匙串->找到对应的开发者证书名->右键点击简介->常用名称即是这里的变量值

APPSTOREROVISIONING_PROFILE_NAME 变量是配置文件的UUID,找到本地的对应配置文件,一般都是UUID为名称的

AppStoreExportOptionsPlist  是plist 文件名,注意必须跟自己的plist文件名称保持一致

ExportIPAPath 是打包路径,这里就打包到桌面,并以工程名称为文件名创建文件夹

IpaUploadPath 是打包文件夹下的ipa包的路径 因为ExportIPAPath文件夹下会生成多个文件,其中包含ipa包,这个路径是为了上传appStore用的

Account 是上传的AppleID,也就是上传到itunes connect的账号

Password 是AppleID 对应的密码

账号和密码也是用来上传到App Store用的,如果不需要上传到App Store或者上传到其他地方,则做其他处理。

变量名设置好之后,下边开始xCode工程进行清理,打包和导出操作,截图如下:

这三条命令是对应的Xcode的clean、archive和导出ipa包的操作。

都有xcodebuild命令行完成。里边用到上面定义的变量请一一对应。

做到这里把plist文件和sh文件拉到工程同级的文件夹下,打开终端,cd到工程文件夹下,执行 ./xxx.sh文件即可实现打包并导出的过程(xxx是你的sh文件名称),成功后会发现桌面多了个工程名字的文件夹,里边会有我们的ipa包。

如果你还想上传到App Store的话,需要更多的操作,在sh文件中添加以下指令代码:

这几行代码即是调用上传应用Application Loader 工具上传到App Store,当然需要正确的配置账号和密码即可。账号和密码即是上边定义的Account和Password变量。

具体来说,sh脚本运行命令行进行打包和上传操作。省去了人工盯着Xcode进行打包和上传的麻烦。也不需要引入第三方插件,而且也具有很高的可玩性,比如有一定的sh脚本基础的话,可以在里边做选择性的操作,可以在脚本运行的时候选择打包的环境,选择上传的地方比如上传到蒲公英或者fir等操作。

好了,核心代码就这么多了,这样就完成了自动打包并上传到App Store的流程。希望你看完这篇文字有所收获,也希望各位生活工作顺利。

本文摘抄自智车芯官网:http://www.thinkobd.cn/

Xcode 自动打包之旅【本文摘自智车芯官网】的更多相关文章

  1. UITableView性能优化【本文摘自智车芯官网】

    UITableView是个表格视图,可以在表格行空间中添加多个子控件,UITableView继承了UIScrollView,默认状态下可以堆单元格进行滚动,所有的UITableViewControll ...

  2. 在Asp.Net中使用Redis【本文摘自智车芯官网】

    Redis安装 在安装之前需要获取Redis安装包.在这里我们就不详细介绍安装包的获取了.这里Redis-x64-3.2.100.zip安装包为例通过dos命令取安装.通过dos命令找到安装目录. 在 ...

  3. 基于JWT的无状态分布式授权【本文摘自智车芯官网】

    简介 JWT是一种用于HTTP交互双方之间传递安全信息的简洁的.安全的表述性声明规范.JWT作为一个开发的标准,它定义了一种简洁的,自包含的方法用于通信双发之间以JSON形式安全传递.且因为数字证书的 ...

  4. MQTT在平台中的应用【本文摘自智车芯官网】

    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可以把所有联 ...

  5. xcode8.3 shell 自动打包脚本 记录

    题记 xcode升级8.3后发现之前所用的xcode自动打包基本无法使用,因此在网上零碎找到些资料,将之前的脚本简化.此次脚本是基于xcode证书配置进行打包(之前是指定描述文件.相对繁琐).因此代码 ...

  6. xcode8.3 shell 自动打包脚本

    题记 xcode升级8.3后发现之前所用的xcode自动打包基本无法使用,因此在网上零碎找到些资料,将之前的脚本简化.此次脚本是基于xcode证书配置进行打包(之前是指定描述文件.相对繁琐).因此代码 ...

  7. 自动打包iOS项目

    基于Lexrus的博文iOS-makefile,本文对自动打包涉及到的操作步骤以及理论基础进行了适当的补充.     请在阅读本文前先阅读<iOS makefile>.文章地址:http: ...

  8. xcodebuild和xcrun实现自动打包iOS应用程序

    随着苹果手持设备用户的不断增加,ios应用也增长迅速,同时随着iphone被越狱越来越多的app 的渠道也不断增多,为各个渠道打包成了一件费时费力的工作,本文提供一种比较智能的打包方式来减少其带来的各 ...

  9. iOS 本地自动打包工具

    1.为什么要自动打包工具? 每修改一个问题,测试都让你打包一个上传fir , 你要clean -> 编译打包 -> 上传fir -> 通知测试.而且打包速度好慢,太浪费时间了.如果有 ...

随机推荐

  1. 菜鸟笔记 -- Chapter 11 格式化

    我们在String中介绍过它有一个格式化的方法,在其它很多地方,也都能看到格式化的操作,那么这节我们就来认真了解一下Java中的格式化操作. 我们在操作中涉及到的格式化有字符串的格式化和一些其它数据类 ...

  2. MySQL表结构(含数据类型、字段备注注释)导出成Excel

    方法一: 1.用的是Navicat Premium,可以换成任意图形化客户端 SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHAR ...

  3. poj_1091_跳蚤

    Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有N+1个自然数.其中最后一个是M ...

  4. WIN10 vagrant和virtualbox虚拟机和一键搭建lnmp环境配置thinkphp虚拟主机

    版本:win10系统 virtualbox:5.1.26 vagrant :1.9.7 centos 7.0 xshell/git 首先下载好对应版本的软件 配置vagrant和virtualbox ...

  5. JAVA | 学生选课系统

    这里使用JAVA语言编写的简易的学生选课系统,展现的都是这个系统核心代码. 其中有不足欢迎批评和指正! 链接数据库的代码 package connection;//连接数据库student impor ...

  6. css公共类

    /*iOS弹性滚动*/ .scrolling{ position: absolute; width: 100%; height:100%; overflow-x:hidden; overflow-y: ...

  7. ElasticSearch : 基础

    #新建索引以及类型: PUT http://10.18.43.3:9200/test { "settings": { "number_of_shards": 3 ...

  8. python+matplotlib 绘制等高线

    python+matplotlib 绘制等高线 步骤有七: 有一个m*n维的矩阵(data),其元素的值代表高度 构造两个向量:x(1*n)和y(1*m).这两个向量用来构造网格坐标矩阵(网格坐标矩阵 ...

  9. hadoop生态搭建(3节点)-07.hive配置

    # http://archive.apache.org/dist/hive/hive-2.1.1/ # ================================================ ...

  10. stm32+lwip(五):以太网帧发送测试

    我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...