官方工具 fir-cli 使用说明

fir-cli 已经在 github 上开源, 欢迎 fork, issue 和 pull request

使用入门

从安装入手

fir.im-cli 使用 Ruby 构建,只要安装相应 ruby gem 即可:

$ sudo gem install fir-cli

如果是 OS X 系统, 需要提前安装好 osx command line tools:

$ xcode-select --install

如果出现无法安装的现象, 请先更换 Ruby 的淘宝源(由于国内网络原因, 你懂的), 并升级下系统自带的 gem

sudo gem sources --remove https://rubygems.org/  
sudo gem sources -a https://ruby.taobao.org/  
sudo gem sources -l  
*** CURRENT SOURCES ***

https://ruby.taobao.org  
# 请确保只有 ruby.taobao.org, 如果有其他的源, 请 remove 掉

sudo gem update --system  
sudo gem install fir-cli  

注意: 如果你的系统是 mac OSX 10.11 以后的版本, 由于10.11引入了 rootless, 无法直接安装 fir-cli, 有以下三种解决办法:

1. 使用 RVM 安装 Ruby, 再安装 fir-cli(推荐)

# 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;sudo gem install -n /usr/local/bin fir-cli

3. 重写 Ruby Gem 的 bindir

$ echo 'gem: --bindir /usr/local/bin' >> ~/.gemrc
$ sudo gem install fir-cli

安装后,你可以在命令行执行指令

$ fir
Commands:  
  fir build_apk BUILD_DIR                       # Build Android app (alias: `ba`).
  fir build_ipa BUILD_DIR [options] [settings]  # Build iOS app (alias: `bi`).
  fir help                                      # Describe available commands or one specific command (aliases: `h`).
  fir info APP_FILE_PATH                        # Show iOS/Android app info, support ipa/apk file (aliases: `i`).
  fir login                                     # Login fir.im (aliases: `l`).
  fir mapping MAPPING_FILE_PATH                 # Upload app mapping file to BugHD.com (aliases: `m`).
  fir me                                        # Show current user info if user is logined.
  fir publish APP_FILE_PATH                     # Publish iOS/Android app to fir.im, support ipa/apk file (aliases: `p`).
  fir upgrade                                   # Upgrade fir-cli and quit (aliases: `u`).
  fir version                                   # Show fir-cli version number and quit (aliases: `v`).

Options:  
  -T, [--token=TOKEN]              # User's API Token at fir.im
  -L, [--logfile=LOGFILE]          # Path to writable logfile
  -V, [--verbose], [--no-verbose]  # Show verbose
                                   # Default: true
  -q, [--quiet], [--no-quiet]      # Silence commands
  -h, [--help], [--no-help]        # Show this help message and quit


Options:  
  -T, [--token=TOKEN]              # User's API Token at FIR.im
  -L, [--logfile=LOGFILE]          # Path to writable logfile
  -V, [--verbose], [--no-verbose]  # Show verbose
                                   # Default: true
  -q, [--quiet], [--no-quiet]      # Silence commands
  -h, [--help], [--no-help]        # Show this help message and quit

参数说明

  • alias <short command> 意味着可以用 alias 别名来代替该指令, 例如 fir b
  • -T 用户在 fir.im 上的 api_token, publish 需要使用此参数
  • -L 指定 fir-cli 的输出 log, 默认为 STDOUT
  • -V Verbose, 默认为输出所有信息( INFO 和 ERROR), 如果设置 --no-verbose, 则只输出 ERROR 信息
  • -q 静默模式, 默认关闭
  • -h 查看帮助

发布一个应用

输入下面的指令便可轻松发布应用, 支持 ipa 和 apk 文件

$ fir p path/to/application -T YOUR_FIR_TOKEN

如果在此之前, 已经使用 fir login 命令登录过, 则可省略 -T 参数

I, [2015-08-26T10:08:35.447209 #6774]  INFO -- : Publishing app.......  
I, [2015-08-26T10:08:35.447334 #6774]  INFO -- : ✈ -------------------------------------------- ✈  
I, [2015-08-26T10:08:35.514378 #6774]  INFO -- : Fetching xxxx@fir.im uploading info......  
I, [2015-08-26T10:08:35.692616 #6774]  INFO -- : Uploading app......  
I, [2015-08-26T10:08:36.920226 #6774]  INFO -- : Updating devices info......  
I, [2015-08-26T10:08:37.075149 #6774]  INFO -- : ✈ -------------------------------------------- ✈  
I, [2015-08-26T10:08:37.075238 #6774]  INFO -- : Fetch app info from fir.im  
I, [2015-08-26T10:08:37.235071 #6774]  INFO -- : Published succeed: http://fir.im/xxxx  
I, [2015-08-26T10:08:37.235155 #6774]  INFO -- :  

方便一点

如果觉得每次都输入 -T 很不方便, 那么可使用 login 命令

$ fir l

这时系统会提示输入用户 token, 用户 token 可在 这里 查看

Please enter your fir.im API Token:  
I, [2015-08-26T10:10:28.235295 #6833]  INFO -- : Login succeed, previous user's email: xxx@xxx.com  
I, [2015-08-26T10:10:28.245083 #6833]  INFO -- : Login succeed, current  user's email: xxx@xxx.com  
I, [2015-08-26T10:10:28.245152 #6833]  INFO -- :  

编译并获得 ipa

该指令 build_ipaxcodebuild 原生指令进行了封装, 将常用的参数名简化, 支持全部的自带参数及设置, 同时输出符号表 .dSYM 文件.

$ fir build_ipa path/to/project -o path/to/output
I, [2015-08-26T10:11:12.105103 #7167]  INFO -- : Building......  
I, [2015-08-26T10:11:12.105175 #7167]  INFO -- : ✈ -------------------------------------------- ✈  
I, [2015-08-26T10:11:18.500887 #7167]  INFO -- : Build settings from command line:

..........

I, [2015-08-26T10:11:18.535498 #7167]  INFO -- : Build Success  
I, [2015-08-26T10:11:18.535704 #7167]  INFO -- :  

复杂一点

$ fir bi path/to/workspace -o path/to/output -w -C Release -t allTargets GCC_PREPROCESSOR_DEFINITIONS="FOO=bar"

该指令在指向的目录中,找到第一个 workspace 文件,对其进行编译。使用 Release 设置,编译策略为 allTargets,同时设置了预编译参数 FOO

编译用 CocoaPods 做依赖管理的 .ipa包

$ fir bi path/to/workspace -w -S <scheme name>

编译用 Gradle 打包 apk

$ fir ba path/to/project

一步, 从源代码到 fir.im

只需要输入 -p -T

$ fir build_ipa path/to/project -o path/to/output -p -T YOUR_FIR_TOKEN
I, [2015-08-26T10:11:59.687221 #7273]  INFO -- : Building......  
I, [2015-08-26T10:11:59.687301 #7273]  INFO -- : ✈ -------------------------------------------- ✈  
I, [2015-08-26T10:12:00.868774 #7273]  INFO -- : Build settings from command line:

..........

I, [2015-08-26T10:12:00.893819 #7273]  INFO -- : Build Success  
I, [2015-08-26T10:12:00.894051 #7273]  INFO -- :  
I, [2015-08-26T10:12:01.026832 #7273]  INFO -- : Publishing app.......  
I, [2015-08-26T10:12:01.026905 #7273]  INFO -- : ✈ -------------------------------------------- ✈  
I, [2015-08-26T10:12:01.098759 #7273]  INFO -- : Fetching im.fir.OnlyiPad@fir.im uploading info......  
I, [2015-08-26T10:12:01.249832 #7273]  INFO -- : Uploading app......  
I, [2015-08-26T10:12:01.859718 #7273]  INFO -- : Updating devices info......  
I, [2015-08-26T10:12:02.015517 #7273]  INFO -- : ✈ -------------------------------------------- ✈  
I, [2015-08-26T10:12:02.015588 #7273]  INFO -- : Fetch app info from fir.im  
I, [2015-08-26T10:12:02.210391 #7273]  INFO -- : Published succeed: http://fir.im/xxxx  
I, [2015-08-26T10:12:02.210459 #7273]  INFO -- :  
I, [2015-08-26T10:12:02.210520 #7273]  INFO -- :  

上传符号表

有以下三种方式上传符号表至 BugHD.com 所对应的项目, 目前已经支持 dSYM 和 txt 两种格式的符号表文件上传

指定 version 和 build 上传:

$ fir m <mapping file path> -P <bughd project id> -v <app version> -b <app build> -T <your api token>

在 publish 的时候自动上传:

$ fir p <app file path> -m <mapping file path> -P <bughd project id> -T <your api token>

在 build_ipa 的时候自动上传:

$ fir b <project dir> -P <bughd project id> -M -p -T <your api token>

需要帮助?

输入以下指令获取全面功能介绍

$ fir -h
$ fir publish -h

如果还有疑问随时发邮件至 fir-cli

永远使用最新功能

下面的指令会自动更新 fir-cli

$ fir upgrade

随时更新以使用最新功能

提交反馈

使用 github issue 即可

Sarah

fir.im & BugHD 的产品经理 :)

北京