fir-cli 1.6.13 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85d5471da637792a85904961eaa9e21db60e65c950430dca032e1ace30bd02e8
4
- data.tar.gz: 397ddd58d70a640c09812654faee8e983e1c391fcb06d9505e63698261cf46d8
3
+ metadata.gz: f8c6da4ee5e12418303fdb4050554e145e04ce70b033e4460f6ca390d1fd9e18
4
+ data.tar.gz: ce18cbd160ac0018f5e04d1c02076281d162107449b6d3bdc5d647d5728aa1d9
5
5
  SHA512:
6
- metadata.gz: 9288592cdbee544d3437fad3b126dce31f9be83985ee0254c96b7bf2873c8cb989b57e076367df70d251c2e7dd44a3bcc44b8f065f26a558162a1a0eefd41729
7
- data.tar.gz: 296664dca956d645210e6a8eddbed4663c1529c6a63837ce996b0f1cca41faf2843b2cf23015e7ff52cd0ce17993aaa12af2adc64bd9a409929bdada88960418
6
+ metadata.gz: df1656d6250cdc7224eb7f4a5f1fe6a83df2cc3a6bd12d73b9d0a9c4582c5139ab575e5911d9077209700225865256a668e122310f77077d30fe0fd2cdf1ce73
7
+ data.tar.gz: f6f70fc679141dad2be96059a31b64542cd1f22f7d98538cedcb5642c72db41b26e873f8e156bf56d4e5c01ccd5d63cdec652ddd9b5d7ec0112a8cc4eb8a599d
data/README.md CHANGED
@@ -14,10 +14,9 @@ fir.im-cli 可以通过指令查看, 上传, iOS/Android 应用.
14
14
 
15
15
 
16
16
  # 重要提示
17
-
17
+ - 已过期 build_ipa 功能, 推荐用户使用 fastlane (fastlane gym)进行打包,生成好 ipa 文件后,再使用 `fir publish` 上传生成的ipa [2019年03月21日]
18
18
  - 由于 CDN 厂商技术原因, 部分老版本用户会出现 579 错误,解决该问题请升级fir-cli 至最新版
19
19
  - 由于部分地区上传时遇到的证书问题, 新版本默认忽略证书校验. 如需打开, 请在命令前加入`UPLOAD_VERIFY_SSL=1`
20
- - 介于在ios 等编译越来越复杂化, fir-cli 自带的 `build_ipa` 编译功能较为简单, 不能很好的满足用户需求, 推荐用户使用 fastlane (fastlane gym)进行打包,生成好 ipa 文件后,再使用 `fir publish` 上传生成的ipa
21
20
  - 现已添加 docker 版本, 具体请见 `Docker 运行 fir-cli ` 说明
22
21
  - 关于因为境外到境内网络不佳的而在上传出现 `stream closed`的问题, 我们已经联系了 CDN 厂商处理, 并将超时时间改为了 300 (秒), 如需修改, 可传入环境变量 `FIR_TIMEOUT=xxx`
23
22
 
@@ -45,7 +44,7 @@ fir.im-cli 可以通过指令查看, 上传, iOS/Android 应用.
45
44
  docker run firhq/fir-cli:latest -e API_TOKEN=XXXX -v ./1.apk:1.apk publish 1.apk
46
45
  ```
47
46
 
48
- ## flow.ci 中的 Docker 使用 fir-cli
47
+ ## 在持续集成工具 flow.ci 中的 Docker 使用 fir-cli
49
48
  ```
50
49
  # 方便之处是: 不需要安装 Ruby 环境只需要安装Docker环境就行把镜像 flowci/fir-cli 拉下来就能跑
51
50
  # 不方便之处是: 不能使用 xcode 或者 gradle 编译代码,只能 publish 编译好的文件
@@ -58,6 +57,7 @@ fir help
58
57
  ```
59
58
 
60
59
  ## 最近更新
60
+ - (1.7.0) 过期了ipa_build 功能, 增加了对 android manifest instant run 的兼容
61
61
  - (1.6.13) 上传图标逻辑修改
62
62
  - (1.6.12) 修复了部分机器没有默认安装 byebug 的问题
63
63
  - (1.6.11) 变化了 ruby gem 仓库地址
data/fir-cli.gemspec CHANGED
@@ -27,13 +27,10 @@ Gem::Specification.new do |spec|
27
27
  /_/ /___/_/ |_| \____/_____/___/
28
28
 
29
29
  ## 更新记录
30
+ - (1.7.0) 过期了ipa_build 功能, 增加了对 android manifest instant run 的兼容
30
31
  - (1.6.13) 上传图标逻辑修改
31
32
  - (1.6.12) 修复了部分机器没有默认安装 byebug 的问题
32
33
  - (1.6.11) 变化了 ruby gem 仓库地址
33
- - (1.6.10) 增加显示release_id 以及 app_id
34
- - (1.6.9) 取消了依赖 cfpropertylist 的具体版本号
35
- - (1.6.8) 取消了远端回调, 改为本地callback
36
- - (1.6.8) fir-cli 也支持了私有部署模式
37
34
  - [fir-cli](https://github.com/firhq/fir-cli) 已经开源
38
35
  - 欢迎 fork, issue 和 pull request
39
36
  )
@@ -50,5 +47,4 @@ Gem::Specification.new do |spec|
50
47
  spec.add_dependency 'CFPropertyList'
51
48
  spec.add_dependency 'api_tools'
52
49
  spec.add_dependency 'byebug'
53
- spec.add_dependency 'xcodeproj'
54
50
  end
@@ -1,241 +1,11 @@
1
- # encoding: utf-8
2
- require 'xcodeproj'
1
+ # frozen_string_literal: true
3
2
 
4
3
  module FIR
5
4
  module BuildIpa
6
-
7
- def build_ipa(*args, options)
8
- logger.warn "fir build ipa 即将过期, 请及时迁移打包部分, 推荐使用 fastlane gym"
9
- initialize_build_common_options(args, options)
10
-
11
- @build_tmp_dir = Dir.mktmpdir
12
- @build_cmd = initialize_ipa_build_cmd(args, options)
13
-
14
- logger_info_and_run_build_command
15
-
16
- output_ipa_and_dsym
17
- publish_build_app(options) if options.publish?
18
- upload_build_dsym_mapping_file if options.mapping?
19
-
20
- logger_info_blank_line
5
+ def build_ipa(*_args, _options)
6
+ logger.error "fir build ipa \b功能已过期, 请及时迁移打包部分, 推荐使用 fastlane gym 生成ipa 后再使用 fir-cli 上传"
21
7
  end
22
8
 
23
9
  private
24
-
25
- def initialize_ipa_build_cmd(args, options)
26
- @configuration = options[:configuration] || 'Release'
27
- @target_name = options[:target]
28
- @scheme_name = options[:scheme]
29
- @profile_name = options[:profile]
30
- @destination = options[:destination]
31
- @export_method = options[:export_method] || 'ad-hoc'
32
- @optionPlistPath = options[:optionPlistPath]
33
-
34
- build_cmd = 'xcodebuild archive -sdk iphoneos'
35
- build_cmd += initialize_xcode_build_path(options)
36
-
37
- build_settings = find_build_setting
38
- @team_id = build_settings['DEVELOPMENT_TEAM']
39
- provisioning_profile_id = build_settings['PROVISIONING_PROFILE']
40
-
41
- check_ios_scheme(@scheme_name)
42
- build_cmd += " -scheme '#{@scheme_name}'" unless @scheme_name.blank?
43
- build_cmd += " -configuration '#{@configuration}'" unless @configuration.blank?
44
-
45
- # build_cmd += " -target '#{@target_name}'" unless @target_name.blank?
46
-
47
- # xcarchive name for build -exportArchive
48
- @xcarchive_name = @scheme_name.nil? ? @target_name : @scheme_name + '.xcarchive'
49
- @xcarchive_path = "#{@build_dir}/fir_build/#{@xcarchive_name}"
50
-
51
- build_cmd += " -archivePath #{@xcarchive_path}"
52
- build_cmd += " PROVISIONING_PROFILE='#{provisioning_profile_id}'"
53
- build_cmd += " #{ipa_custom_settings(args)} 2>&1"
54
- build_cmd
55
- end
56
-
57
- def ipa_custom_settings(args)
58
- custom_settings = split_assignment_array_to_hash(args)
59
-
60
- setting_str = convert_hash_to_assignment_string(custom_settings)
61
- setting_str += " TARGET_BUILD_DIR='#{@build_tmp_dir}'" unless custom_settings['TARGET_BUILD_DIR']
62
- setting_str += " CONFIGURATION_BUILD_DIR='#{@build_tmp_dir}'" unless custom_settings['CONFIGURATION_BUILD_DIR']
63
- setting_str += " DWARF_DSYM_FOLDER_PATH='#{@output_path}'" unless custom_settings['DWARF_DSYM_FOLDER_PATH']
64
- setting_str
65
- end
66
-
67
- def output_ipa_and_dsym
68
- apps = Dir["#{@build_tmp_dir}/*.app"].sort_by(&:size)
69
- # check_no_output_app(apps)
70
-
71
- @temp_ipa = "#{@build_tmp_dir}/#{Time.now.to_i}.ipa"
72
- archive_ipa(apps)
73
-
74
- # check_archived_ipa_is_exist
75
- rename_ipa_and_dsym
76
-
77
- FileUtils.rm_rf(@build_tmp_dir) unless $DEBUG
78
- logger.info 'Build Success'
79
- end
80
-
81
- def archive_ipa(apps)
82
- logger.info 'Archiving......'
83
- logger_info_dividing_line
84
-
85
- option_plist_path = @optionPlistPath || gen_option_plist
86
-
87
- @xcrun_cmd = "#{FIR::Config::XCODE_WRAPPER_PATH} -exportArchive"
88
- @xcrun_cmd += " -archivePath #{@xcarchive_path}"
89
- @xcrun_cmd += " -exportOptionsPlist #{option_plist_path}"
90
- @xcrun_cmd += " -exportPath #{@build_dir}/fir_build"
91
-
92
- puts @xcrun_cmd if $DEBUG
93
- logger.info `#{@xcrun_cmd}`
94
- end
95
-
96
- def check_archived_ipa_is_exist
97
- unless File.exist?(@temp_ipa)
98
- logger.error 'Archive failed'
99
- exit 1
100
- end
101
- end
102
-
103
- def gen_option_plist
104
- plist = "
105
- <plist version=\"1.0\">
106
- <dict>
107
- <key>teamID</key>
108
- <string>#{@team_id}</string>
109
- <key>method</key>
110
- <string>#{@export_method}</string>
111
- <key>uploadSymbols</key>
112
- <true/>
113
- <key>compileBitcode</key>
114
- <false/>
115
- <key>uploadBitcode</key>
116
- <false/>
117
- </dict>
118
- </plist>"
119
-
120
- logger.info 'Generated plist file for exportOptionsPlist argument'
121
- logger.info "{"
122
- logger.info " teamID:#{@team_id}" unless @team_id.nil?
123
- logger.info " method:#{@export_method}"
124
- logger.info " uploadSymbols:true"
125
- logger.info " uploadBitcode:false"
126
- logger.info "}"
127
-
128
- begin
129
- plist_path = "#{@build_dir}/fir_build/exportOptions.plist"
130
- file = File.open(plist_path, "w")
131
- file.write(plist)
132
- plist_path
133
- rescue IOError => e
134
- raise e
135
- ensure
136
- file.close unless file.nil?
137
- end
138
- end
139
-
140
- # Find build setting from xcode project by target and configuration
141
- def find_build_setting
142
- project = Xcodeproj::Project.open(@xc_project)
143
-
144
- # find target
145
- used_target = project.targets[0]
146
- if @target_name
147
- project.targets.each do |target|
148
- if target.name == @target_name
149
- used_target = target
150
- end
151
- end
152
- end
153
-
154
- # find configuration settings
155
- used_target.build_configurations.each do |config|
156
- if config.name == @configuration
157
- return config.build_settings
158
- end
159
- end
160
-
161
- logger.info "configuration '#{@configuration}' not found"
162
- end
163
-
164
- def rename_ipa_and_dsym
165
- @temp_ipa = "#{@build_dir}/fir_build/#{@scheme_name}.ipa"
166
- ipa_info = FIR.ipa_info(@temp_ipa)
167
-
168
- if @name.blank?
169
- @ipa_name = "#{ipa_info[:name]}-#{ipa_info[:version]}-build-#{ipa_info[:build]}"
170
- else
171
- @ipa_name = @name
172
- end
173
-
174
- @builded_app_path = "#{@output_path}/#{@ipa_name}.ipa"
175
- dsym_name = " #{@output_path}/#{ipa_info[:name]}.app.dSYM"
176
-
177
- FileUtils.mv(@temp_ipa, @builded_app_path, force: true)
178
- if File.exist?(dsym_name)
179
- FileUtils.mv(dsym_name, "#{@output_path}/#{@ipa_name}.app.dSYM", force: true)
180
- end
181
- end
182
-
183
- def upload_build_dsym_mapping_file
184
- logger_info_blank_line
185
-
186
- @app_info = ipa_info(@builded_app_path)
187
- @mapping_file = Dir["#{@output_path}/#{@ipa_name}.app.dSYM/Contents/Resources/DWARF/*"].first
188
-
189
- mapping @mapping_file, proj: @proj,
190
- build: @app_info[:build],
191
- version: @app_info[:version],
192
- token: @token
193
- end
194
-
195
- def initialize_xcode_build_path(options)
196
- @xc_workspace = check_and_find_ios_xcworkspace(@build_dir)
197
- @xc_project = check_and_find_ios_xcodeproj(@build_dir)
198
-
199
- if options.workspace?
200
- " -workspace '#{@xc_workspace}'"
201
- else
202
- " -project '#{@xc_project}'"
203
- end
204
- end
205
-
206
- %w(xcodeproj xcworkspace).each do |workplace|
207
- define_method "check_and_find_ios_#{workplace}" do |path|
208
- unless File.exist?(path)
209
- logger.error "The first param BUILD_DIR must be a #{workplace} directory"
210
- exit 1
211
- end
212
-
213
- if File.extname(path) == ".#{workplace}"
214
- build_dir = path
215
- else
216
- build_dir = Dir["#{path}/*.#{workplace}"].first
217
- if build_dir.blank?
218
- logger.error "The #{workplace} file is missing, check the BUILD_DIR"
219
- exit 1
220
- end
221
- end
222
-
223
- build_dir
224
- end
225
- end
226
-
227
- def check_ios_scheme(scheme_name)
228
- if scheme_name.blank?
229
- logger.error 'Must provide a scheme by `-S` option when build a workspace'
230
- exit 1
231
- end
232
- end
233
-
234
- def check_no_output_app(apps)
235
- if apps.length == 0
236
- logger.error 'Builded has no output app, Can not be packaged'
237
- exit 1
238
- end
239
- end
240
10
  end
241
11
  end
@@ -1,7 +1,8 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require_relative './common'
4
4
 
5
+ require 'byebug'
5
6
  module FIR
6
7
  module Parser
7
8
  class Apk
@@ -13,30 +14,34 @@ module FIR
13
14
  end
14
15
 
15
16
  def full_info(options)
16
- if options.fetch(:full_info, false)
17
- basic_info.merge!(icons: tmp_icons)
18
- end
17
+ basic_info[:icons] = tmp_icons if options.fetch(:full_info, false)
19
18
 
20
19
  basic_info
21
20
  end
22
21
 
23
22
  def basic_info
24
23
  @basic_info ||= {
25
- type: 'android',
24
+ type: 'android',
25
+ name: fetch_label,
26
26
  identifier: @apk.manifest.package_name,
27
- name: @apk.label,
28
- build: @apk.manifest.version_code.to_s,
29
- version: @apk.manifest.version_name.to_s
27
+ build: @apk.manifest.version_code.to_s,
28
+ version: @apk.manifest.version_name.to_s
30
29
  }
30
+ @basic_info.reject! { |_k, v| v.nil? }
31
+ @basic_info
31
32
  end
32
33
 
33
34
  # @apk.icon is a hash, { icon_name: icon_binary_data }
34
35
  def tmp_icons
35
- begin
36
- @apk.icon.map { |_, data| generate_tmp_icon(data, :apk) }
37
- rescue
38
- []
39
- end
36
+ @apk.icon.map { |_, data| generate_tmp_icon(data, :apk) }
37
+ rescue StandardError
38
+ []
39
+ end
40
+
41
+ def fetch_label
42
+ @apk.label
43
+ rescue NoMethodError
44
+ nil
40
45
  end
41
46
  end
42
47
  end
data/lib/fir/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module FIR
4
- VERSION = '1.6.13'
4
+ VERSION = '1.7.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fir-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.13
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - NaixSpirit
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-02-25 00:00:00.000000000 Z
12
+ date: 2019-03-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -165,20 +165,6 @@ dependencies:
165
165
  - - ">="
166
166
  - !ruby/object:Gem::Version
167
167
  version: '0'
168
- - !ruby/object:Gem::Dependency
169
- name: xcodeproj
170
- requirement: !ruby/object:Gem::Requirement
171
- requirements:
172
- - - ">="
173
- - !ruby/object:Gem::Version
174
- version: '0'
175
- type: :runtime
176
- prerelease: false
177
- version_requirements: !ruby/object:Gem::Requirement
178
- requirements:
179
- - - ">="
180
- - !ruby/object:Gem::Version
181
- version: '0'
182
168
  description: fir.im command tool, support iOS and Android
183
169
  email:
184
170
  - atpking@gmail.com
@@ -262,10 +248,10 @@ metadata: {}
262
248
  post_install_message: "\n ______________ ________ ____\n /
263
249
  ____/ _/ __ \\ / ____/ / / _/\n / /_ / // /_/ /_____/ / / / /
264
250
  /\n / __/ _/ // _, _/_____/ /___/ /____/ /\n /_/ /___/_/ |_| \\____/_____/___/\n\n
265
- \ ## 更新记录\n - (1.6.13) 上传图标逻辑修改\n - (1.6.12) 修复了部分机器没有默认安装 byebug 的问题\n - (1.6.11)
266
- 变化了 ruby gem 仓库地址\n - (1.6.10) 增加显示release_id 以及 app_id\n - (1.6.9) 取消了依赖 cfpropertylist
267
- 的具体版本号\n - (1.6.8) 取消了远端回调, 改为本地callback\n - (1.6.8) fir-cli 也支持了私有部署模式\n - [fir-cli](https://github.com/firhq/fir-cli)
268
- 已经开源\n - 欢迎 fork, issue 和 pull request\n "
251
+ \ ## 更新记录\n - (1.7.0) 过期了ipa_build 功能, 增加了对 android manifest instant run 的兼容\n
252
+ \ - (1.6.13) 上传图标逻辑修改\n - (1.6.12) 修复了部分机器没有默认安装 byebug 的问题\n - (1.6.11) 变化了 ruby
253
+ gem 仓库地址\n - [fir-cli](https://github.com/firhq/fir-cli) 已经开源\n - 欢迎 fork, issue
254
+ 和 pull request\n "
269
255
  rdoc_options: []
270
256
  require_paths:
271
257
  - lib