fir-cli 0.2.0 → 0.2.1.a

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a24b1b028bb3fa518bb091e2ab408a7adda62fe8
4
- data.tar.gz: 68f5fa9e8492ee4ebb397f254254fb5b307b82d0
3
+ metadata.gz: ffcd067aa56b7c3d830516808a6654e15fb31327
4
+ data.tar.gz: 394e53f52c3891e1de361f8b79f17836bdb410d1
5
5
  SHA512:
6
- metadata.gz: a5423d1e143c6413724ab28bed45a95377b63fd8f6dafce2468a802e743cb83160f6821a0c71bae3f997500aeb292c7e16be0eda2156124a944d688dfca01b74
7
- data.tar.gz: 8d74ec61bbcc0ed9b2f0d6f271222953c2b699e2667c3c407fc31a6bc88a9cc39b98ec11211c4444e05f5e421d00ec76ab9612ec0c270f215e3982e95fa90d26
6
+ metadata.gz: b6b8bdee57e9e630937732c11f3755b992179709f9721e2f7aba3273793cce4a40d2370fbad8ad8f7591c0e1428276e5f2dd59d4f4ce95745e7cecd8019067d6
7
+ data.tar.gz: a59d788c74321a5b03c204e8896541e7757aa2d60fe8530fe2ecc3708983e97eb7dbe504221d5eb1b5739aa91e7724e5c7ebc8ecfd2f2cf6f46286c214f866e1
data/Gemfile.lock CHANGED
@@ -1,13 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fir-cli (0.2.0)
4
+ fir-cli (0.2.1.a)
5
5
  highline (~> 1.6)
6
6
  lagunitas (= 0.0.1)
7
7
  paint (~> 0.9)
8
8
  pngdefry (= 0.1.1)
9
9
  rest_client (~> 1.8)
10
10
  ruby_apk (~> 0.7)
11
+ rubyzip (~> 0.9.9)
11
12
  thor (~> 0.19)
12
13
  user_config (= 0.0.4)
13
14
 
data/README.md CHANGED
@@ -2,49 +2,94 @@ FIR.im CLI
2
2
  ---
3
3
  > FIR.im CLI 可以通过指令查看、上传、编译应用,同时还集成了第三方网站 [resign.tapbeta.com](http://resign.tapbeta.com) 进行企业签名以方便 inhouse 测试。
4
4
 
5
- ## Changelog
6
- ### FIR-cli 0.1.8
7
- - 支持 ruby 1.9.x
8
- - 规范输出参数选项,支持无颜色信息输出
9
- -`--verbose=v|vv|vvv`:设置输出级别
10
- -`--quiet` 与 `--no-quiet`:设置是否不输出辅助信息
11
- -`--color` `--no-color`:设置输出是否携带颜色信息
12
- - 修复 ipa 应用图标不清晰问题
13
- - 增加切换配置文件功能:使用此功能可以在多个用户中切换使用
5
+ ## 新指令 `build_ipa`
6
+ > 这个指令对 `xcodebuild` 这个原生指令进行了包装,将常用的参数名简化,同时支持全部的自带参数和设置。
7
+
8
+ ### 编译并获得 ipa
9
+
10
+ ```
11
+ $ fir build_ipa path/to/project -o path/to/output
12
+ > 欢迎使用 FIR.im 命令行工具,如需帮助请输入: fir help
13
+ > 正在编译
14
+ > 正在打包 app: demo.app 到 path/to/output/demo.ipa
15
+ > 完成
16
+ ```
14
17
 
15
- ## 使用说明
18
+ ### 复杂一点
19
+ ```
20
+ $ fir build_ipa path/to/workspace -o path/to/output -w -C Release -s allTargets GCC_PREPROCESSOR_DEFINITIONS="FOO=bar"
21
+ ```
22
+
23
+ 该指令在指向的目录中,找到第一个 workspace 文件,对其进行编译。使用 `Release` 设置,编译策略为 `allTargets`,同时设置了预编译参数 `FOO`。
24
+
25
+ ### 一步,从源代码到 FIR.im
26
+ > 只需要多输入一个 -p
27
+
28
+ ```
29
+ $ fir build_ipa path/to/project -p
30
+ > 欢迎使用 FIR.im 命令行工具,如需帮助请输入: fir help
31
+ > 正在编译
32
+ > 正在打包 app: demo.app 到 /var/folders/z7/7_cp03nx0535g0cd6ynfmxt80000gn/T/d20141218-13295-1oe0zlm/demo.ipa
33
+ > 完成
34
+ > 正在发布 demo.ipa
35
+ > 正在解析 ipa 文件...
36
+ > 正在获取 im.fir.demo@FIR.im 的应用信息...
37
+ > 上传应用...
38
+ > 上传应用成功
39
+ > 正在更新 fir 的应用信息...
40
+ > 更新成功
41
+ > 正在更新 fir 的应用版本信息...
42
+ > 更新成功
43
+ > 正在获取 im.fir.demo@FIR.im 的应用信息...
44
+ > http://fir.im/xxxx
45
+ ```
46
+
47
+ ## 使用入门
16
48
  ### 从安装入手
49
+
17
50
  FIR.im CLI 使用 ruby 构建,只要安装相应 ruby gem 即可:
51
+
18
52
  ```shell
19
53
  $ sudo gem install fir-cli
20
54
  ```
55
+
21
56
  安装后,你可以在命令行执行指令
57
+
22
58
  ```shell
23
59
  $ fir
24
60
  > 欢迎使用 FIR.im 命令行工具,如需帮助请输入: fir help
25
61
  Commands:
26
- fir config # 配置全局设置
27
- fir help [COMMAND] # Describe available commands or one specific command
28
- fir info APP_FILE_PATH # 获取应用文件的信息(支持 ipa 文件和 apk 文件)
29
- fir login # 登录
30
- fir publish APP_FILE_PATH # 将应用文件发布至 FIR.im(支持 ipa 文件和 apk 文件)
31
- fir resign IPA_FILE_PATH OUTPUT_PATH # 使用 resign.tapbeta.com 进行企业签名
32
- fir upgrade # 更新 fir-cli 的所有组件
62
+ fir build_ipa PATH [options] [settings] # 编译 ios app 项目
63
+ fir config # 配置全局设置
64
+ fir help [COMMAND] # Describe available commands or one specific command
65
+ fir info APP_FILE_PATH # 获取应用文件的信息(支持 ipa 文件和 apk 文件)
66
+ fir login # 登录
67
+ fir profile # 切换配置文件
68
+ fir publish APP_FILE_PATH # 将应用文件发布至 FIR.im(支持 ipa 文件和 apk 文件)
69
+ fir resign IPA_FILE_PATH OUTPUT_PATH # 使用 resign.tapbeta.com 进行企业签名
70
+ fir upgrade # 更新 fir-cli 的所有组件
71
+ fir version # 当前版本
33
72
  ```
34
73
 
35
74
  ### 发布一个应用
75
+
36
76
  输入下面的指令便可轻松发布应用
77
+
37
78
  ```shell
38
79
  $ fir publish 应用路径
39
80
  ```
81
+
40
82
  这时系统会提示输入用户 token
83
+
41
84
  ```shell
42
85
  > 欢迎使用 FIR.im 命令行工具,如需帮助请输入: fir help
43
86
  > 正在解析 ipa 文件...
44
87
  > 正在获取 im.fir.juo@FIR.im 的应用信息...
45
88
  请输入用户 token:
46
89
  ```
90
+
47
91
  输入用户 token 后,系统会自动上传
92
+
48
93
  ```shell
49
94
  请输入用户 token:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
50
95
  > 上传应用...
@@ -59,12 +104,15 @@ $ fir publish 应用路径
59
104
  用户 token 可在[这里](http://fir.im/user/info)查看
60
105
 
61
106
  ### 方便一点
107
+
62
108
  如果觉得每次都输入用户 token 很不方便,那么可使用登录命令
63
109
 
64
110
  ```shell
65
111
  $ fir login
66
112
  ```
113
+
67
114
  这时系统会提示输入用户 token
115
+
68
116
  ```shell
69
117
  > 欢迎使用 FIR.im 命令行工具,如需帮助请输入: fir help
70
118
  输入你的用户 token:
@@ -78,12 +126,15 @@ $ fir login
78
126
 
79
127
 
80
128
  ### 需要企业签名?
129
+
81
130
  很多开发者需要一个企业签名的应用,来让更多的用户参与到测试中,这种行为并不符合企业证书的使用规范。但是我们还是集成了第三方签名网站 [resign.tapbeta.com](http://resign.tapbeta.com) 来帮助我们的用户更方便的进行测试。
82
131
 
83
132
  ```shell
84
133
  $ fir resign ipa文件路径 输出文件路径
85
134
  ```
135
+
86
136
  这条指令会输出一段风险提示;如果没有设置邮件地址,这里会让你输入邮件地址。输入邮件地址后,便开始进行企业签名了
137
+
87
138
  ```
88
139
  > 欢迎使用 FIR.im 命令行工具,如需帮助请输入: fir help
89
140
  ! resign.tapbeta.com 签名服务风险提示
@@ -103,110 +154,42 @@ $ fir resign ipa文件路径 输出文件路径
103
154
 
104
155
 
105
156
  ### 一步到位
106
- 企业签名后自动发布到 [FIR.im](http://fir.im)
107
- ```shell
108
- $ fir publish ipa文件路径 -r
109
- ```
110
157
 
111
- ### 需要帮助?
112
- 输入以下指令获取全面功能介绍
113
- ```shell
114
- $ fir help
115
- ```
116
- 如果还有疑问随时发邮件至[fir-cli](mailto:fir-cli@fir.im)
117
-
118
- ### 永远使用最新功能
119
- 下面的指令会自动更新 fir-cli 及所有扩展命令至最新状态
120
- ```shell
121
- $ fir upgrade
122
- ```
123
- 随时更新以使用最新功能
124
-
125
- ## 指令文档
126
- ### 帮助
127
- > 以下指令用于获取帮助
128
-
129
- ```shell
130
- fir help
131
- ```
132
-
133
- > 以下指令用于获取更具体的帮助
134
-
135
- - `COMMAND`:具体的一个指令,如`publish`,`update`
136
- ```shell
137
- fir help COMMAND
138
- ```
139
-
140
- ### 切换配置文件
141
- > 以下指令用于切换配置文件,一个用户可以拥有多个配置文件。用户所有全局设置都跟随配置文件的切换而变化
142
-
143
- - `-d` 删除指定配置文件
144
- ```shell
145
- fir profile PROFILE [-d]
146
- ```
147
-
148
- ### 登录
149
- > 以下指令用于登录,登录后系统会从 FIR.im 自动获取你的邮件等信息。已登录用户在[这里](http://fir.im/user/info)可以找到自己的用户 token。
158
+ 企业签名后自动发布到 [FIR.im](http://fir.im)
150
159
 
151
160
  ```shell
152
- fir login
161
+ $ fir publish ipa文件路径 -r
153
162
  ```
154
- ### 设置全局信息
155
- > 以下指令用于全局设置。执行指令时如果不指明相应选项,会读取全局设置。
156
163
 
157
- - `--token=TOKEN`:见`登录`
158
- - `--resign`:见`第三方企业证书签名服务`
159
- - `--email=EMAIL`:见`第三方企业证书签名服务`
160
- - `--verbose=v|vv|vvv`:见`控制输出参数`
161
- - `--quiet` 与 `--no-quiet`:见`控制输出参数`
162
- - `--color` 与 `--no-color`:见`控制输出参数`
163
- ```shell
164
- fir config [options]
165
- ```
164
+ ## 需要帮助?
166
165
 
167
- ### 获取应用文件的信息
168
- > 以下指令用于显示应用信息,支持 ipa 和 apk 文件。
166
+ 输入以下指令获取全面功能介绍
169
167
 
170
- - `--all` 与 `--no-all`:可选,现实全部信息
171
- - `--fir` 与 `--no-fir`:可选,显示托管在 [FIR.im](http://fir.im) 的信息
172
168
  ```shell
173
- fir info APP_FILE_PATH [-a] [-f] [-v v|vv|vvv] [-q]
169
+ $ fir help
174
170
  ```
175
171
 
172
+ 如果还有疑问随时发邮件至[fir-cli](mailto:fir-cli@fir.im)
176
173
 
174
+ ## 永远使用最新功能
177
175
 
178
- ### 第三方企业证书签名服务
179
- > 以下指令使用 [resign.tapbeta.com](http://resign.tapbeta.com) 进行企业证书签名
180
-
181
- - `INPUT_IPA_PATH`:待签名的 ipa 文件路径
182
- - `OUTPUT_IPA_PATH`:签名后的输出文件路径
183
- - `--email=EMAIL`:可选,设置使用签名服务的邮件地址
184
- ```shell
185
- fir resign INTPUT_IPA_FILE OUTPUT_IPA_FILE [--email=EMAIL]
186
- ```
187
-
188
- ### 发布应用至 [FIR.im](http://fir.im)
189
- > 以下指令用于发布应用到 [FIR.im](http://fir.im),支持 ipa 和 apk 文件。
176
+ 下面的指令会自动更新 fir-cli 及所有扩展命令至最新状态
190
177
 
191
- - `--resign` 与 `--no-resign`:可选,此开关控制是否使用第三方企业签名服务,仅支持 ipa 文件
192
- - `--short=SHORT`:可选,指定发布应用的短地址
193
- - `--token=USER_TOKEN`:可选,设定发布应用的帐号,未设置则使用全局设置
194
- - `--changelog=CHANGE_LOG`:可选,设置更新日志
195
178
  ```shell
196
- fir publish APP_FILE_PATH [-r] [-s SHORT] [-t USER_TOKEN] [-c CHANGE_LOG]
179
+ $ fir upgrade
197
180
  ```
198
181
 
199
- ### 更新全部指令
200
- > 以下指令用于更新已安装的 fir-cli 指令集
201
-
202
- ```shell
203
- fir upgrade
204
- ```
182
+ 随时更新以使用最新功能
205
183
 
206
- ### 通用参数
207
- #### 控制输出参数
208
- > 几乎全部 FIR-cli 指令都支持下面的控制输出参数
184
+ ## 更新记录
185
+ ### FIR-cli 0.2.0
186
+ - 新指令 `build_ipa`
209
187
 
210
- - `--verbose=v|vv|vvv`:用于控制输出级别,`v`只输出以`!`开始的内容;`vv`输出以`!`或`>`开始的内容;`vvv`输出全部辅助信息。
211
- - `--quiet` `--no-quiet`:设置是否不输出全部辅助信息
212
- - `--color` 与 `--no-color`:设置输出信息是否包含命令行颜色信息
188
+ ### FIR-cli 0.1.8
189
+ - 支持 ruby 1.9.x
190
+ - 规范输出参数选项,支持无颜色信息输出
191
+ -`--verbose=v|vv|vvv`:设置输出级别
192
+ -`--quiet` 与 `--no-quiet`:设置是否不输出辅助信息
193
+ -`--color` 与 `--no-color`:设置输出是否携带颜色信息
194
+ - 修复 ipa 应用图标不清晰问题
195
+ - 增加切换配置文件功能:使用此功能可以在多个用户中切换使用
data/fir-cli.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
27
27
  s.add_dependency 'thor', '~> 0.19'
28
28
  s.add_dependency 'ruby_apk', '~> 0.7'
29
29
  s.add_dependency 'highline', '~> 1.6'
30
+ s.add_dependency 'rubyzip', '~> 0.9.9'
30
31
 
31
32
  s.add_development_dependency "bundler", "~> 1.7"
32
33
  s.add_development_dependency "rake", "~> 10.0"
data/fir-cli.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'rubygems'
1
2
  require 'uri'
2
3
  require 'json'
3
4
  require 'pathname'
@@ -13,6 +14,10 @@ require 'lagunitas'
13
14
  require 'ruby_apk'
14
15
  require 'highline/import'
15
16
 
17
+ require 'zip'
18
+ require 'zip/zip'
19
+
20
+
16
21
  module Fir
17
22
  class Cli < Thor; end
18
23
  end
@@ -1,5 +1,5 @@
1
1
  module Fir
2
2
  class Cli
3
- VERSION = '0.2.0'
3
+ VERSION = '0.2.1.a'
4
4
  end
5
5
  end
@@ -7,12 +7,12 @@ module Fir
7
7
  token = _prompt_secret('输入你的用户 token:')
8
8
  if token.empty?
9
9
  _puts_require_token
10
- exit 1
10
+ _exit
11
11
  end
12
12
  user = _user token
13
13
  if !user
14
14
  _puts_invalid_token
15
- exit 1
15
+ _exit
16
16
  end
17
17
  if _opt_token && _opt_token != token
18
18
  _puts "> 已登陆用户: #{_opt_token}"
@@ -7,7 +7,7 @@ module Fir
7
7
  def profile(prof)
8
8
  if prof == 'global'
9
9
  _puts '! 不能使用 global 作为配置文件名'
10
- exit 1
10
+ _exit
11
11
  end
12
12
  prof = "#{prof}.yaml"
13
13
  if options[:delete]
@@ -16,7 +16,7 @@ module Fir
16
16
  else
17
17
  if _profile == prof
18
18
  _puts "! #{Paint["你正在使用该配置:#{prof}", :red]}"
19
- exit 1
19
+ _exit
20
20
  end
21
21
  _puts "> 正在使用配置文件:#{_profile}"
22
22
  _puts "> 即将替换为:#{prof}"
@@ -7,20 +7,9 @@ module Fir
7
7
  option :resign, :aliases => '-r', :desc => '是否以企业签名发布 ios 应用', :type => :boolean
8
8
  option :publish, :aliases => '-p', :desc => '编译打包自动发布至 FIR.im', :type => :boolean
9
9
  output_options
10
- def config
11
- if options.length > 0
12
- options.each do |option|
13
- _puts "> #{Paint[option[0].to_s.rjust(10), :blue]} : #{@config[option[0].to_s]} => #{option[1]}"
14
- @config[option[0].to_s] = option[1]
15
- end
16
- if @config['token'] && !_user(@config['token'])
17
- _puts_invalid_token
18
- exit 1
19
- end
20
- @config.save
21
- end
10
+ def config(*args)
11
+ _set_config options.merge _convert_settings *args
22
12
  _puts '> 设置完成,您现在使用的设置是'
23
- @config.save
24
13
  @config.each { |conf| _puts "> #{Paint[conf[0].to_s.rjust(10), :blue]} => #{conf[1]}" }
25
14
  end
26
15
  end
@@ -0,0 +1,54 @@
1
+ # coding: utf-8
2
+ module Fir
3
+ class Cli
4
+ def self.resign_local_options
5
+ option :mobile_provision,
6
+ :aliases => '-m'
7
+ option :sign,
8
+ :aliases => '-s'
9
+ end
10
+ desc 'resign_codesign IPA_FILE_PATH OUTPUT_PATH', '使用 codesign 指令进行签名'
11
+ resign_local_options
12
+ output_options
13
+ def resign_codesign(ipath, opath)
14
+ _chk_os! 'mac'
15
+ _chk_opt! :mobile_provision, :sign
16
+ mp_path, sign_name = _opt :mobile_provision, :sign
17
+ mp_path = _path mp_path
18
+ ipath = _path ipath
19
+ opath = _path opath
20
+ opath += '.ipa' if !opath.to_s.end_with? '.ipa'
21
+ _edit(ipath, opath) do |_d|
22
+ Dir.chdir(_d) do
23
+ apps = Dir['Payload/*.app']
24
+ if apps.length != 1
25
+ _puts "! #{Paint['输入文件不是一个合法的 ipa 文件', :red]}"
26
+ _exit
27
+ end
28
+ app = apps[0]
29
+ _puts "> 替换 mobile provision"
30
+ mp_dest_path = "#{app}/embedded.mobileprovision"
31
+ File.unlink mp_dest_path if File.file? mp_dest_path
32
+ FileUtils.cp mp_path, mp_dest_path
33
+ frmwrk_dir = "#{app}/Frameworks"
34
+ if File.directory? frmwrk_dir
35
+ _puts "> 重签名 dylibs"
36
+ Dir["#{frmwrk_dir}/*.dylib"].each do |_dylib|
37
+ _exec "codesign -f -s \"#{sign_name}\""
38
+ end
39
+ end
40
+ # Dir["Payload/#{app}/*.nib"].each do |_nib|
41
+ # _exec "codesign -f -s \"#{sign_name}\"
42
+ # end
43
+ # cs_dir = "Payload/#{app}/_CodeSignature"
44
+ # cr_dir = "Payload/#{app}/CodeResources"
45
+ # Dir.rmdir cs_dir if File.directory? cs_dir
46
+ # Dir.rmdir cr_dir if File.directory? cr_dir
47
+ _puts "> 重签名 #{app}"
48
+ _exec "codesign -f -s \"#{sign_name}\" \"#{app}\" --deep"
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+
@@ -1,13 +1,13 @@
1
1
  # coding: utf-8
2
2
  module Fir
3
3
  class Cli
4
- def self.resign_options
4
+ def self.resign_tapbeta_options
5
5
  option :email, :aliases => '-e', :desc => '邮件地址'
6
6
  end
7
- desc 'resign IPA_FILE_PATH OUTPUT_PATH', '使用 resign.tapbeta.com 进行企业签名'
8
- resign_options
7
+ desc 'resign_tapbeta IPA_FILE_PATH OUTPUT_PATH', '使用 resign.tapbeta.com 进行企业签名'
8
+ resign_tapbeta_options
9
9
  output_options
10
- def resign(ipath, opath)
10
+ def resign_tapbeta(ipath, opath)
11
11
  _puts "! #{Paint['resign.tapbeta.com 签名服务风险提示', :red]}"
12
12
  _puts '! tapbeta 无法保证签名证书的长期有效性,苹果随时可'
13
13
  _puts '! 能封杀他们的企业账号,所有由这个企业账号签发的证'
@@ -21,15 +21,15 @@ module Fir
21
21
  _puts "! #{Paint['你需要提供邮件地址才能使用 resign.tapbeta.com 的', :red]}"
22
22
  _puts "! #{Paint['签名服务, 请使用', :red]} fir config --email=EMAIL #{Paint['进行设', :red]}"
23
23
  _puts "! #{Paint['置', :red]}"
24
- exit 1
25
- elsif !_is_email @email
24
+ _exit
25
+ elsif !_is_email? @email
26
26
  _puts_invalid_email
27
- exit 1
27
+ _exit
28
28
  end
29
29
  end
30
- if !_is_ipa ipath
30
+ if !_is_ipa? ipath
31
31
  _puts "! #{Paint['只能给以 ipa 为扩展名的文件签名', :red]}"
32
- exit 1
32
+ _exit
33
33
  end
34
34
  _puts '> 正在申请上传令牌...'
35
35
  upload_res = RestClient.post 'http://api.resign.tapbeta.com/public/upload',
@@ -66,10 +66,10 @@ module Fir
66
66
  end
67
67
  if info[:status] == 'error'
68
68
  _puts "! #{Paint['签名失败', :red]}"
69
- exit 1
69
+ _exit
70
70
  elsif info[:status] == 'timeout'
71
71
  _puts "! #{Paint['签名超时', :red]}"
72
- exit 1
72
+ _exit
73
73
  end
74
74
  break if info[:url] != ''
75
75
  sleep 5
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ module Fir
3
+ class Cli
4
+ def self.resign_options
5
+ option :resign_type,
6
+ :desc => '选择使用哪种方式进行重签名,默认使用 tapbeta'
7
+ resign_tapbeta_options
8
+ resign_local_options
9
+ end
10
+ desc 'resign ORIGINAL_IPA OUTPUT_IPA [--resign-type=codesign]', '使用指定类型的签名方式'
11
+ resign_options
12
+ output_options
13
+ def resign(ipath, opath)
14
+ if !options[:resign_type]
15
+ resign_tapbeta ipath, opath
16
+ else
17
+ begin
18
+ method("resign_#{options[:resign_type]}".to_sym).call ipath, opath
19
+ rescue NameError => e
20
+ _puts "! #{Paint["没有 resign_#{options[:resign_type]} 的重签名方式"]}"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
@@ -12,7 +12,7 @@ module Fir
12
12
  resign_options
13
13
  output_options
14
14
  def publish(path)
15
- if _opt_resign && _is_ipa(path)
15
+ if _opt_resign && _is_ipa?(path)
16
16
  tfile = Tempfile.new ["resign-#{SecureRandom.hex}", '.ipa']
17
17
  resign path, tfile.path
18
18
  path = tfile.path
@@ -27,7 +27,7 @@ module Fir
27
27
  if app[:icons] != nil && app[:icons].length > 0
28
28
  icon_path = app[:icons][0][:path]
29
29
 
30
- if _is_ipa path
30
+ if _is_ipa? path
31
31
  _puts '> 转换图标...'
32
32
  Pngdefry.defry icon_path, icon_path
33
33
  end
@@ -67,7 +67,7 @@ module Fir
67
67
 
68
68
  # Get updated app info
69
69
  fir_app = _fir_info app[:identifier]
70
- _puts "> #{_base_path}/#{fir_app[:short]}"
70
+ _puts "> #{_fir_url}/#{fir_app[:short]}"
71
71
  end
72
72
  end
73
73
  end
@@ -13,19 +13,16 @@ module Fir
13
13
  publish_options
14
14
  output_options
15
15
  def build_ipa(path, *args)
16
- if _os != 'mac'
17
- _puts "! #{Paint['不支持在非 mac 系统上编译打包', :red]}"
18
- exit 1
19
- end
16
+ _chk_os! 'mac'
20
17
  settings = _convert_settings *args
21
18
 
22
19
  path = _path(path).to_s
23
- project_dir = (Dir.exist? path) ? path : (File.dirname path)
20
+ project_dir = (File.directory? path) ? path : (File.dirname path)
24
21
 
25
22
  ipa_path = _path(options[:output]).to_s if options[:output]
26
23
  if !ipa_path && !_opt_publish
27
24
  _puts "! #{Paint['如果不发布到 FIR.im,则需要指定 ipa 文件的输出路径', :red]}"
28
- exit 1
25
+ _exit
29
26
  end
30
27
  if !ipa_path
31
28
  Dir.mktmpdir do |_d|
@@ -38,9 +35,9 @@ module Fir
38
35
  _build_ipa project_dir, settings, options,
39
36
  :ipa_path => ipa_path
40
37
  return if !_opt_publish
41
- if Dir.exists? ipa_path
38
+ if File.directory? ipa_path
42
39
  _batch_publish ipa_path
43
- elsif File.exists? ipa_path
40
+ elsif File.file? ipa_path
44
41
  publish ipa_path
45
42
  end
46
43
  end
@@ -73,23 +70,23 @@ module Fir
73
70
  [_setstr, _argstr, _opts]
74
71
  end
75
72
  project = begin
76
- if _is_xcodeproject project_dir
73
+ if _is_xcodeproject? project_dir
77
74
  project_dir
78
- elsif _is_workspace project_dir
75
+ elsif _is_workspace? project_dir
79
76
  opts[:workspace] = true
80
77
  project_dir
81
78
  elsif opts[:workspace]
82
79
  _spaces = Dir["#{project_dir}/*.xcworkspace"]
83
80
  if _spaces.length == 0
84
81
  _puts "! #{Paint['指定目录中找不到 workspace 文件,无法编译', :red]}"
85
- exit 1
82
+ _exit
86
83
  end
87
84
  _spaces[0]
88
85
  else
89
86
  _projs = Dir["#{project_dir}/*.xcodeproj"]
90
87
  if _projs.length == 0
91
88
  _puts "! #{Paint['指定目录中找不到 project 文件,无法编译', :red]}"
92
- exit 1
89
+ _exit
93
90
  else
94
91
  _projs[0]
95
92
  end
@@ -101,7 +98,7 @@ module Fir
101
98
  if opts[:workspace]
102
99
  unless opts[:scheme]
103
100
  _puts "! #{Paint['如果编译 workspace, 则必须指定一个 scheme', :red]}"
104
- exit 1
101
+ _exit
105
102
  end
106
103
  argstr += " -workspace \"#{project}\" -scheme \"#{opts[:scheme]}\""
107
104
  else
@@ -118,17 +115,17 @@ module Fir
118
115
  apps = Dir['*.app']
119
116
  if opts[:ipa_path]
120
117
  ipa_path = opts[:ipa_path]
121
- if Dir.exist? ipa_path
118
+ if File.directory? ipa_path
122
119
  apps.each do |app|
123
120
  _ipa_path = File.join ipa_path, "#{File.basename app, '.app'}.ipa"
124
121
  _zip_ipa File.join(_d, app), _ipa_path
125
122
  end
126
123
  elsif apps.length > 1
127
124
  _puts "! #{Paint['项目编译输出了多个 app,需要指定一个已经存在的目录作为输出目录', :red]}"
128
- exit 1
125
+ _exit
129
126
  elsif apps.length == 0
130
127
  _puts "! #{Paint['项目编译没有输出 app,无法打包 ipa', :red]}"
131
- exit 1
128
+ _exit
132
129
  else
133
130
  ipa_path += '.ipa' unless ipa_path.end_with? '.ipa'
134
131
  _zip_ipa File.join(_d, apps[0]), ipa_path
@@ -143,7 +140,7 @@ module Fir
143
140
  Dir.chdir(_d) do
144
141
  Dir.mkdir "Payload"
145
142
  FileUtils.cp_r app_path, 'Payload'
146
- if File.exist? ipa_path
143
+ if File.file? ipa_path
147
144
  _puts "> 删除已有文件 #{ipa_path}"
148
145
  _exec "rm -r #{ipa_path}"
149
146
  end