firim 0.1.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 +7 -0
- data/README.md +58 -0
- data/bin/firim +5 -0
- data/lib/assets/FirimfileDefault +5 -0
- data/lib/firim.rb +20 -0
- data/lib/firim/commands_generator.rb +68 -0
- data/lib/firim/detect_values.rb +41 -0
- data/lib/firim/options.rb +78 -0
- data/lib/firim/runner.rb +145 -0
- data/lib/firim/setup.rb +25 -0
- data/lib/firim/version.rb +3 -0
- metadata +167 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 71ce22fb2fae197455cca05de2c9e26dea236a89
|
4
|
+
data.tar.gz: 4fb4e7dbfd738e0c2b61c2e5b47c84f2c55a06d7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f5349626a9c64773773b7dd094e315ce5f6f06ca7f11dccdafeb38a8551769fcafa5d054d2737c41784854c1e1b958b58f55a148d743022242a158497f7f00be
|
7
|
+
data.tar.gz: e1c696a1ff9b3e678a106f712a0c921b4cdb2db20cdbb3bf0a2680854de1a75c97f3ddd5bb78f77f618b221444f971977cc517e1d95fb62f8cba9e8ac446aaf2
|
data/README.md
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# Firim
|
2
|
+
|
3
|
+
Firim is a command tool to directly upload ipa and change app infomation on fir.im. fir.im is a Beta APP host website, you can upload ipa for AdHoc or InHouse distribution for testing.
|
4
|
+
|
5
|
+
## Getting Started
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'firim'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install firim
|
20
|
+
|
21
|
+
## Quick Start
|
22
|
+
|
23
|
+
* `cd [your_project_folder]`
|
24
|
+
* `firim init`
|
25
|
+
* Enter your fir.im API Token (From [Fir.im](http://fir.im/apps))
|
26
|
+
* `firim -i [your_ipa_path]`
|
27
|
+
|
28
|
+
# Usage
|
29
|
+
|
30
|
+
Use with fastlane [fastlane-plugin-firim](fastlane-plugin-firim/)
|
31
|
+
|
32
|
+
You can specify the app infomations in `Firimfile`, To get a list of available options run
|
33
|
+
|
34
|
+
firim --help
|
35
|
+
|
36
|
+
Upload with icon ***NOTICE: Icon must be jpg format***
|
37
|
+
|
38
|
+
firim -i [your_ipa_path] -l [your_icon_path]
|
39
|
+
|
40
|
+
# Need help?
|
41
|
+
|
42
|
+
Please submit an issue on GitHub and provide information about your setup
|
43
|
+
|
44
|
+
|
45
|
+
## Contributing
|
46
|
+
|
47
|
+
Bug reports and pull requests are welcome on GitHub at [https://github.com/whlsxl/firim](https://github.com/whlsxl/firim). This project is intended to be a safe, welcoming space for collaboration.
|
48
|
+
|
49
|
+
|
50
|
+
## License
|
51
|
+
|
52
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
53
|
+
|
54
|
+
# TODO
|
55
|
+
|
56
|
+
* Export all app infomation to a file
|
57
|
+
* Generate a web page show all the app's link and infomations
|
58
|
+
* Show the app list, and export all app infomations to a file
|
data/bin/firim
ADDED
data/lib/firim.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'firim/commands_generator'
|
2
|
+
require 'firim/detect_values'
|
3
|
+
require 'firim/options'
|
4
|
+
require 'firim/runner'
|
5
|
+
require 'firim/setup'
|
6
|
+
require "firim/version"
|
7
|
+
|
8
|
+
require 'fastlane_core'
|
9
|
+
|
10
|
+
module Firim
|
11
|
+
class << self
|
12
|
+
end
|
13
|
+
|
14
|
+
Helper = FastlaneCore::Helper # you gotta love Ruby: Helper.* should use the Helper class contained in FastlaneCore
|
15
|
+
UI = FastlaneCore::UI
|
16
|
+
|
17
|
+
# Constant that captures the root Pathname for the project. Should be used for building paths to assets or other
|
18
|
+
# resources that code needs to locate locally
|
19
|
+
ROOT = Pathname.new(File.expand_path('../..', __FILE__))
|
20
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'commander'
|
2
|
+
|
3
|
+
module Firim
|
4
|
+
class CommandsGenerator
|
5
|
+
include Commander::Methods
|
6
|
+
|
7
|
+
# def self.start
|
8
|
+
# FastlaneCore::UpdateChecker.start_looking_for_update('deliver')
|
9
|
+
# self.new.run
|
10
|
+
# ensure
|
11
|
+
# FastlaneCore::UpdateChecker.show_update_status('deliver', Deliver::VERSION)
|
12
|
+
# end
|
13
|
+
|
14
|
+
def self.start
|
15
|
+
self.new.run
|
16
|
+
end
|
17
|
+
|
18
|
+
def run
|
19
|
+
program :version, Firim::VERSION
|
20
|
+
program :description, 'fir.im command tool'
|
21
|
+
program :help, 'Author', 'Hailong Wang <whlsxl+g@gmail.com>'
|
22
|
+
program :help, 'GitHub', 'https://github.com/fastlane/fastlane/tree/master/deliver'
|
23
|
+
program :help_formatter, :compact
|
24
|
+
|
25
|
+
FastlaneCore::CommanderGenerator.new.generate(Firim::Options.available_options)
|
26
|
+
global_option('--verbose') { $verbose = true }
|
27
|
+
|
28
|
+
always_trace!
|
29
|
+
|
30
|
+
command :run do |c|
|
31
|
+
c.syntax = 'firim'
|
32
|
+
c.description = 'Upload binary and infomations to Fir.im'
|
33
|
+
c.action do |args, options|
|
34
|
+
options = FastlaneCore::Configuration.create(Firim::Options.available_options, options.__hash__)
|
35
|
+
loaded = options.load_configuration_file("Firimfile")
|
36
|
+
loaded = true if options[:firim_api_token]
|
37
|
+
unless loaded
|
38
|
+
if UI.confirm("No firim configuration found in the current directory. Do you want to setup firim?")
|
39
|
+
require 'deliver/setup'
|
40
|
+
Firim::Setup.new.run(options)
|
41
|
+
return 0
|
42
|
+
end
|
43
|
+
end
|
44
|
+
Firim::Runner.new(options).run
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
command :init do |c|
|
49
|
+
c.syntax = 'firim init'
|
50
|
+
c.description = 'Create the initial `Firimfile` configuration'
|
51
|
+
c.action do |args, options|
|
52
|
+
if File.exist?("Firimfile") or File.exist?("fastlane/Firimfile")
|
53
|
+
UI.important("You already got a running firim setup in this directory")
|
54
|
+
return 0
|
55
|
+
end
|
56
|
+
|
57
|
+
require 'firim/setup'
|
58
|
+
options = FastlaneCore::Configuration.create(Firim::Options.available_options, options.__hash__)
|
59
|
+
Firim::Setup.new.run(options)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
default_command :run
|
64
|
+
|
65
|
+
run!
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Firim
|
2
|
+
class DetectValues
|
3
|
+
def run!(options)
|
4
|
+
find_firim_api_token(options)
|
5
|
+
find_app_identifier(options)
|
6
|
+
find_app_name(options)
|
7
|
+
find_version(options)
|
8
|
+
find_build_version(options)
|
9
|
+
end
|
10
|
+
|
11
|
+
def find_app_identifier(options)
|
12
|
+
identifier = FastlaneCore::IpaFileAnalyser.fetch_app_identifier(options[:ipa])
|
13
|
+
if identifier.to_s.length != 0
|
14
|
+
options[:app_identifier] = identifier
|
15
|
+
else
|
16
|
+
UI.user_error!("Could not find ipa with app identifier '#{options[:app_identifier]}' in your iTunes Connect account (#{options[:username]} - Team: #{Spaceship::Tunes.client.team_id})")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def find_app_name(options)
|
21
|
+
return if options[:app_name]
|
22
|
+
plist = FastlaneCore::IpaFileAnalyser.fetch_info_plist_file(options[:ipa])
|
23
|
+
options[:app_name] ||= plist['CFBundleDisplayName']
|
24
|
+
options[:app_name] ||= plist['CFBundleName']
|
25
|
+
end
|
26
|
+
|
27
|
+
def find_version(options)
|
28
|
+
options[:app_version] ||= FastlaneCore::IpaFileAnalyser.fetch_app_version(options[:ipa])
|
29
|
+
end
|
30
|
+
|
31
|
+
def find_build_version(options)
|
32
|
+
plist = FastlaneCore::IpaFileAnalyser.fetch_info_plist_file(options[:ipa])
|
33
|
+
options[:app_build_version] = plist['CFBundleVersion']
|
34
|
+
end
|
35
|
+
|
36
|
+
def find_firim_api_token(options)
|
37
|
+
return if options[:firim_api_token]
|
38
|
+
options[:firim_api_token] ||= UI.input("The API Token of fir.im: ")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'fastlane_core'
|
2
|
+
require 'credentials_manager'
|
3
|
+
|
4
|
+
module Firim
|
5
|
+
class Options
|
6
|
+
def self.available_options
|
7
|
+
[
|
8
|
+
# firim info
|
9
|
+
FastlaneCore::ConfigItem.new(key: :firim_api_token,
|
10
|
+
short_option: "-a",
|
11
|
+
description: "fir.im user api token"),
|
12
|
+
|
13
|
+
# Content path
|
14
|
+
FastlaneCore::ConfigItem.new(key: :ipa,
|
15
|
+
short_option: "-i",
|
16
|
+
env_name: "DELIVER_IPA_PATH",
|
17
|
+
description: "Path to your ipa file",
|
18
|
+
default_value: Dir["*.ipa"].first,
|
19
|
+
verify_block: proc do |value|
|
20
|
+
UI.user_error!("Could not find ipa file at path '#{value}'") unless File.exist?(value)
|
21
|
+
UI.user_error!("'#{value}' doesn't seem to be an ipa file") unless value.end_with?(".ipa")
|
22
|
+
end,
|
23
|
+
conflicting_options: [:pkg],
|
24
|
+
conflict_block: proc do |value|
|
25
|
+
UI.user_error!("You can't use 'ipa' and '#{value.key}' options in one run.")
|
26
|
+
end),
|
27
|
+
FastlaneCore::ConfigItem.new(key: :icon,
|
28
|
+
description: "Path to the app icon, MUST BE jpg",
|
29
|
+
optional: true,
|
30
|
+
short_option: "-l",
|
31
|
+
verify_block: proc do |value|
|
32
|
+
UI.user_error!("Could not find png file at path '#{value}'") unless File.exist?(value)
|
33
|
+
UI.user_error!("'#{value}' doesn't seem to be a png file") unless value.end_with?(".jpg")
|
34
|
+
end),
|
35
|
+
# APP info
|
36
|
+
FastlaneCore::ConfigItem.new(key: :app_identifier,
|
37
|
+
description: "The app's identifier",
|
38
|
+
optional: true),
|
39
|
+
FastlaneCore::ConfigItem.new(key: :app_name,
|
40
|
+
description: "The app's name",
|
41
|
+
optional: true),
|
42
|
+
FastlaneCore::ConfigItem.new(key: :app_desc,
|
43
|
+
description: "The app's desc",
|
44
|
+
optional: true),
|
45
|
+
FastlaneCore::ConfigItem.new(key: :app_short,
|
46
|
+
description: "The app's short URL",
|
47
|
+
optional: true),
|
48
|
+
FastlaneCore::ConfigItem.new(key: :app_is_opened,
|
49
|
+
description: "APP's download link whether opened",
|
50
|
+
is_string: false,
|
51
|
+
optional: true),
|
52
|
+
FastlaneCore::ConfigItem.new(key: :app_is_show_plaza,
|
53
|
+
description: "Whether the app show in plaza",
|
54
|
+
is_string: false,
|
55
|
+
optional: true),
|
56
|
+
FastlaneCore::ConfigItem.new(key: :app_passwd,
|
57
|
+
description: "The app's download page password",
|
58
|
+
optional: true),
|
59
|
+
FastlaneCore::ConfigItem.new(key: :app_store_link_visible,
|
60
|
+
description: "Whether show store link in download page",
|
61
|
+
is_string: false,
|
62
|
+
optional: true),
|
63
|
+
FastlaneCore::ConfigItem.new(key: :app_version,
|
64
|
+
description: "The app's version",
|
65
|
+
optional: true),
|
66
|
+
FastlaneCore::ConfigItem.new(key: :app_build_version,
|
67
|
+
description: "The app's build version",
|
68
|
+
optional: true),
|
69
|
+
FastlaneCore::ConfigItem.new(key: :app_release_type,
|
70
|
+
description: "The app's release type (Adhoc, Inhouse)",
|
71
|
+
optional: true),
|
72
|
+
FastlaneCore::ConfigItem.new(key: :app_changelog,
|
73
|
+
description: "The app's changelog",
|
74
|
+
optional: true)
|
75
|
+
]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/firim/runner.rb
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
require 'faraday' # HTTP Client
|
2
|
+
require 'faraday_middleware'
|
3
|
+
# require 'logger'
|
4
|
+
|
5
|
+
module Firim
|
6
|
+
class Runner
|
7
|
+
attr_accessor :options
|
8
|
+
attr_reader :firim_client
|
9
|
+
|
10
|
+
def self.firim_hostname
|
11
|
+
return "http://api.fir.im/"
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(options)
|
15
|
+
self.options = options
|
16
|
+
@app_info = {}
|
17
|
+
|
18
|
+
conn_options = {
|
19
|
+
request: {
|
20
|
+
timeout: 300,
|
21
|
+
open_timeout: 300
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
@firim_client = Faraday.new(self.class.firim_hostname, conn_options) do |c|
|
26
|
+
c.request :url_encoded # form-encode POST params
|
27
|
+
c.adapter :net_http
|
28
|
+
c.response :json, :content_type => /\bjson$/
|
29
|
+
end
|
30
|
+
|
31
|
+
Firim::DetectValues.new.run!(self.options)
|
32
|
+
FastlaneCore::PrintTable.print_values(config: options, title: "firim #{Firim::VERSION} Summary")
|
33
|
+
end
|
34
|
+
|
35
|
+
def run
|
36
|
+
# FastlaneCore::PrintTable.print_values(config: get_app_info, title: "Current online infomation")
|
37
|
+
@app_info.merge( upload_binary_and_icon )
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
def validation_response response_data
|
42
|
+
error_code = response_data['errors']['code'].to_int rescue 0
|
43
|
+
if error_code == 100020
|
44
|
+
UI.user_error!("Firim API Token(#{options[:firim_api_token]}) not correct")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def get_app_info
|
49
|
+
app_info_path = "apps/latest/" + options[:app_identifier]
|
50
|
+
response = self.firim_client.get app_info_path, { :api_token => options[:firim_api_token], :type => "ios" }
|
51
|
+
info = response.body == nil ? {} : response.body
|
52
|
+
validation_response info
|
53
|
+
info
|
54
|
+
end
|
55
|
+
|
56
|
+
def upload_binary_and_icon
|
57
|
+
upload_publish_path = "apps/"
|
58
|
+
response = self.firim_client.post do |req|
|
59
|
+
req.url upload_publish_path
|
60
|
+
req.body = { :type => 'ios', :bundle_id => options[:app_identifier], :api_token => options[:firim_api_token] }
|
61
|
+
end
|
62
|
+
info = response.body
|
63
|
+
validation_response info
|
64
|
+
begin
|
65
|
+
upload_binary info['cert']['binary']
|
66
|
+
upload_icon info['cert']['icon']
|
67
|
+
rescue Exception => e
|
68
|
+
# raise UI.user_error!("Firim Server error #{e}\n #{info}")
|
69
|
+
raise e
|
70
|
+
end
|
71
|
+
info.select { |k, v| ["id", "type", "short"].include?(k) }
|
72
|
+
end
|
73
|
+
|
74
|
+
def get_upload_conn
|
75
|
+
conn_options = {
|
76
|
+
request: {
|
77
|
+
timeout: 1000,
|
78
|
+
open_timeout: 300
|
79
|
+
}
|
80
|
+
}
|
81
|
+
Faraday.new(nil, conn_options) do |c|
|
82
|
+
c.request :multipart
|
83
|
+
c.request :url_encoded
|
84
|
+
c.response :json, content_type: /\bjson$/
|
85
|
+
c.adapter :net_http
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def upload_binary binary_info
|
90
|
+
params = {
|
91
|
+
'key' => binary_info['key'],
|
92
|
+
'token' => binary_info['token'],
|
93
|
+
'file' => Faraday::UploadIO.new(self.options[:ipa], 'application/octet-stream'),
|
94
|
+
'x:name' => self.options[:app_name],
|
95
|
+
'x:version' => self.options[:app_version],
|
96
|
+
'x:build' => self.options[:app_build_version]
|
97
|
+
}
|
98
|
+
params['x:release_type'] = self.options[:app_release_type] if self.options[:app_release_type]
|
99
|
+
params['x:changelog'] = self.options[:app_changelog] if self.options[:app_changelog]
|
100
|
+
binary_conn = get_upload_conn
|
101
|
+
UI.message "Start upload #{self.options[:app_name]} binary..."
|
102
|
+
response = binary_conn.post binary_info['upload_url'], params
|
103
|
+
unless response.body['is_completed']
|
104
|
+
raise UI.user_error!("Upload binary to Qiniu error #{response.body}")
|
105
|
+
end
|
106
|
+
UI.success 'Upload binary successed!'
|
107
|
+
end
|
108
|
+
|
109
|
+
def upload_icon icon_info
|
110
|
+
return unless self.options[:icon]
|
111
|
+
binary_conn = get_upload_conn
|
112
|
+
params = {
|
113
|
+
'key' => icon_info['key'],
|
114
|
+
'token' => icon_info['token'],
|
115
|
+
'file' => Faraday::UploadIO.new(self.options[:icon], 'image/jpeg'),
|
116
|
+
}
|
117
|
+
UI.message "Start upload #{self.options[:app_name]} icon..."
|
118
|
+
response = binary_conn.post icon_info['upload_url'], params
|
119
|
+
unless response.body['is_completed']
|
120
|
+
raise UI.user_error!("Upload icon to Qiniu error #{response.body}")
|
121
|
+
end
|
122
|
+
UI.success 'Upload icon successed!'
|
123
|
+
end
|
124
|
+
|
125
|
+
def update_app_info id
|
126
|
+
params = {
|
127
|
+
:api_token => options[:firim_api_token]
|
128
|
+
}
|
129
|
+
["name", "desc", "short", "is_opened", "is_show_plaza", "passwd", "store_link_visible"].each do |k|
|
130
|
+
key = :"app_#{k}"
|
131
|
+
params[k] = options[key] if options[key] != nil
|
132
|
+
end
|
133
|
+
|
134
|
+
update_app_info_path = "apps/#{id}"
|
135
|
+
response = self.firim_client.put do |req|
|
136
|
+
req.url update_app_info_path
|
137
|
+
req.body = params
|
138
|
+
end
|
139
|
+
info = response.body
|
140
|
+
validation_response info
|
141
|
+
UI.success "Update app info successed!"
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
end
|
data/lib/firim/setup.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
module Firim
|
3
|
+
class Setup
|
4
|
+
def run(options)
|
5
|
+
containing = (File.directory?("fastlane") ? 'fastlane' : '.')
|
6
|
+
file_path = File.join(containing, 'Firimfile')
|
7
|
+
data = generate_firim_file(containing, options)
|
8
|
+
setup_firim(file_path, data, containing, options)
|
9
|
+
end
|
10
|
+
|
11
|
+
def generate_firim_file(firim_path, options)
|
12
|
+
# Generate the final Firimfile here
|
13
|
+
firim = File.read("#{Firim::ROOT}/lib/assets/FirimfileDefault")
|
14
|
+
firim.gsub!("[[FIRIM_API_TOKEN]]", options[:firim_api_token])
|
15
|
+
return firim
|
16
|
+
end
|
17
|
+
|
18
|
+
def setup_firim(file_path, data, firim_path, options)
|
19
|
+
File.write(file_path, data)
|
20
|
+
|
21
|
+
UI.success("Successfully created new Firimfile at path '#{file_path}'")
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: firim
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- whlsxl
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: fastlane_core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.52.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.0.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.52.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.0.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: credentials_manager
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 0.16.0
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.0.0
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 0.16.0
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.0.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: faraday
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0.9'
|
60
|
+
type: :runtime
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0.9'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: faraday_middleware
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0.9'
|
74
|
+
type: :runtime
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0.9'
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: bundler
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '1.12'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '1.12'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: rake
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '10.0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - "~>"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '10.0'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: minitest
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '5.0'
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '5.0'
|
123
|
+
description: |-
|
124
|
+
fir.im command tool,
|
125
|
+
Upload ipa to fir.im
|
126
|
+
email:
|
127
|
+
- whlsxl+g@gmail.com
|
128
|
+
executables:
|
129
|
+
- firim
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- README.md
|
134
|
+
- bin/firim
|
135
|
+
- lib/assets/FirimfileDefault
|
136
|
+
- lib/firim.rb
|
137
|
+
- lib/firim/commands_generator.rb
|
138
|
+
- lib/firim/detect_values.rb
|
139
|
+
- lib/firim/options.rb
|
140
|
+
- lib/firim/runner.rb
|
141
|
+
- lib/firim/setup.rb
|
142
|
+
- lib/firim/version.rb
|
143
|
+
homepage: https://github.com/whlsxl/firim
|
144
|
+
licenses:
|
145
|
+
- MIT
|
146
|
+
metadata: {}
|
147
|
+
post_install_message:
|
148
|
+
rdoc_options: []
|
149
|
+
require_paths:
|
150
|
+
- lib
|
151
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
156
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
requirements: []
|
162
|
+
rubyforge_project:
|
163
|
+
rubygems_version: 2.5.1
|
164
|
+
signing_key:
|
165
|
+
specification_version: 4
|
166
|
+
summary: fir.im command tool
|
167
|
+
test_files: []
|