iOS 批量打包--Shell脚本
由于公司有批量打包的需要,只是渠道号不一样,网上搜索一番,大致有两个方式:a) 从源程序一次性打出所有渠道的ipa包,大概的思路就是利用脚本循环执行打包过程,而每次打包前都通过脚本修改项目中存放渠道号的文件为当前循环的最新渠道号,让后逐个打包。b) 提供一个ipa格式的母包 从母包生成其它所有的渠道包,可能你会问:用一个包生成其他的包可行么??
原因是这样的:因为每个渠道只是渠道号发生变化,而其他的内容又不会发生变化,而我们的渠道号又是存储在Info.plist这个文件中的,所以只要改变母包中的Info.plist文件的内容即可,而ipa包又是同zip格式进行压缩,所以基本思路就是通过zip先对母包进行解压,然后改变Info.plist的内容 最后再用zip进行压缩成相应的渠道包即可。
通过从母包打出其他渠道的包这种方法:得到以下好处
i. 降低了rd ,qa的工作量。
ii. 让测试发布程序时的风险得到了控制。
iii. 提高了打包发布工作效率。(几十个包 只需短短的几分钟)。
iv. 提高了自动化。
v. 不依赖mac 以及xcode环境 直接在linux 下即可完成 从母包生成其它包
具体代码如下:(可以用xcode 创建.sh文件)
#可以直接把把编辑好的Script.sh 文件拖到终端上 回车 或者终端输入 ./Script.sh
#遇到权限问题可以执行 chmod 777 Script.sh
#!/bin/sh
CONFIG_ROOT_PATH="/Users/hezhujin/Desktop/"#.ipa母包的路径
cd $CONFIG_ROOT_PATH
sourceipaname="wgc_ios.ipa" #ipa母包的名字
appname="wgc_ios.app" #解压后Payload目录项.app文件名需要根据自己的项目修改
distDir="/Users/hezhujin/Desktop/Qa" #打包后文件存储目录
rm -rdf "$distDir "
mkdir "$distDir"
unzip $sourceipaname #解压母包文件
for ((i=1001;i<1011;i++))
do
cd Payload
cd $appname
targetName="wgc_ios"
/usr/libexec/PlistBuddy -c "set :kChannelNumber ${i}" Info.plist #修改Info.plist文件的kChannelNumber 对应的值,Info.plist中必须先存在这个Key 才能修改
cd ../..
zip -r "${targetName}_${i}.ipa" Payload #打成其他渠道的包
mv "${targetName}_${i}.ipa" $distDir #移动打好的包到目标路径
done
rm -rdf Payload
///////////////////////////////////////////////////////////////////
以下是用数组形式循环指定的渠道号 非递增形式
#!/bin/sh
CONFIG_ROOT_PATH="/Users/hezhujin/Desktop/"
cd $CONFIG_ROOT_PATH
sourceipaname="wgc_ios.ipa"
appname="wgc_ios.app" #加压后Pauload目录项.app文件名需要根据自己的项目修改
distDir="/Users/hezhujin/Desktop/Qa" #打包后文件存储目录
rm -rdf "$distDir "
mkdir "$distDir"
unzip $sourceipaname #解压母包文件
kChannelNumber=("aaa" "bbb" "ccc")
for ((i=0;i<${#kChannelNumber};i++))
do
cd Payload
cd $appname
ipafilename=${kChannelNumber[$i]}
targetName="wgc_ios"
/usr/libexec/PlistBuddy -c "set :kChannelNumber ${kChannelNumber[$i]}" Info.plist
cd ../..
zip -r "${targetName}_${ipafilename}.ipa" Payload #打成其他渠道的包
mv "${targetName}_${ipafilename}.ipa" $distDir
done
rm -rdf Payload
///////////////////////////////////////////////////////////////////
以下是不建议的方法:每次包都是重新编译的方法
#!/bin/sh
# Script.sh
# shell
#
# Created by hezhujin on 15/3/4.
# Copyright (c) 2015年 hezhujin. All rights reserved.
#!/bin/sh
CONFIG_ROOT_PATH="/Users/hezhujin/Desktop/wgc_ios"
cd $CONFIG_ROOT_PATH
#循环数
CHANNELID=("aa" "bb" "cc")
for ((i=0;i<${#CHANNELID};i++))
do
#删除
rm -rf "/Users/hezhujin/Desktop/wgc_ios/build/"
#清除
xcodebuild -target wgc_ios clean
#修改plist
/usr/libexec/PlistBuddy -c "set :CHANNELID ${CHANNELID[$i]}" /Users/hezhujin/Desktop/wgc_ios/wgc_ios/Info.plist
#/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString 1.0.4" /Users/hezhujin/Desktop/wgc_ios/wgc_ios/Info.plist
#打包
xcodebuild -target wgc_ios -configuration Distribution -sdk iphoneos build
#生成ipa
xcrun -sdk iphoneos PackageApplication -v "/Users/hezhujin/Desktop/wgc_ios/build/Release-iphoneos/wgc_ios.app" -o "/Users/hezhujin/Desktop/wgc_ios/wgc_ios_${CHANNELID[$i]}.ipa"
done
iOS 批量打包--Shell脚本的更多相关文章
- Linux定时对日志批量打包Shell脚本及定时任务crontab 详细用法
一.需求背景 因此次项目的生产环境中部署了多套系统,每天会产生大量的日志(数百GB的量),侵占了服务器宝贵的存储资源空间.为了有效缓解服务器存储压力,考虑通过Linux的Shell脚本结合cr ...
- 关于 iOS 批量打包的总结
关于 iOS 批量打包的总结 本文作者: 伯乐在线 - Tsui YuenHong .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 如果你曾经试过做多 target 的项目,到了测试人员要 ...
- java classpath批量设置shell脚本
java classpath批量设置shell脚本 注意:linux bash jar文件之间的分隔符是':' export JAR_HOME=path to directory which ...
- ios批量打包
最近我们接到了新的需求,需要打出类似xx001-xx100共100个这样的ipa渠道包,不需要签名.(这批ipa包后续会用企业证书签名,不会影响AppStore的) 这些包所有的功能.内容都是一样的, ...
- 40、IOS自动打包-Python脚本
第一种:基于编译的打包 编译工程--找到.app文件--新建Payload文件夹--拷贝.app到Payload文件夹--压缩成zip--更改后缀名为ipa--完成! 第二种(有问题,暂时不需要看) ...
- weblogic 反序列化补丁绕过漏洞的一个批量检测shell脚本(CVE-2017-3248 )
~ 以下内容,仅供学习参考 ~ weblogic 反序列化补丁绕过漏洞已经出了两个月了,balabala ~~~ 废话不说,拿到该漏洞的利用工具weblogic.jar,但只能一个个检测ip和端口,效 ...
- iOS开发系列-Shell脚本编译SDK
Library静态库Shell脚本 #!/bin/bash #要build的target名 target_Name="IFlyMSC" #编译模式 Release.Debug bu ...
- iOS开发系列-Shell脚本生成IPA
概述 在公司开发到了测试阶段需要频繁打包交付给测试,看似简单的工作,重复的流程总是感觉不是那么好,我们可以借助苹果提供的编译指令编译项目. 自动化脚本编译打包IPA 常见的iOS项目就是基于xcode ...
- iOS 批量打包
如果你曾经试过做多 target 的项目,到了测试人员要测试包的时候,你就会明白什么叫“生不如死”.虽然 Xcode 打包很方便,但是当你机械重复打 N 次包的时候,就会觉得这纯粹是浪费时间的工作.所 ...
随机推荐
- log4j 使用笔记整理中
Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式. 日志信息的常用的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重 ...
- java_linear list
1.线性表的顺序存储结构,类似ArrayList package collectionsFramework.linearlist; import java.util.Arrays; /** * @Pa ...
- QQ登入(3)QQ空间分享-无需登入
public void myclick2(View v){ //QZone分享, SHARE_TO_QQ_TYPE_DEFAULT 图文,SHARE_TO_QQ_TYPE_IMAGE 纯图 ,SHAR ...
- SQLServer 执行计划
http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html#_label0 http://www.jb51.net/article ...
- 在VS 2015 RTM 版中 提示 未能正确加载 NuGetPackage包
在原来的项目中曾经启用了Nuget在编译时还原包功能.这样就会在 *.sln在平行目录生成 一个.Nuget文件夹, 删除了它,就好了. 我分析原因是, VS 2015 使用的是 NugetP ...
- shell之here文档
http://www.cnblogs.com/xiangzi888/archive/2012/03/24/2415077.html在shell脚本程序中,向一条命令传递输入的一种特殊方法是使用here ...
- SDWebImage使用详解
这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征.使用示范的代码:UITableView使用UIImageView+ ...
- windows中用eclipse开发Android环境搭建SDK安装异常
SDK更新时的“https://dl-ssl.google.com refused”错误 Download interrupted: hostname in certificate didn't ma ...
- html之p标签
p标签定义段落 p元素会自动在其前后创建一些空白,浏览器会自动添加这些空间. 效果图:
- SqlServer数据库正在还原的解决办法
1)管理器不会主动刷新,需要手工刷新一下才能看到最新状态(性能方面的考虑) 2)很少情况下,恢复进程被挂起了.这个时候假设你要恢复并且回到可访问状态,要执行: RESTORE database ...