• iOS开发进阶


    用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-cli
    • Mac 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-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.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 "
    打包上传更新成功!"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

    感谢分享

  • 相关阅读:
    设计模式之命令模式
    设计模式之访问者模式
    ES6入门之Generator函数
    ES6入门之Iterator和for...of
    c# TcpClient简易聊天工具
    Mvc Action可以通过jsonp方式调取
    Webbrowser 在web项目中的使用
    关于java post get请求Demo (请求c#iis接口)
    Jquery 引擎模板 -template详解
    Redis在windows下安装过程
  • 原文地址:https://www.cnblogs.com/isItOk/p/5838331.html
Copyright © 2020-2023  润新知