fastlane 1.7.3 → 1.8.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 +4 -4
- data/README.md +5 -3
- data/bin/fastlane +6 -10
- data/lib/fastlane.rb +1 -0
- data/lib/fastlane/action_collector.rb +29 -24
- data/lib/fastlane/actions/hockey.rb +1 -0
- data/lib/fastlane/actions/import_certificate.rb +1 -0
- data/lib/fastlane/command_line_handler.rb +44 -0
- data/lib/fastlane/fast_file.rb +63 -44
- data/lib/fastlane/lane_manager.rb +6 -6
- data/lib/fastlane/runner.rb +4 -4
- data/lib/fastlane/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c339ea21edfc2acca2f46b9a751d03795647c3f6
|
|
4
|
+
data.tar.gz: 9c35a144521c7f03f7a9c7fe5441026ed9882d59
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cc15fe2094ff6748d3c9f9ba7fc029b60eb7faafe91b9f7c407a749232fed51ab25a852f6b69b746ae4b0b3cd296cc260aa9b4e291385a09c530369978a05beb
|
|
7
|
+
data.tar.gz: 4849594603cd554346c5ddc54d97a1365903df26f1a14507719ecd2434ae780c79515a7c8c88c5d0392f5bfffac7da8694bc63487d3abb972bbdd965499fcd06
|
data/README.md
CHANGED
|
@@ -116,7 +116,7 @@ The setup assistant will create all the necessary files for you, using the exist
|
|
|
116
116
|
|
|
117
117
|
For more details, please follow the [fastlane guide](https://github.com/KrauseFx/fastlane/blob/master/docs/Guide.md) or [documentation](https://github.com/KrauseFx/fastlane/blob/master/docs).
|
|
118
118
|
|
|
119
|
-
There
|
|
119
|
+
There are also 2 Japanese fastlane guides available: [qiita](http://qiita.com/gin0606/items/162d756dfda7b84e97d4) and [mercari](http://tech.mercari.com/entry/2015/07/13/143000)
|
|
120
120
|
|
|
121
121
|
## Available commands
|
|
122
122
|
|
|
@@ -156,11 +156,13 @@ See how [Wikipedia](https://github.com/fastlane/examples#wikipedia-by-wikimedia-
|
|
|
156
156
|
|
|
157
157
|
You can easily opt-out by adding `opt_out_usage` to your `Fastfile` or by setting the environment variable `FASTLANE_OPT_OUT_USAGE`.
|
|
158
158
|
|
|
159
|
+
To also disable update checks, set the `FASTLANE_SKIP_UPDATE_CHECK` variable.
|
|
160
|
+
|
|
159
161
|
## Credentials
|
|
160
|
-
A detailed description about how
|
|
162
|
+
A detailed description about how `fastlane` stores your credentials is available on a [separate repo](https://github.com/KrauseFx/CredentialsManager).
|
|
161
163
|
|
|
162
164
|
## Need help?
|
|
163
|
-
- If there is a technical problem with
|
|
165
|
+
- If there is a technical problem with `fastlane`, [open an issue](https://github.com/KrauseFx/fastlane/issues/new).
|
|
164
166
|
- I'm available for contract work - drop me an email: fastlane@krausefx.com
|
|
165
167
|
|
|
166
168
|
## Special Thanks
|
data/bin/fastlane
CHANGED
|
@@ -13,7 +13,10 @@ class FastlaneApplication
|
|
|
13
13
|
|
|
14
14
|
def run
|
|
15
15
|
program :version, Fastlane::VERSION
|
|
16
|
-
program :description,
|
|
16
|
+
program :description, [
|
|
17
|
+
"CLI for 'fastlane' - Connect all iOS deployment tools into one streamlined workflow.\n",
|
|
18
|
+
"\tRun using `fastlane [platform] [lane_name]`",
|
|
19
|
+
"\tTo pass values to the lanes use `fastlane [platform] [lane_name] key:value key2:value2`"].join("\n")
|
|
17
20
|
program :help, 'Author', 'Felix Krause <fastlane@krausefx.com>'
|
|
18
21
|
program :help, 'Website', 'https://fastlane.tools'
|
|
19
22
|
program :help, 'GitHub', 'https://github.com/krausefx/fastlane'
|
|
@@ -28,15 +31,8 @@ class FastlaneApplication
|
|
|
28
31
|
|
|
29
32
|
c.action do |args, _options|
|
|
30
33
|
if Fastlane::FastlaneFolder.path
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
if lane
|
|
34
|
-
platform = args[0]
|
|
35
|
-
else
|
|
36
|
-
lane = args[0]
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
Fastlane::LaneManager.cruise_lane(platform, lane, _options.env)
|
|
34
|
+
|
|
35
|
+
Fastlane::CommandLineHandler.handle(args, _options)
|
|
40
36
|
else
|
|
41
37
|
create = agree('Could not find fastlane in current directory. Would you like to set it up? (y/n)'.yellow, true)
|
|
42
38
|
Fastlane::Setup.new.run if create
|
data/lib/fastlane.rb
CHANGED
|
@@ -3,14 +3,14 @@ module Fastlane
|
|
|
3
3
|
HOST_URL = "https://fastlane-enhancer.herokuapp.com/"
|
|
4
4
|
|
|
5
5
|
def did_launch_action(name)
|
|
6
|
-
if is_official(name)
|
|
6
|
+
if is_official?(name)
|
|
7
7
|
launches[name] ||= 0
|
|
8
8
|
launches[name] += 1
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def did_raise_error(name)
|
|
13
|
-
if is_official(name)
|
|
13
|
+
if is_official?(name)
|
|
14
14
|
@error = name
|
|
15
15
|
end
|
|
16
16
|
end
|
|
@@ -18,31 +18,35 @@ module Fastlane
|
|
|
18
18
|
# Sends the used actions
|
|
19
19
|
# Example data => [:xcode_select, :deliver, :notify, :slack]
|
|
20
20
|
def did_finish
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
end
|
|
21
|
+
unless ENV["FASTLANE_OPT_OUT_USAGE"]
|
|
22
|
+
begin
|
|
23
|
+
unless did_show_message?
|
|
24
|
+
Helper.log.debug("Sending Crash/Success information. More information on: https://github.com/fastlane/enhancer")
|
|
25
|
+
Helper.log.debug("No personal/sensitive data is sent. Only sharing the following:")
|
|
26
|
+
Helper.log.debug(launches)
|
|
27
|
+
Helper.log.debug(@error) if @error
|
|
28
|
+
Helper.log.debug("This information is used to fix failing actions and improve integrations that are often used.")
|
|
29
|
+
Helper.log.debug("You can disable this by adding `opt_out_usage` to your Fastfile")
|
|
30
|
+
end
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
require 'excon'
|
|
33
|
+
url = HOST_URL + '/did_launch?'
|
|
34
|
+
url += URI.encode_www_form(
|
|
35
|
+
steps: launches.to_json,
|
|
36
|
+
error: @error
|
|
37
|
+
)
|
|
39
38
|
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
unless Helper.is_test? # don't send test data
|
|
40
|
+
fork do
|
|
41
|
+
begin
|
|
42
|
+
Excon.post(url)
|
|
43
|
+
rescue
|
|
44
|
+
# we don't want to show a stack trace if something goes wrong
|
|
45
|
+
end
|
|
42
46
|
end
|
|
43
|
-
rescue
|
|
44
|
-
# We don't care about connection errors
|
|
45
47
|
end
|
|
48
|
+
rescue
|
|
49
|
+
# We don't care about connection errors
|
|
46
50
|
end
|
|
47
51
|
end
|
|
48
52
|
end
|
|
@@ -51,7 +55,8 @@ module Fastlane
|
|
|
51
55
|
@launches ||= {}
|
|
52
56
|
end
|
|
53
57
|
|
|
54
|
-
def is_official(name)
|
|
58
|
+
def is_official?(name)
|
|
59
|
+
return true if name == :lane_switch
|
|
55
60
|
Actions.get_all_official_actions.include?name
|
|
56
61
|
end
|
|
57
62
|
|
|
@@ -77,6 +77,7 @@ module Fastlane
|
|
|
77
77
|
FastlaneCore::ConfigItem.new(key: :dsym,
|
|
78
78
|
env_name: "FL_HOCKEY_DSYM",
|
|
79
79
|
description: "Path to your DSYM file",
|
|
80
|
+
default_value: Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH],
|
|
80
81
|
optional: true,
|
|
81
82
|
verify_block: Proc.new do |value|
|
|
82
83
|
# validation is done in the action
|
|
@@ -7,6 +7,7 @@ module Fastlane
|
|
|
7
7
|
command = "security import #{params[:certificate_path].shellescape} -k ~/Library/Keychains/#{params[:keychain_name].shellescape}"
|
|
8
8
|
command << " -P #{params[:certificate_password].shellescape}" if params[:certificate_password]
|
|
9
9
|
command << " -T /usr/bin/codesign"
|
|
10
|
+
command << " -T /usr/bin/security"
|
|
10
11
|
|
|
11
12
|
Fastlane::Actions.sh command, log: false
|
|
12
13
|
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module Fastlane
|
|
2
|
+
class CommandLineHandler
|
|
3
|
+
# This method handles command line inputs and properly transforms them to a usable format
|
|
4
|
+
# @param [Array] args An array of all arguments (not options)
|
|
5
|
+
# @param [Array] args A hash of all options (e.g. --env NAME)
|
|
6
|
+
def self.handle(args, options)
|
|
7
|
+
lane_parameters = {} # the parameters we'll pass to the lane
|
|
8
|
+
platform_lane_info = [] # the part that's responsible for the lane/platform definition
|
|
9
|
+
args.each do |current|
|
|
10
|
+
if current.include?":" # that's a key/value which we want to pass to the lane
|
|
11
|
+
key, value = current.split(":")
|
|
12
|
+
raise "Please pass values like this: key:value" unless (key.length > 0 and value.length > 0)
|
|
13
|
+
value = convert_value(value)
|
|
14
|
+
Helper.log.debug "Using #{key}: #{value}".green
|
|
15
|
+
lane_parameters[key.to_sym] = value
|
|
16
|
+
else
|
|
17
|
+
platform_lane_info << current
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
platform = nil
|
|
22
|
+
lane = platform_lane_info[1]
|
|
23
|
+
if lane
|
|
24
|
+
platform = platform_lane_info[0]
|
|
25
|
+
else
|
|
26
|
+
lane = platform_lane_info[0]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
dot_env = options.env rescue nil # we don't really care about this option in tests
|
|
30
|
+
|
|
31
|
+
Fastlane::LaneManager.cruise_lane(platform, lane, lane_parameters, dot_env)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
# Conert into the right data type
|
|
36
|
+
def self.convert_value(value)
|
|
37
|
+
return true if (value == 'true' or value == 'yes')
|
|
38
|
+
return false if (value == 'false' || value == 'no')
|
|
39
|
+
|
|
40
|
+
# Default case:
|
|
41
|
+
return value
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
data/lib/fastlane/fast_file.rb
CHANGED
|
@@ -68,62 +68,81 @@ module Fastlane
|
|
|
68
68
|
@runner.set_error(@current_platform, block)
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
+
def try_switch_to_lane(new_lane, parameters)
|
|
72
|
+
current_platform = Actions.lane_context[Actions::SharedValues::PLATFORM_NAME]
|
|
73
|
+
block = @runner.blocks.fetch(current_platform, {}).fetch(new_lane, nil)
|
|
74
|
+
platform_nil = (block == nil) # used for the output
|
|
75
|
+
block ||= @runner.blocks.fetch(nil, {}).fetch(new_lane, nil) # fallback to general lane for multiple platforms
|
|
76
|
+
if block
|
|
77
|
+
pretty = [new_lane]
|
|
78
|
+
pretty = [current_platform, new_lane] unless platform_nil
|
|
79
|
+
Helper.log.info "Cruising over to lane '#{pretty.join(' ')}' 🚖".green
|
|
80
|
+
collector.did_launch_action(:lane_switch)
|
|
81
|
+
result = block.call(parameters.first || {}) # to always pass a hash
|
|
82
|
+
original_lane = Actions.lane_context[Actions::SharedValues::LANE_NAME]
|
|
83
|
+
Helper.log.info "Cruising back to lane '#{original_lane}' 🚘".green
|
|
84
|
+
return result
|
|
85
|
+
else
|
|
86
|
+
# No action and no lane, raising an exception now
|
|
87
|
+
raise "Could not find action or lane '#{new_lane}'. Check out the README for more details: https://github.com/KrauseFx/fastlane".red
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def execute_action(method_sym, class_ref, arguments)
|
|
92
|
+
collector.did_launch_action(method_sym)
|
|
93
|
+
|
|
94
|
+
step_name = class_ref.step_text rescue nil
|
|
95
|
+
step_name = method_sym.to_s unless step_name
|
|
96
|
+
|
|
97
|
+
verify_supported_os(method_sym, class_ref)
|
|
98
|
+
|
|
99
|
+
Helper.log_alert("Step: " + step_name)
|
|
100
|
+
|
|
101
|
+
begin
|
|
102
|
+
Dir.chdir('..') do # go up from the fastlane folder, to the project folder
|
|
103
|
+
Actions.execute_action(method_sym) do
|
|
104
|
+
# arguments is an array by default, containing an hash with the actual parameters
|
|
105
|
+
# Since we usually just need the passed hash, we'll just use the first object if there is only one
|
|
106
|
+
if arguments.count == 0
|
|
107
|
+
arguments = ConfigurationHelper.parse(class_ref, {}) # no parameters => empty hash
|
|
108
|
+
elsif arguments.count == 1 and arguments.first.kind_of?Hash
|
|
109
|
+
arguments = ConfigurationHelper.parse(class_ref, arguments.first) # Correct configuration passed
|
|
110
|
+
elsif not class_ref.available_options
|
|
111
|
+
# This action does not use the new action format
|
|
112
|
+
# Just passing the arguments to this method
|
|
113
|
+
else
|
|
114
|
+
raise "You have to pass the options for '#{method_sym}' in a different way. Please check out the current documentation on GitHub!".red
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
class_ref.run(arguments)
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
rescue => ex
|
|
121
|
+
collector.did_raise_error(method_sym)
|
|
122
|
+
raise ex
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
71
126
|
# Is used to look if the method is implemented as an action
|
|
72
127
|
def method_missing(method_sym, *arguments, &_block)
|
|
73
128
|
# First, check if there is a predefined method in the actions folder
|
|
74
|
-
|
|
75
129
|
class_name = method_sym.to_s.fastlane_class + 'Action'
|
|
76
130
|
class_ref = nil
|
|
77
131
|
begin
|
|
78
132
|
class_ref = Fastlane::Actions.const_get(class_name)
|
|
133
|
+
if class_ref && class_ref.respond_to?(:run)
|
|
134
|
+
# Action is available, now execute it
|
|
135
|
+
return execute_action(method_sym, class_ref, arguments)
|
|
136
|
+
else
|
|
137
|
+
raise "Action '#{method_sym}' of class '#{class_name}' was found, but has no `run` method.".red
|
|
138
|
+
end
|
|
79
139
|
rescue NameError => ex
|
|
80
140
|
# Action not found
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if class_ref && class_ref.respond_to?(:run)
|
|
85
|
-
collector.did_launch_action(method_sym)
|
|
86
|
-
|
|
87
|
-
step_name = class_ref.step_text rescue nil
|
|
88
|
-
step_name = method_sym.to_s unless step_name
|
|
89
|
-
|
|
90
|
-
verify_supported_os(method_sym, class_ref)
|
|
91
|
-
|
|
92
|
-
Helper.log_alert("Step: " + step_name)
|
|
93
|
-
|
|
94
|
-
begin
|
|
95
|
-
Dir.chdir('..') do # go up from the fastlane folder, to the project folder
|
|
96
|
-
Actions.execute_action(method_sym) do
|
|
97
|
-
# arguments is an array by default, containing an hash with the actual parameters
|
|
98
|
-
# Since we usually just need the passed hash, we'll just use the first object if there is only one
|
|
99
|
-
if arguments.count == 0
|
|
100
|
-
arguments = ConfigurationHelper.parse(class_ref, {}) # no parameters => empty hsh
|
|
101
|
-
elsif arguments.count == 1 and arguments.first.kind_of?Hash
|
|
102
|
-
arguments = ConfigurationHelper.parse(class_ref, arguments.first) # Correct configuration passed
|
|
103
|
-
elsif not class_ref.available_options
|
|
104
|
-
# This action does not use the new action format
|
|
105
|
-
# Just passing the arguments to this method
|
|
106
|
-
else
|
|
107
|
-
Helper.log.fatal "------------------------------------------------------------------------------------".red
|
|
108
|
-
Helper.log.fatal "If you've been an existing fastlane user, please check out the MigrationGuide to 1.0".yellow
|
|
109
|
-
Helper.log.fatal "https://github.com/KrauseFx/fastlane/blob/master/docs/MigrationGuide.md".yellow
|
|
110
|
-
Helper.log.fatal "------------------------------------------------------------------------------------".red
|
|
111
|
-
raise "You have to pass the options for '#{method_sym}' in a different way. Please check out the current documentation on GitHub!".red
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
class_ref.run(arguments)
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
rescue => ex
|
|
118
|
-
collector.did_raise_error(method_sym)
|
|
119
|
-
raise ex
|
|
120
|
-
end
|
|
121
|
-
else
|
|
122
|
-
raise "Action '#{method_sym}' of class '#{class_name}' was found, but has no `run` method.".red
|
|
141
|
+
# Is there a lane under this name?
|
|
142
|
+
return try_switch_to_lane(method_sym, arguments)
|
|
123
143
|
end
|
|
124
144
|
end
|
|
125
145
|
|
|
126
|
-
|
|
127
146
|
#####################################################
|
|
128
147
|
# @!group Other things
|
|
129
148
|
#####################################################
|
|
@@ -2,9 +2,12 @@ module Fastlane
|
|
|
2
2
|
class LaneManager
|
|
3
3
|
# @param platform The name of the platform to execute
|
|
4
4
|
# @param lane_name The name of the lane to execute
|
|
5
|
-
|
|
5
|
+
# @param parameters [Hash] The parameters passed from the command line to the lane
|
|
6
|
+
# @param env Dot Env Information
|
|
7
|
+
def self.cruise_lane(platform, lane, parameters = nil, env = nil)
|
|
6
8
|
raise 'lane must be a string' unless (lane.is_a?(String) or lane.nil?)
|
|
7
9
|
raise 'platform must be a string' unless (platform.is_a?(String) or platform.nil?)
|
|
10
|
+
raise 'parameters must be a hash' unless (parameters.is_a?(Hash) or parameters.nil?)
|
|
8
11
|
|
|
9
12
|
ff = Fastlane::FastFile.new(File.join(Fastlane::FastlaneFolder.path, 'Fastfile'))
|
|
10
13
|
|
|
@@ -30,7 +33,7 @@ module Fastlane
|
|
|
30
33
|
started = Time.now
|
|
31
34
|
e = nil
|
|
32
35
|
begin
|
|
33
|
-
ff.runner.execute(lane, platform)
|
|
36
|
+
ff.runner.execute(lane, platform, parameters)
|
|
34
37
|
rescue => ex
|
|
35
38
|
Helper.log.info 'Variable Dump:'.yellow
|
|
36
39
|
Helper.log.info Actions.lane_context
|
|
@@ -47,15 +50,12 @@ module Fastlane
|
|
|
47
50
|
|
|
48
51
|
# All the finishing up that needs to be done
|
|
49
52
|
def self.finish_fastlane(ff, duration, error)
|
|
50
|
-
|
|
53
|
+
ff.did_finish
|
|
51
54
|
|
|
52
55
|
# Finished with all the lanes
|
|
53
56
|
Fastlane::JUnitGenerator.generate(Fastlane::Actions.executed_actions)
|
|
54
57
|
|
|
55
|
-
thread.join(5) # https://github.com/KrauseFx/fastlane/issues/240
|
|
56
|
-
|
|
57
58
|
unless error
|
|
58
|
-
|
|
59
59
|
if duration > 5
|
|
60
60
|
Helper.log.info "fastlane.tools just saved you #{duration} minutes! 🎉".green
|
|
61
61
|
else
|
data/lib/fastlane/runner.rb
CHANGED
|
@@ -4,7 +4,8 @@ module Fastlane
|
|
|
4
4
|
# This will take care of executing **one** lane.
|
|
5
5
|
# @param lane_name The name of the lane to execute
|
|
6
6
|
# @param platform The name of the platform to execute
|
|
7
|
-
|
|
7
|
+
# @param parameters [Hash] The parameters passed from the command line to the lane
|
|
8
|
+
def execute(lane, platform = nil, parameters = nil)
|
|
8
9
|
raise "No lane given" unless lane
|
|
9
10
|
|
|
10
11
|
ENV["FASTLANE_LANE_NAME"] = lane.to_s
|
|
@@ -20,7 +21,7 @@ module Fastlane
|
|
|
20
21
|
Actions.lane_context[Actions::SharedValues::PLATFORM_NAME] = platform # set this in any case: important
|
|
21
22
|
|
|
22
23
|
full_lane_name = [platform, lane].reject(&:nil?).join(' ')
|
|
23
|
-
Helper.log.info "Driving the lane '#{full_lane_name}'".green
|
|
24
|
+
Helper.log.info "Driving the lane '#{full_lane_name}' 🚀".green
|
|
24
25
|
Actions.lane_context[Actions::SharedValues::LANE_NAME] = full_lane_name
|
|
25
26
|
|
|
26
27
|
return_val = nil
|
|
@@ -36,8 +37,7 @@ module Fastlane
|
|
|
36
37
|
before_all_blocks[platform].call(lane) if (before_all_blocks[platform] and platform != nil)
|
|
37
38
|
before_all_blocks[nil].call(lane) if before_all_blocks[nil]
|
|
38
39
|
|
|
39
|
-
return_val = blocks[platform][lane].call
|
|
40
|
-
|
|
40
|
+
return_val = blocks[platform][lane].call(parameters || {}) # by default no parameters
|
|
41
41
|
|
|
42
42
|
# `after_all` is only called if no exception was raised before
|
|
43
43
|
# Call the platform specific before_all block and then the general one
|
data/lib/fastlane/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fastlane
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Felix Krause
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-07-
|
|
11
|
+
date: 2015-07-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: nokogiri
|
|
@@ -474,6 +474,7 @@ files:
|
|
|
474
474
|
- lib/fastlane/actions/xcodebuild.rb
|
|
475
475
|
- lib/fastlane/actions/xctool.rb
|
|
476
476
|
- lib/fastlane/actions_list.rb
|
|
477
|
+
- lib/fastlane/command_line_handler.rb
|
|
477
478
|
- lib/fastlane/configuration_helper.rb
|
|
478
479
|
- lib/fastlane/core_ext/string.rb
|
|
479
480
|
- lib/fastlane/dependency_checker.rb
|