iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上

如果移动端访问不佳,可以访问我的个人博客

用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法

相关资料和下载

首先是打包脚本的下载地址,这个是我找到的比较全的一个,里面有很多不同功能的shell脚本,亲测好用,传送门

还有关于fir指令的一些介绍可以去这里查看,传送门

第一步安装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-cli
  • Mac OS X 10.11 以后的版本, 由于10.11引入了 rootless, 无法直接安装 fir-cli, 有以下三种解决办法:

    1. 使用 HomebrewRVM 安装 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-cli

    2. 指定 fir-cli 中 bin 文件的 PATH

    $ export PATH=/usr/local/bin:$PATH;gem install -n /usr/local/bin fir-cli

    3. 重写 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.im

export 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,否则设置为false

echo "~~~~~~~~~~~~~~~~~~~开始编译~~~~~~~~~~~~~~~~~~~"
if [ -d "$wwwIPADir" ]; then
    echo $wwwIPADir
    echo "文件目录存在"
else
    echo "文件目录不存在"
    mkdir -pv $wwwIPADir
    echo "创建${wwwIPADir}目录成功"
fi

###############进入项目目录
cd $projectDir
rm -rf ./build
buildAppToDir=$projectDir/build #编译打包完成后.app文件存放的目录

###############获取版本号,bundleID
infoPlist="$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`

###############开始编译app
if $isWorkSpace ; then  #判断编译方式
    echo  "开始编译workspace...."
    xcodebuild  -workspace $projectName.xcworkspace -scheme $projectName  -configuration $buildConfig clean build SYMROOT=$buildAppToDir
else
    echo  "开始编译target...."
    xcodebuild  -target  $projectName  -configuration $buildConfig clean build SYMROOT=$buildAppToDir
fi
#判断编译结果
if test $? -eq 0
then
echo "~~~~~~~~~~~~~~~~~~~编译成功~~~~~~~~~~~~~~~~~~~"
else
echo "~~~~~~~~~~~~~~~~~~~编译失败~~~~~~~~~~~~~~~~~~~"
exit 1
fi

###############开始打包成.ipa
ipaName=`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" ]
then
echo "打包$ipaName.ipa成功."
else
echo "打包$ipaName.ipa失败."
exit 1
fi

path=$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_US
export LC_ALL=en_US;
echo "正在上传到fir.im...."
#####http://fir.im/api/v2/app/appID?token=APIToken,里面的appID是你要上传应用的appID,APIToken是你fir上的APIToken
fir p $path
changelog=`cat $projectDir/README`
curl -X PUT --data "changelog=$changelog" http://fir.im/api/v2/app/appID?token=APIToken
echo "\n打包上传更新成功!"
rm -rf $buildAppToDir
rm -rf $projectDir/tmp

上面对关键代码都做了详细解释,下面只需要执行shell脚本就能打包上传了。

执行shell脚本,打包上传

  • 首先把这个脚本文件放到你的项目工程目录下
  • 然后打开终端,cd到脚本文件在的目录下,执行命名sh build_deployto_fir.sh

然后看到一下类似的画面说明上传成功:

执行脚本过程中遇到的问题和解决方案

fir: command not found

这个是因为没有安装fir-cil,导致找不到相应的命令行,只需要安装一下就行了,详情见上文写的如何安装fir-cil。

README: No such file or directory

那是因为你的脚本目录下没有README的文件,只需要建一个README的文件就行了,打开终端,cd到当前位置,然后执行下面的命令:

touch README

ERROR – : Token can not be blank

这个原因是因为你没有登录fir导致的,你执行这个脚本之前应该先登录一下fir,详情请看上文写的登录fir.im。

以上就是我对于打包上传到fir上的脚本使用的总结,如果大家有问题可以随时问我,谢谢大家的阅读。

时间: 2024-10-10 20:31:30

iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上的相关文章

iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上-b

用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法 相关资料和下载 首先是打包脚本的下载地址,这个是我找到的比较全的一个,里面有很多不同功能的shell脚本,亲测好用,传送门:https://github.com/heyuan110/BashShell?spm=5176.100239.blogcont5028.4.kFcLtR 还有关于fir指令的一

IOS 通过脚本自动打包工具 webfrogs/xcode_shell

博文转载至 http://www.2cto.com/kf/201506/408346.html ios 开发通过xcode 打包其实效率不是太高,所以就有人,用shell 写了一个,自动打包,发邮件,等一系列便捷的服务.webfrogs/xcode_shell 源码下载地址,下载后请仔细阅读README.md文件,这里详细的告诉了你,webfrogs/xcode_shell使用方法. 如果还是不明白 ,我这就给你写几个简单的例子, 1.首选 将webfrogs/xcode_shell下载下来,并

Shell脚本-----自动备份Mysql数据库

脚本的整体思路 1.定义需要的变量 2.利用for循环备份需要备份的库,并以库名-当天日期.sql命名,并记录相关日志 3.建立备份当天的日期的目录,向备份的Sql文件移动到该目录 4.压缩打包该目录,以节省空间,打包成功后删除该目录 5.备份目录只备份七天的数据库,第八天删除第一天的备份,目录只会存在连续七天的备份文件 6.查找备份目录下的.log日志文件,超过七天的删除 #!/bin/bash mysql_bin=/usr/local/tdoa/mysql/bin/mysqldump use

Shell脚本自动部署(编译)LAMP平台

Shell脚本自动部署(编译)LAMP平台 LAMP是当下非常流行的一套Web架构,我们可以在GNU/Linux下通过其他人打包的程序包来进行安装; 但是在生产环境中,很多时候都需要我们自己定制安装AMP,编译安装LAMP有以下几个优点 根据生产环境灵活定制程序 优化编译参数,提高性能 解决不必要的软件依赖 友情提示:对编译安装有疑问的朋友, 查看我以前写的博客:教你使用rpm.yum.编译等方式安装软件 点击此处获得更好的阅读体验 为什么要用脚本进行部署? 在很多情况下部署LAMP平台并不止一

iOS开发进阶

博客专栏>移动开发专栏>IOS开发进阶 分享到:新浪微博腾讯微博IOS开发进阶 iPhone开发进阶,如果你已经基本熟悉了Objective-c基本语法,你已经熟悉iOS程序开发的基础,那么我们再进一步的学习iOS开发的知识.比如多任务编程,网络,系统方面的原理,内存管理,debug或查找crash的技巧等. 收藏 订阅 最新更新文章 [移动开发] iOS界面-仿网易新闻左侧抽屉式交互 续(添加新闻内容页和评论页手势) 1.介绍有的博友看了上篇博文 iOS界面-仿网易新闻左侧抽屉式交互 ,在微

读<iOS开发进阶>有感

花了两天时间, 零零散散看完了这本书.总的来说, 比较失望吧. 花点时间记录下. 第一次看到这本书, 是在看唐巧大神博客的时候看到的  ---------->  <iOS开发进阶>即将出版 那时候, 就被吸引住了.原因不外乎如下三点: 作者: 唐巧大神写的书, 怎么能错过 内容: 开发进阶, 学习了iOS有一段时间, 确实比较期待这类的书籍 封面: 简约大气, 很喜欢. 然后就一直等出版, 本来说12月底就能出版, 然后一直拖, 当当要到1月20号左右才正式出售, 现在都是预售阶段..

shell脚本自动加黑恶意攻击IP

shell脚本自动加黑恶意攻击IP 系统环境:Centos 6.5 X64 如果我们对所有用户开放了SSH 22端口,那么我们就可以在/var/log/secure文件里查看,这里面全是恶意攻击的IP ,那么我们又该如何拒绝这些IP在下次攻击时直接把他拉黑,封掉呢? 或者这个IP再试图登陆4次或7次我就把他拒绝了,把他这个IP永久的封掉呢?这个时候我们就可以用这下面这个脚本来实现. [[email protected] ssh]# vi /etc/ssh/blocksship #!/bin/ba

让你提前认识软件开发(22):shell脚本中的文件操作

第1部分 重新认识C语言 shell脚本中的文件操作 [文章摘要] 编写shell脚本时,经常会涉及到对文件的操作,比如从文件中读取一行数据.向文件追加一行数据等.完成文件读写操作的方法有很多,了解各种命令下文件操作的执行情况,有助于开发人员在不同使用场景下选择合适的命令. 本文以实际的shell脚本为例,介绍了对文件进行操作的不同方法,为相关开发工作提供了参考. [关键词] shell  文件操作  读写  效率 一.概述 在某些软件项目的需求文档中,要求程序一次性读或写的数据规模较大,可达1

&lt;iOS开发进阶&gt; 干货汇总

之前看完了<iOS开发进阶>, 也做了相应的总结, 详见:读<iOS开发进阶>有感 今天花点时间, 把一些干货汇总下, 然后就可以和这本书say goodbye了. 包括: p85 10.1.3 p96 使用GCD后 p99 后台运行 p131 使用Safari进行调试 p184 收起键盘 p185 设置应用内的系统控制语言 p193 忽略编译警告 p198 给模拟器相册增加图片 10.1.3 不要向已经释放的对象发送消息 有些读者想测试当对象释放时, 其retainCount 是