fir-cli 1.1.5 → 1.1.7
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 +4 -4
- data/.codeclimate.yml +8 -0
- data/.gitignore +1 -0
- data/CHANGELOG +10 -0
- data/README.md +43 -11
- data/Rakefile +3 -3
- data/fir-cli.gemspec +7 -3
- data/lib/fir/api.yml +11 -5
- data/lib/fir/cli.rb +39 -8
- data/lib/fir/patches/concern.rb +144 -0
- data/lib/fir/patches/native_patch.rb +19 -0
- data/lib/fir/patches.rb +1 -1
- data/lib/fir/util/build.rb +101 -60
- data/lib/fir/util/config.rb +35 -0
- data/lib/fir/util/http.rb +49 -0
- data/lib/fir/util/info.rb +6 -3
- data/lib/fir/util/login.rb +1 -0
- data/lib/fir/util/mapping.rb +65 -0
- data/lib/fir/util/me.rb +7 -6
- data/lib/fir/util/parser.rb +157 -0
- data/lib/fir/util/publish.rb +83 -64
- data/lib/fir/util.rb +34 -12
- data/lib/fir/version.rb +1 -1
- data/lib/fir.rb +0 -78
- data/test/build_ipa_test.rb +9 -0
- data/test/cases/test_apk.apk +0 -0
- data/test/cases/test_apk_txt +1 -0
- data/test/cases/test_ipa_dsym +0 -0
- data/test/info_test.rb +39 -0
- data/test/login_test.rb +12 -0
- data/test/mapping_test.rb +15 -0
- data/test/me_test.rb +17 -0
- data/test/publish_test.rb +14 -0
- data/test/test_helper.rb +49 -0
- metadata +48 -9
- data/lib/fir/patches/bin/pngcrush +0 -0
- data/lib/fir/patches/parser_patch.rb +0 -169
- data/test/fir_cli_test.rb +0 -88
data/lib/fir/util/publish.rb
CHANGED
@@ -4,110 +4,129 @@ module FIR
|
|
4
4
|
module Publish
|
5
5
|
|
6
6
|
def publish *args, options
|
7
|
-
file_path = File.absolute_path(args.first.to_s)
|
8
|
-
token = options[:token] || current_token
|
9
|
-
changelog = options[:changelog].to_s
|
7
|
+
@file_path = File.absolute_path(args.first.to_s)
|
8
|
+
@token = options[:token] || current_token
|
9
|
+
@changelog = options[:changelog].to_s
|
10
|
+
@short = options[:short].to_s
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
check_file_exist @file_path
|
13
|
+
check_supported_file @file_path
|
14
|
+
check_token_cannot_be_blank @token
|
15
|
+
fetch_user_info @token
|
14
16
|
|
15
17
|
logger.info "Publishing app......."
|
16
18
|
logger_info_dividing_line
|
17
19
|
|
18
|
-
file_type = File.extname(file_path).delete(".")
|
19
|
-
@app_info = send("#{file_type}_info", file_path, true)
|
20
|
+
file_type = File.extname(@file_path).delete(".")
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
@app_info = send("#{file_type}_info", @file_path, true)
|
23
|
+
@uploading_info = fetch_uploading_info
|
24
|
+
@app_id = @uploading_info[:id]
|
24
25
|
|
25
|
-
|
26
|
-
icon_cert = uploading_info[:cert][:icon]
|
27
|
-
binary_cert = uploading_info[:cert][:binary]
|
26
|
+
upload_app
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
uncrushed_icon_path = convert_icon(large_icon_path)
|
32
|
-
upload_app_icon(icon_cert, uncrushed_icon_path)
|
33
|
-
end
|
28
|
+
logger_info_dividing_line
|
29
|
+
logger.info "Published succeed: #{fir_api[:domain]}/#{fetch_app_info[:short]}"
|
34
30
|
|
35
|
-
|
31
|
+
if options[:mappingfile] && options[:proj]
|
32
|
+
logger_info_blank_line
|
36
33
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
34
|
+
mapping options[:mappingfile], proj: options[:proj],
|
35
|
+
build: @app_info[:build],
|
36
|
+
version: @app_info[:version],
|
37
|
+
token: @token
|
38
|
+
end
|
43
39
|
|
44
|
-
|
45
|
-
|
46
|
-
end
|
40
|
+
logger_info_blank_line
|
41
|
+
end
|
47
42
|
|
48
|
-
|
43
|
+
private
|
44
|
+
|
45
|
+
def upload_app
|
46
|
+
@icon_cert = @uploading_info[:cert][:icon]
|
47
|
+
@binary_cert = @uploading_info[:cert][:binary]
|
49
48
|
|
50
|
-
|
51
|
-
|
49
|
+
upload_app_icon
|
50
|
+
upload_app_binary
|
51
|
+
upload_device_info
|
52
|
+
update_app_info
|
52
53
|
end
|
53
|
-
end
|
54
54
|
|
55
|
-
|
55
|
+
def upload_app_icon
|
56
|
+
unless @app_info[:icons].blank?
|
57
|
+
logger.info "Uploading app's icon......"
|
56
58
|
|
57
|
-
|
58
|
-
logger.info "Converting app's icon......"
|
59
|
-
output_path = Tempfile.new("uncrushed_icon.png").path
|
59
|
+
icon_path = @app_info[:icons].max_by { |f| File.size(f) }
|
60
60
|
|
61
|
-
|
61
|
+
hash = {
|
62
|
+
key: @icon_cert[:key],
|
63
|
+
token: @icon_cert[:token],
|
64
|
+
file: File.new(icon_path, "rb")
|
65
|
+
}
|
62
66
|
|
63
|
-
|
64
|
-
end
|
67
|
+
uploaded_info = post(@icon_cert[:upload_url], hash)
|
65
68
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
file: File.new(icon_path, "rb")
|
72
|
-
}
|
73
|
-
post icon_cert[:upload_url], hash
|
69
|
+
unless uploaded_info[:is_completed]
|
70
|
+
logger.error "Upload app icon failed"
|
71
|
+
exit 1
|
72
|
+
end
|
73
|
+
end
|
74
74
|
end
|
75
75
|
|
76
|
-
def upload_app_binary
|
76
|
+
def upload_app_binary
|
77
77
|
logger.info "Uploading app......"
|
78
|
+
|
78
79
|
hash = {
|
79
|
-
key: binary_cert[:key],
|
80
|
-
token: binary_cert[:token],
|
81
|
-
file: File.new(file_path, "rb"),
|
80
|
+
key: @binary_cert[:key],
|
81
|
+
token: @binary_cert[:token],
|
82
|
+
file: File.new(@file_path, "rb"),
|
82
83
|
# Custom variables
|
83
84
|
"x:name" => @app_info[:display_name] || @app_info[:name],
|
84
85
|
"x:build" => @app_info[:build],
|
85
86
|
"x:version" => @app_info[:version],
|
86
|
-
"x:changelog" => changelog,
|
87
|
+
"x:changelog" => @changelog,
|
87
88
|
"x:release_type" => @app_info[:release_type],
|
88
89
|
}
|
89
|
-
|
90
|
+
|
91
|
+
uploaded_info = post(@binary_cert[:upload_url], hash)
|
92
|
+
|
93
|
+
unless uploaded_info[:is_completed]
|
94
|
+
logger.error "Upload app binary failed"
|
95
|
+
exit 1
|
96
|
+
end
|
90
97
|
end
|
91
98
|
|
92
|
-
def upload_device_info
|
93
|
-
|
94
|
-
|
99
|
+
def upload_device_info
|
100
|
+
unless @app_info[:devices].blank?
|
101
|
+
logger.info "Updating devices info......"
|
102
|
+
|
103
|
+
post fir_api[:udids_url], key: @binary_cert[:key],
|
104
|
+
udids: @app_info[:devices].join(","),
|
105
|
+
api_token: @token
|
106
|
+
end
|
95
107
|
end
|
96
108
|
|
97
|
-
def update_app_info
|
98
|
-
|
99
|
-
|
109
|
+
def update_app_info
|
110
|
+
unless @short.blank?
|
111
|
+
logger.info "Updating app info......"
|
112
|
+
|
113
|
+
patch fir_api[:app_url] + "/#{@app_id}", short: @short,
|
114
|
+
api_token: @token
|
115
|
+
end
|
100
116
|
end
|
101
117
|
|
102
|
-
def fetch_uploading_info
|
118
|
+
def fetch_uploading_info
|
103
119
|
logger.info "Fetching #{@app_info[:identifier]}@FIR.im uploading info......"
|
104
120
|
|
105
|
-
post
|
121
|
+
post fir_api[:app_url], type: @app_info[:type],
|
122
|
+
bundle_id: @app_info[:identifier],
|
123
|
+
api_token: @token
|
106
124
|
end
|
107
125
|
|
108
|
-
def fetch_app_info
|
126
|
+
def fetch_app_info
|
109
127
|
logger.info "Fetch app info from FIR.im"
|
110
|
-
|
128
|
+
|
129
|
+
get fir_api[:app_url] + "/#{@app_id}", api_token: @token
|
111
130
|
end
|
112
131
|
end
|
113
132
|
end
|
data/lib/fir/util.rb
CHANGED
@@ -1,32 +1,50 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
+
require_relative './util/http'
|
4
|
+
require_relative './util/config'
|
5
|
+
require_relative './util/parser'
|
3
6
|
require_relative './util/login'
|
4
7
|
require_relative './util/me'
|
5
8
|
require_relative './util/info'
|
6
9
|
require_relative './util/build'
|
7
10
|
require_relative './util/publish'
|
11
|
+
require_relative './util/mapping'
|
8
12
|
|
9
13
|
module FIR
|
10
14
|
module Util
|
11
|
-
|
12
|
-
def self.included base
|
13
|
-
base.extend ClassMethods
|
14
|
-
base.extend Login
|
15
|
-
base.extend Me
|
16
|
-
base.extend Info
|
17
|
-
base.extend Build
|
18
|
-
base.extend Publish
|
19
|
-
end
|
15
|
+
extend ActiveSupport::Concern
|
20
16
|
|
21
17
|
module ClassMethods
|
18
|
+
include FIR::Http
|
19
|
+
include FIR::Config
|
20
|
+
include FIR::Login
|
21
|
+
include FIR::Me
|
22
|
+
include FIR::Info
|
23
|
+
include FIR::Build
|
24
|
+
include FIR::Publish
|
25
|
+
include FIR::Mapping
|
26
|
+
|
27
|
+
attr_accessor :logger
|
22
28
|
|
23
29
|
def fetch_user_info token
|
24
|
-
get
|
30
|
+
get fir_api[:user_url], api_token: token
|
31
|
+
end
|
32
|
+
|
33
|
+
def fetch_user_uuid token
|
34
|
+
user_info = fetch_user_info(token)
|
35
|
+
user_info[:uuid]
|
36
|
+
end
|
37
|
+
|
38
|
+
def check_file_exist path
|
39
|
+
unless File.file?(path)
|
40
|
+
logger.error "File does not exist"
|
41
|
+
exit 1
|
42
|
+
end
|
25
43
|
end
|
26
44
|
|
27
45
|
def check_supported_file path
|
28
|
-
unless
|
29
|
-
logger.error "
|
46
|
+
unless APP_FILE_TYPE.include?(File.extname(path))
|
47
|
+
logger.error "Unsupported file type"
|
30
48
|
exit 1
|
31
49
|
end
|
32
50
|
end
|
@@ -45,6 +63,10 @@ module FIR
|
|
45
63
|
end
|
46
64
|
end
|
47
65
|
|
66
|
+
def logger_info_blank_line
|
67
|
+
logger.info ""
|
68
|
+
end
|
69
|
+
|
48
70
|
def logger_info_dividing_line
|
49
71
|
logger.info "✈ -------------------------------------------- ✈"
|
50
72
|
end
|
data/lib/fir/version.rb
CHANGED
data/lib/fir.rb
CHANGED
@@ -23,83 +23,5 @@ require 'fir/version'
|
|
23
23
|
require 'fir/cli'
|
24
24
|
|
25
25
|
module FIR
|
26
|
-
CONFIG_PATH = "#{ENV['HOME']}/.fir-cli"
|
27
|
-
API_YML_PATH = "#{File.dirname(__FILE__)}/fir/api.yml"
|
28
|
-
APP_FILE_TYPE = %w(.ipa .apk).freeze
|
29
|
-
|
30
26
|
include Util
|
31
|
-
|
32
|
-
class << self
|
33
|
-
attr_accessor :logger, :api, :config
|
34
|
-
|
35
|
-
def api
|
36
|
-
@api ||= YAML.load_file(API_YML_PATH).symbolize_keys
|
37
|
-
end
|
38
|
-
|
39
|
-
def config
|
40
|
-
@config ||= YAML.load_file(CONFIG_PATH).symbolize_keys if File.exist?(CONFIG_PATH)
|
41
|
-
end
|
42
|
-
|
43
|
-
def reload_config
|
44
|
-
@config = YAML.load_file(CONFIG_PATH).symbolize_keys
|
45
|
-
end
|
46
|
-
|
47
|
-
def write_config hash
|
48
|
-
File.open(CONFIG_PATH, 'w+') { |f| f << YAML.dump(hash) }
|
49
|
-
end
|
50
|
-
|
51
|
-
def current_token
|
52
|
-
@token ||= config[:token] if config
|
53
|
-
end
|
54
|
-
|
55
|
-
def get url, params = {}
|
56
|
-
begin
|
57
|
-
res = RestClient.get(url, default_headers.merge(params: params))
|
58
|
-
rescue => e
|
59
|
-
logger.error "#{e.class}\n#{e.message}"
|
60
|
-
exit 1
|
61
|
-
end
|
62
|
-
|
63
|
-
JSON.parse(res.body.force_encoding("UTF-8"), symbolize_names: true)
|
64
|
-
end
|
65
|
-
|
66
|
-
def post url, query
|
67
|
-
begin
|
68
|
-
res = RestClient.post(url, query, default_headers)
|
69
|
-
rescue => e
|
70
|
-
logger.error "#{e.class}\n#{e.message}"
|
71
|
-
exit 1
|
72
|
-
end
|
73
|
-
|
74
|
-
JSON.parse(res.body.force_encoding("UTF-8"), symbolize_names: true)
|
75
|
-
end
|
76
|
-
|
77
|
-
def patch url, query
|
78
|
-
begin
|
79
|
-
res = RestClient.patch(url, query, default_headers)
|
80
|
-
rescue => e
|
81
|
-
logger.error "#{e.class}\n#{e.message}"
|
82
|
-
exit 1
|
83
|
-
end
|
84
|
-
|
85
|
-
JSON.parse(res.body.force_encoding("UTF-8"), symbolize_names: true)
|
86
|
-
end
|
87
|
-
|
88
|
-
def put url, query
|
89
|
-
begin
|
90
|
-
res = RestClient.put(url, query, default_headers)
|
91
|
-
rescue => e
|
92
|
-
logger.error "#{e.class}\n#{e.message}"
|
93
|
-
exit 1
|
94
|
-
end
|
95
|
-
|
96
|
-
JSON.parse(res.body.force_encoding("UTF-8"), symbolize_names: true)
|
97
|
-
end
|
98
|
-
|
99
|
-
def default_headers
|
100
|
-
{ content_type: :json, source: 'fir-cli', cli_version: FIR::VERSION }
|
101
|
-
end
|
102
|
-
|
103
|
-
alias_method :☠, :exit
|
104
|
-
end
|
105
27
|
end
|
data/test/cases/test_apk.apk
CHANGED
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
this is a text
|
Binary file
|
data/test/info_test.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class InfoTest < Minitest::Test
|
4
|
+
|
5
|
+
def test_apk_info
|
6
|
+
info = FIR.apk_info(default_apk, true)
|
7
|
+
|
8
|
+
assert_equal 'android', info[:type]
|
9
|
+
assert_equal 'com.bughd.myapplication', info[:identifier]
|
10
|
+
assert_equal 'My Application', info[:name]
|
11
|
+
assert_equal '1', info[:build]
|
12
|
+
assert_equal '1.0', info[:version]
|
13
|
+
|
14
|
+
assert_equal true, File.exist?(info[:icons].first)
|
15
|
+
|
16
|
+
assert FIR.info(default_apk, {})
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_ipa_info
|
20
|
+
info = FIR.ipa_info(default_ipa, true)
|
21
|
+
|
22
|
+
assert_equal 'ios', info[:type]
|
23
|
+
assert_equal 'im.fir.build-ipa', info[:identifier]
|
24
|
+
assert_equal 'build_ipa', info[:name]
|
25
|
+
assert_equal '1', info[:build]
|
26
|
+
assert_equal '1.0', info[:version]
|
27
|
+
|
28
|
+
# Only for OSX
|
29
|
+
# assert_equal nil, info[:display_name]
|
30
|
+
# assert_equal default_device_udid, info[:devices].first
|
31
|
+
# assert_equal 'adhoc', info[:release_type]
|
32
|
+
# assert_equal default_distribution_name, info[:distribution_name]
|
33
|
+
|
34
|
+
assert_equal true, info[:plist].is_a?(Hash)
|
35
|
+
assert_equal true, info[:mobileprovision].is_a?(Hash)
|
36
|
+
|
37
|
+
assert FIR.info(default_ipa, {})
|
38
|
+
end
|
39
|
+
end
|
data/test/login_test.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class MappingTest < Minitest::Test
|
4
|
+
|
5
|
+
def test_mapping
|
6
|
+
options = {
|
7
|
+
token: default_token,
|
8
|
+
version: '1.1',
|
9
|
+
build: '1'
|
10
|
+
}
|
11
|
+
|
12
|
+
assert FIR.mapping(default_dsym_mapping, options.merge(proj: default_bughd_project_ios_id))
|
13
|
+
assert FIR.mapping(default_txt_mapping, options.merge(proj: default_bughd_project_android_id))
|
14
|
+
end
|
15
|
+
end
|
data/test/me_test.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class MeTest < Minitest::Test
|
4
|
+
|
5
|
+
def test_me
|
6
|
+
user_info = FIR.fetch_user_info(default_token)
|
7
|
+
|
8
|
+
FIR.write_config(email: user_info.fetch(:email, ''), token: default_token)
|
9
|
+
FIR.reload_config
|
10
|
+
|
11
|
+
me_info = FIR.fetch_user_info(FIR.current_token)
|
12
|
+
|
13
|
+
assert_equal default_email, me_info.fetch(:email, '')
|
14
|
+
|
15
|
+
assert FIR.me
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class PublishTest < Minitest::Test
|
4
|
+
|
5
|
+
def test_publish
|
6
|
+
options = {
|
7
|
+
token: default_token,
|
8
|
+
changelog: "test from fir-cli #{Time.now.to_i}"
|
9
|
+
}
|
10
|
+
|
11
|
+
assert FIR.publish(default_ipa, options)
|
12
|
+
assert FIR.publish(default_apk, options)
|
13
|
+
end
|
14
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'fir'
|
5
|
+
|
6
|
+
FIR.logger = Logger.new(STDOUT)
|
7
|
+
|
8
|
+
class Minitest::Test
|
9
|
+
|
10
|
+
def default_token
|
11
|
+
'2dd8a99ef9d19c540bb583624b939960'
|
12
|
+
end
|
13
|
+
|
14
|
+
def default_email
|
15
|
+
'fir-cli_test@fir.im'
|
16
|
+
end
|
17
|
+
|
18
|
+
def default_apk
|
19
|
+
File.expand_path('../cases', __FILE__) + '/test_apk.apk'
|
20
|
+
end
|
21
|
+
|
22
|
+
def default_ipa
|
23
|
+
File.expand_path('../cases', __FILE__) + '/test_ipa.ipa'
|
24
|
+
end
|
25
|
+
|
26
|
+
def default_bughd_project_ios_id
|
27
|
+
'55bb2839692d647a46000004'
|
28
|
+
end
|
29
|
+
|
30
|
+
def default_bughd_project_android_id
|
31
|
+
'55be454a692d351278000002'
|
32
|
+
end
|
33
|
+
|
34
|
+
def default_dsym_mapping
|
35
|
+
File.expand_path('../cases', __FILE__) + '/test_ipa_dsym'
|
36
|
+
end
|
37
|
+
|
38
|
+
def default_txt_mapping
|
39
|
+
File.expand_path('../cases', __FILE__) + '/test_apk_txt'
|
40
|
+
end
|
41
|
+
|
42
|
+
def default_device_udid
|
43
|
+
"cf8b87e3f469d7b185fd64c057778aecbc2017a6"
|
44
|
+
end
|
45
|
+
|
46
|
+
def default_distribution_name
|
47
|
+
'iOSTeam Provisioning Profile: im.fir.* - Fly It Remotely LLC.'
|
48
|
+
end
|
49
|
+
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.1.
|
4
|
+
version: 1.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- FIR.im
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-08-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -53,6 +53,20 @@ dependencies:
|
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '5.7'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: pry
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0.10'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0.10'
|
56
70
|
- !ruby/object:Gem::Dependency
|
57
71
|
name: thor
|
58
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,6 +131,7 @@ executables:
|
|
117
131
|
extensions: []
|
118
132
|
extra_rdoc_files: []
|
119
133
|
files:
|
134
|
+
- ".codeclimate.yml"
|
120
135
|
- ".gitignore"
|
121
136
|
- ".travis.yml"
|
122
137
|
- CHANGELOG
|
@@ -131,21 +146,32 @@ files:
|
|
131
146
|
- lib/fir/api.yml
|
132
147
|
- lib/fir/cli.rb
|
133
148
|
- lib/fir/patches.rb
|
134
|
-
- lib/fir/patches/
|
149
|
+
- lib/fir/patches/concern.rb
|
135
150
|
- lib/fir/patches/native_patch.rb
|
136
151
|
- lib/fir/patches/os_patch.rb
|
137
|
-
- lib/fir/patches/parser_patch.rb
|
138
152
|
- lib/fir/util.rb
|
139
153
|
- lib/fir/util/build.rb
|
154
|
+
- lib/fir/util/config.rb
|
155
|
+
- lib/fir/util/http.rb
|
140
156
|
- lib/fir/util/info.rb
|
141
157
|
- lib/fir/util/login.rb
|
158
|
+
- lib/fir/util/mapping.rb
|
142
159
|
- lib/fir/util/me.rb
|
160
|
+
- lib/fir/util/parser.rb
|
143
161
|
- lib/fir/util/publish.rb
|
144
162
|
- lib/fir/version.rb
|
145
163
|
- lib/fir_cli.rb
|
164
|
+
- test/build_ipa_test.rb
|
146
165
|
- test/cases/test_apk.apk
|
166
|
+
- test/cases/test_apk_txt
|
147
167
|
- test/cases/test_ipa.ipa
|
148
|
-
- test/
|
168
|
+
- test/cases/test_ipa_dsym
|
169
|
+
- test/info_test.rb
|
170
|
+
- test/login_test.rb
|
171
|
+
- test/mapping_test.rb
|
172
|
+
- test/me_test.rb
|
173
|
+
- test/publish_test.rb
|
174
|
+
- test/test_helper.rb
|
149
175
|
homepage: http://blog.fir.im/fir_cli
|
150
176
|
licenses:
|
151
177
|
- MIT
|
@@ -153,9 +179,14 @@ metadata: {}
|
|
153
179
|
post_install_message: "\n ______________ ________ ____\n /
|
154
180
|
____/ _/ __ \\ / ____/ / / _/\n / /_ / // /_/ /_____/ / / / /
|
155
181
|
/\n / __/ _/ // _, _/_____/ /___/ /____/ /\n /_/ /___/_/ |_| \\____/_____/___/\n\n
|
156
|
-
\ ## 更新记录\n ### FIR-CLI 1.1.
|
157
|
-
Token 查看地址: `http://fir.im/user/info`\n -
|
158
|
-
|
182
|
+
\ ## 更新记录\n ### FIR-CLI 1.1.7\n - 完全兼容新版 API ✔\n - 请使用新版 API Token\n - 新版 API
|
183
|
+
Token 查看地址: `http://fir.im/user/info`\n - 增加符号表上传指令, `fir mapping(alias m)`\n -
|
184
|
+
有以下三种方式上传符号表(目前已经支持 dSYM 和 txt 两种格式的符号表文件上传)\n - 1. 指定 version 和 build 上传: `fir
|
185
|
+
m <mapping file path> -P <bughd project id> -v <app version> -b <app build> -T <your
|
186
|
+
api token>`\n - 2. 在 publish 的时候自动上传: `fir p <app file path> -m <mapping file
|
187
|
+
path> -P <bughd project id> -T <your api token>`\n - 3. 在 build_ipa 的时候自动上传:
|
188
|
+
`fir b <project dir> -P <bughd project id> -M -p -T <your api token>`\n - https://github.com/FIRHQ/fir-cli\n
|
189
|
+
\ "
|
159
190
|
rdoc_options: []
|
160
191
|
require_paths:
|
161
192
|
- lib
|
@@ -176,6 +207,14 @@ signing_key:
|
|
176
207
|
specification_version: 4
|
177
208
|
summary: FIR.im command tool
|
178
209
|
test_files:
|
210
|
+
- test/build_ipa_test.rb
|
179
211
|
- test/cases/test_apk.apk
|
212
|
+
- test/cases/test_apk_txt
|
180
213
|
- test/cases/test_ipa.ipa
|
181
|
-
- test/
|
214
|
+
- test/cases/test_ipa_dsym
|
215
|
+
- test/info_test.rb
|
216
|
+
- test/login_test.rb
|
217
|
+
- test/mapping_test.rb
|
218
|
+
- test/me_test.rb
|
219
|
+
- test/publish_test.rb
|
220
|
+
- test/test_helper.rb
|
Binary file
|