iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上-b
用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法
相关资料和下载
首先是打包脚本的下载地址,这个是我找到的比较全的一个,里面有很多不同功能的shell脚本,亲测好用,传送门:https://github.com/heyuan110/BashShell?spm=5176.100239.blogcont5028.4.kFcLtR
还有关于fir指令的一些介绍可以去这里查看,传送门:https://github.com/FIRHQ/fir-cli
第一步安装fir-cil
fir-cli 使用 Ruby 构建, 无需编译, 只要安装相应 gem 即可.
$ ruby -v # > 1.9.3
$ gem install fir-cli
常见的安装问题
使用系统自带的 Ruby 安装, 需确保 ruby-dev 已被正确的安装:
$ xcode-select --install
# OS X 系统$ sudo apt-get install ruby-dev # Linux 系统出现
Permission denied相关错误:在命令前加上
sudo出现
Gem::RemoteFetcher::FetchError相关错误:更换 Ruby 的淘宝源(由于国内网络原因, 你懂的), 并升级下系统自带的 gem
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -l
*** CURRENT SOURCES ***https://ruby.taobao.org# 请确保只有 ruby.taobao.org, 如果有其他的源, 请 remove 掉gem update --system
gem install fir-cliMac OS X 10.11 以后的版本, 由于10.11引入了
rootless, 无法直接安装 fir-cli, 有以下三种解决办法:1. 使用 Homebrew 及 RVM 安装 Ruby, 再安装 fir-cli(推荐)
# Install Homebrew:$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"# Install RVM:$ \curl -sSL https://get.rvm.io | bash -s stable --ruby
$ gem install fir-cli2. 指定 fir-cli 中 bin 文件的 PATH
$ export PATH=/usr/local/bin:$PATH;gem install -n /usr/local/bin fir-cli3. 重写 Ruby Gem 的 bindir
$ echo 'gem: --bindir /usr/local/bin' >> ~/.gemrc$ gem install fir-cli
第二步登录fir.im
登录指令非常简单,只需要fir login API Token,这里面的API Token就是你fir帐号下的API Token,然后通过fir me查看你是否登录成功.
首先获取API Token
在终端里登录你的fir
fir login API Token
fir me
如果出现一下类似的情况说明登录成功了.
获取需要上传应用的appID
第三步使用下载下来的shell脚本进行打包上传
先看一下脚本代码:
#! bin/bash#Author:Bruce http://www.heyuan110.com#Update Date:2015.06.23#Use:命令行进入目录直接执行sh Build+DeployToFir.sh即可完成打包发布到fir.imexport LC_ALL=zh_CN.GB2312;export LANG=zh_CN.GB2312###############设置需编译的项目配置名称buildConfig="Release" #编译的方式,有Release,Debug,自定义的AdHoc等########################################################################################################################以下部分为自动生产部分,不需要手动修改######################################################################################################################projectName=`find . -name *.xcodeproj | awk -F "[/.]" '{print $(NF-1)}'` #项目名称projectDir=`pwd` #项目所在目录的绝对路径wwwIPADir=~/Desktop/$projectName-IPA #ipa,icon最后所在的目录绝对路径isWorkSpace=true #判断是用的workspace还是直接project,workspace设置为true,否则设置为falseecho "~~~~~~~~~~~~~~~~~~~开始编译~~~~~~~~~~~~~~~~~~~"if [ -d "$wwwIPADir" ]; then
echo $wwwIPADir
echo "文件目录存在" else
echo "文件目录不存在"
mkdir -pv $wwwIPADir
echo "创建${wwwIPADir}目录成功"fi###############进入项目目录cd $projectDirrm -rf ./build
buildAppToDir=$projectDir/build #编译打包完成后.app文件存放的目录###############获取版本号,bundleIDinfoPlist="$projectName/Info.plist"bundleVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $infoPlist`
bundleIdentifier=`/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" $infoPlist`
bundleBuildVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $infoPlist`###############开始编译appif $isWorkSpace ; then #判断编译方式
echo "开始编译workspace...."
xcodebuild -workspace $projectName.xcworkspace -scheme $projectName -configuration $buildConfig clean build SYMROOT=$buildAppToDirelse
echo "开始编译target...."
xcodebuild -target $projectName -configuration $buildConfig clean build SYMROOT=$buildAppToDirfi#判断编译结果if test $? -eq 0thenecho "~~~~~~~~~~~~~~~~~~~编译成功~~~~~~~~~~~~~~~~~~~"elseecho "~~~~~~~~~~~~~~~~~~~编译失败~~~~~~~~~~~~~~~~~~~"exit 1fi###############开始打包成.ipaipaName=`echo $projectName | tr "[:upper:]" "[:lower:]"` #将项目名转小写findFolderName=`find . -name "$buildConfig-*" -type d |xargs basename` #查找目录appDir=$buildAppToDir/$findFolderName/ #app所在路径echo "开始打包$projectName.app成$projectName.ipa....."xcrun -sdk iphoneos PackageApplication -v $appDir/$projectName.app -o $appDir/$ipaName.ipa #将app打包成ipa###############开始拷贝到目标下载目录#检查文件是否存在if [ -f "$appDir/$ipaName.ipa" ]thenecho "打包$ipaName.ipa成功."elseecho "打包$ipaName.ipa失败."exit 1fipath=$wwwIPADir/$projectName$(date +%Y%m%d%H%M%S).ipa
cp -f -p $appDir/$ipaName.ipa $path #拷贝ipa文件echo "复制$ipaName.ipa到${wwwIPADir}成功"echo "~~~~~~~~~~~~~~~~~~~结束编译,处理成功~~~~~~~~~~~~~~~~~~~"#open $wwwIPADir#####开始上传,如果只需要打ipa包出来不需要上传,可以删除下面的代码export LANG=en_USexport LC_ALL=en_US;echo "正在上传到fir.im...."#####http://fir.im/api/v2/app/appID?token=APIToken,里面的appID是你要上传应用的appID,APIToken是你fir上的APITokenfir p $pathchangelog=`cat $projectDir/README`
curl -X PUT --data "changelog=$changelog" http://fir.im/api/v2/app/appID?token=APITokenecho "\n打包上传更新成功!"rm -rf $buildAppToDirrm -rf $projectDir/tmp
上面对关键代码都做了详细解释,下面只需要执行shell脚本就能打包上传了。
执行shell脚本,打包上传
首先把这个脚本文件放到你的项目工程目录下
然后打开终端,cd到脚本文件在的目录下,执行命名
sh build_deployto_fir.sh
然后看到一下类似的画面说明上传成功:
执行脚本过程中遇到的问题和解决方案
fir: command not found
这个是因为没有安装fir-cil,导致找不到相应的命令行,只需要安装一下就行了,详情见上文写的如何安装fir-cil:http://blog.csdn.net/wang631106979/article/details/52299083#APA
README: No such file or directory
那是因为你的脚本目录下没有README的文件,只需要建一个README的文件就行了,打开终端,cd到当前位置,然后执行下面的命令:
touch README
1
1
ERROR – : Token can not be blank
这个原因是因为你没有登录fir导致的,你执行这个脚本之前应该先登录一下fir,详情请看上文写的登录fir.im:http://blog.csdn.net/wang631106979/article/details/52299083#login
以上就是我对于打包上传到fir上的脚本使用的总结,如果大家有问题可以随时问我,谢谢大家的阅读。
文/作者:W_C__L
博客地址:http://blog.csdn.net/wang631106979/article/details/52299083
感谢分享
iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上-b的更多相关文章
- 使用shell脚本自动打包上传 fir.im
http://blog.csdn.net/wang631106979/article/details/52299083
- IOS 通过脚本自动打包工具 webfrogs/xcode_shell
博文转载至 http://www.2cto.com/kf/201506/408346.html ios 开发通过xcode 打包其实效率不是太高,所以就有人,用shell 写了一个,自动打包,发邮件, ...
- iOS开发进阶
<iOS开发进阶>基本信息作者: 唐巧 出版社:电子工业出版社ISBN:9787121247453上架时间:2014-12-26出版日期:2015 年1月开本:16开页码:268版次:1- ...
- 使用 shell 脚本自动获取发版指标数据
问题背景 大一点的公司都会建立一套规章流程来避免低级错误,例如合入代码前必需经过同行评审:上线前必需提测且通过 QA 验证:全量前必需经过 1%.5%.10%.20%.50% 的灰度过程.尤其是最后一 ...
- iOS开发基础:最新的APP打包上架流程
之前有人留言让我更新部分文章,下面就为大家分享一下iOS的APP打包上架流程: 上传至apple developer 1.1 上传准备工作 更新上架和发布上架不同,在原始版本首次上架的时候就将描述文件 ...
- shell脚本自动清理服务器日志、图片等信息
在做性能测试的时候,linux服务器时常会产生大量数据,如日志信息,图片信息,文件信息等,压测一段时间后,导致服务器磁盘空间暂满而崩溃,每天手动清理比较麻烦, 利用shell脚本自动清理,脚本如下 1 ...
- iOS开发进阶(唐巧)读书笔记(一)
如何提高iOS开发技能 1.阅读博客:https://github.com/tangqiaoboy/iOSBlogCN 40多位iOS开发博主的博客地址 2.读书:每年阅读一本高质量的iOS开发书籍 ...
- CentOS/Linux内存占用大,用Shell脚本自动定时清除/释放内存
CentOS/Linux内存占用大,用Shell脚本自动定时清除/释放内存来自:互联网 时间:2020-03-22 阅读:114以下情况可能造成Linux内存占用过高服务配置存在直接分配错误,或隐性分 ...
- shell 脚本自动插入文件头
vim编辑shell脚本自动插入文件头部信息,将下面的代码写入home目录xia .vimrc 文件即可. shell 文件头: 1 autocmd BufNewFile *.sh exec &quo ...
随机推荐
- 利用SCI做的一个足球答题系统
SCI,异步串行通信接口,内置独立的波特率产生电路和SCI收发器,可以选择发送8或9个数据位(其中一位可以指定为奇或偶校验位). SCI是全双工异步串行通信接口,主要用于MCU与其他计算机或设备之间的 ...
- Socket编程初探
一.什么是Socket? 通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个S ...
- Web前端学习笔记1
Day1. 1.Windows常用快捷键. 快捷键 功能 ctrl+c 复制 ctrl+v 粘贴 ctrl+x 剪切(复制和剪切后都可以粘贴) ctrl+a 全选 ctrl+s 保存 ctrl+tab ...
- Commons Lang - StringUtils
Operations on String that are null safe. IsEmpty/IsBlank - checks if a String is empty (判断字符串是否为空) T ...
- SNMP监控一些常用OID的总结
做网络监控的人对SNMP的协议肯定够很熟悉,下面罗列出一些常见的OID说明,方便大家省去查阅相关资料的麻烦. 系统参数(1.3.6.1.2.1.1) OID 描述 备注 请求方式 .1.3.6.1.2 ...
- C#编写windows服务程序
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
- jquery、js全选反选checkbox
操作checkbox,全选反选 //全选 function checkAll() { $('input[name="TheID"]').attr("checked&quo ...
- iBeacon
iBeacon[1] 是苹果公司2013年9月发布的移动设备用OS(iOS7)上配备的新功能.其工作方式是,配备有 低功耗蓝牙(BLE)通信功能的设备使用BLE技术向周围发送自己特有的ID,接收到该I ...
- python学习day3--python基础
1.python不用声明变量的类型,运行时python自己进行判断 2.尽量不要用“+”去拼接字符串,运行时会每遇到一个“+”就开辟一块内存空间,使用如下方式进行字符串的拼接. msg=''' inf ...
- C#winform MDI子窗体打开时内容显示不全
出现这种情况一般是 打开了多个MDI的子窗体,打开新窗体的时候关闭其他的子窗体就OK了, 具体代码: foreach (Form form in main.MdiChildren) ...