文档章节

iOS使用脚本批量打渠道包

 刘星石
发布于 2015/06/19 13:47
字数 1120
阅读 19
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

  最近我们接到了新的需求,需要打出类似xx001-xx100共100个这样的ipa渠道包,不需要签名。(这批ipa包后续会用企业证书签名,不会影响AppStore的)

  这些包所有的功能、内容都是一样的,区别在于不同的包在统计、连接我们服务器时会提供一个不同的字符串标示。

  如果按照常规的打包方式,我们需要不断的修改工程中的值,然后一个个打包……这种毫无技术含量的活怎么能忍受!

  简单思考之后可以想到,我们可以通过使用shell脚本来实现批量打包,渠道信息可以保存在应用的info.plist里面。

  批量处理思路:

  1. 通过改变某个设置或变量,引起工程中info.plist中某个值改变

  2. 使用xcodebuild命令进行打包等处理

  细分的话其实又可以有几种做法:

  1.使用多个target

  这种的优点是可以更深度的定制信息

  缺点是对于我们这种简单需求来说,操作略繁琐,代价较高。

  脚本和下面的2类似,只是变量是target而已。

  2.使用多个buildSetting

  不同的build active architecture 设置不同的User-Defined值

  第一版脚本由我的同事提供,采用的就是这种方式,比上面那种方式稍微简单了点

  思路和步骤如下:

  1. 在Xcode的build设置中,通过拷贝release生成多个build active architecture,分别以渠道名命名

  2. User-Defined属性下增加名为Channel的key,针对不同的build设置不同的渠道值

  3. info.plist中增加Channel键,值引用User-Defined下的设置${Channel}

  (由于方案不够完美,该脚本就不在此贴出了)

  当我看到这种方案的时候其实还是不满足的,因为需要改动工程配置等相关信息,还是很麻烦。

  对于我们来说,打出来的包其实只有info.plist中一个预设的值不一样而已,其实可以不需要那么多的target或者那么多的buildsetting,只需要在打包时,用脚本改一下info.plist中对应的键值即可。

  查找资料发现,命令修改plist值已经有内置的工具PlistBuddy,不过这工具使用时需要使用其绝对路径才能引用到,路径为/usr/libexec/PlistBuddy,工具的更多功能有兴趣的可以自己搜一下。

  调整后,脚本为:

  channels=( 渠道1 渠道2 渠道3 )

  for i in ${channels[@]}

  do

  xcodebuild -project ./你的工程。xcodeproj -scheme 你的scheme名称 -configuration Release archive -archivePath ./$i

  /usr/libexec/PlistBuddy -c "Set :Channel ""$i" ./$i.xcarchive/Products/Applications/*.app/info.plist

  rm -Rf ./$i.ipa

  xcodebuild -exportArchive —exportFormat ipa -archivePath ./archive.xcarchive -exportPath ./$i.ipa -exportWithOriginalSigningIdentity

  rm -Rf ./$i.xcarchive

  done[/code]

  好了,完事具备,可以批量打包了

  打包没有问题,嗯,不过好像很费时间啊……

  回过头来我们再分析下打包流程:

  1. 使用xcodebuild命令根据工程生成xcarchive文件

  2. 使用xcarchive文件导出ipa,此过程中可以签名

  对于一次打包过程来说,期间生成了xx.xcarchive文件,这个文件此时还没有进行任何的签名之类的操作,其实我们可以直接修改这个xcarchive包中对应app文件内的plist,然后再导出成ipa,这样就可以共用一个xcarchive文件,节省下了N多次打包出该文件的时间。

  好了调整一下得到我们的最终版:

  xcodebuild -project ./你的工程。xcodeproj -scheme 你的scheme名称 -configuration Release archive -archivePath ./archive

  channels=( 渠道1 渠道2 渠道3 )

  for i in ${channels[@]}

  do

  /usr/libexec/PlistBuddy -c "Set :Channel ""$i" ./archive.xcarchive/Products/Applications/*.app/info.plist

  rm -Rf ./$i.ipa

  xcodebuild -exportArchive —exportFormat ipa -archivePath ./archive.xcarchive -exportPath ./$i.ipa -exportWithOriginalSigningIdentity

  done

  rm -Rf ./archive.xcarchive[/code]

  需要注意的是

  1. 项目的info.plist文件中要提前设置一个Channel的键,值写上默认渠道。

  2. 工程中相应的证书等还是要配置好,否则可能打包失败

  3. 本文中打出来的ipa都是未签名的,需要签名的话自行搜索下,比较简单

  将这脚本保存为archive文件,丢在工程目录下,使用方式:

  打开终端,执行两行命令

  cd 你的工程目录[/code]

  ./archive[/code]

  好了,打完收工,这样你在工程中,使用

  NSString* channel = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"Channel"];[/code]

  拿到的就是渠道信息了。

本文转载自:http://bbs.it-home.org/thread-46902-1-1.html

粉丝 17
博文 142
码字总数 13945
作品 0
天津
私信 提问
加载中

评论(0)

Dhar/YTTInjectedContentKit

YTTInjectedContentKit iOS壳版本场景下的批量修改类名、属性名、插入混淆代码、修改项目名称的shell脚本 具体的实现和使用方法请参考我的博客文章: iOS使用shell脚本注入混淆内容 iOS使用S...

Dhar
2018/05/04
0
0
IOS自动化打包介绍

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

华宰
2012/01/05
5K
1
Appium+python自动化20-iOS模拟器(iOS Simulator)安装自家APP

前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itools安装。...

osc_y4jbxqkl
2018/02/08
2
0
IOS自动化打包介绍

来自: 百度搜索研发部 http://stblog.baidu-tech.com/?p=1295 摘要 随着苹果手持设备用户的不断增加,ios应用也增长迅速,同时随着iphone被越狱越来越多的app 的渠道也不断增多,为各个渠道...

长平狐
2012/08/13
231
0
Appium Studio 初体验(windows做ios自动化,录制appium脚本)

偶然的机会遇到了这个工具——Appium Studio, 在官网是这么解释的 Get your Appium testing projects going within minutes Install Appium Studio with a single click along with all the......

osc_wa6zijqd
2019/01/08
1
0

没有更多内容

加载失败,请刷新页面

加载更多

【视频】工业互联网在线交流现状、发展、怎么建和规划

PPT介绍目录: 工业互联网的现状 平台介绍 技术路线 人力资源 现实问题 成本中心 工业互联网的发展 两大推动引擎 用户需求的改变 片面与极端 由点到面,点面结合 突破点 现实路径 落脚点 工业...

osc_3ubrwgtm
19分钟前
47
0
单臂-Etrunk-三层交换-路由-DHCP中继-NAT-HTTP服务 实验题

单臂-Etrunk-三层交换-路由-DHCP中继-NAT-HTTP服务 实验题 实验环境 需求描述 pc1、pc2、pc3、pc4可以ping通 虚拟机可以打开网页 了解dhcp中继 了解网络地址转换技术NAT 了解access口跟trunk...

osc_h7zc4umy
19分钟前
24
0
医院防勒索病毒灾备解决方案

医院成勒索病毒重灾区 上述某妇幼保健院并非是个例。近年来,针对医院等医疗系统的网络安全风险一直处于活跃状态且呈现持续上升的态势。医院的业务系统及医学记录、病患资料、预约信息等大量...

osc_gh0ost1g
21分钟前
18
0
2招带你快速获取响应头与发送头

今天带大家用两招快速获取响应头以及发送头。 1、获取请求头 想要获取请求头,就需要会用抓包工具,目前比较普遍的就是fiddler。大家可以在百度搜索下载。首先我们打开fiddler 你会发现左侧这...

osc_3g4j2ghj
23分钟前
20
0
Python Django 数据库基础

对数据库的操作可以直接使用SQL语句,也可以使用图形界面工具。这些一般是DBA(数据库管理人员)做的。开发人员是使用代码链接数据库,对数据库进行操作。 下面进行Python Django框架ORM创建...

osc_itgved4p
25分钟前
26
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部