fastlane 2.30.0.beta.20170511010018 → 2.30.0

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: 0f76caf3bad75d5177b285ac8624feb1846b0c1b
4
- data.tar.gz: 08261f81ffc2c03739618c2715d78bfbfbcd38be
3
+ metadata.gz: b24de7dca69e16aea8b48239f2eb105cf61d42e4
4
+ data.tar.gz: abee9d945caa12cec5f5b84736e196db6ed6270e
5
5
  SHA512:
6
- metadata.gz: 620042f62d93632a9233fd88151a6dd3d3668a523a67a1d06437cfbcc1a8c1f292492daeab0a0b8409dd22c70f82438702ab17e90f7f5ec8ab78f4116642d003
7
- data.tar.gz: 6650fb6d808951233134d7ed4eaa0708ce8cd8f4b37fc810cadcc1eb4601d5eeb661b036ffab00b26f2efb2156742e5e448b3bf75141729b9f6af17d77a67b85
6
+ metadata.gz: 108860da51b20af99859e93b50f377797d6991f2fbd18b91c07f56c70905c6c4429b02a84e510f96c146a72f8289f4ea198f06fe26cf58d261a4c055c8362234
7
+ data.tar.gz: b7c2b1d67ed298ca2424eadede430719972b3a6e86a03365b4619cbfd5980afe937f6a1c90bd6e00c8cccf757086a794704cb3800359cf53713fae8272742a29
data/README.md CHANGED
@@ -154,6 +154,12 @@ We have recently changed the destination service to which these metrics are repo
154
154
 
155
155
  You can easily opt-out of metrics collection by adding `opt_out_usage` at the top of your `Fastfile` or by setting the environment variable `FASTLANE_OPT_OUT_USAGE`. Participating helps us provide the best possible support for _fastlane_, so we hope you'll consider it a plus! :heavy_plus_sign:
156
156
 
157
+ ## Crash Reporting
158
+
159
+ In order to continuously improve stability, _fastlane_ will record crash reports with sanitized stacktraces. Sanitization removes personal information from the stacktrace and error message (including home directories, _fastlane_ path, gem paths, environment variables, and parameters).
160
+
161
+ You can easily opt-out of crash reporting by adding `opt_out_crash_reporting` at the top of your `Fastfile` or by setting the environment variable `FASTLANE_OPT_OUT_CRASH_REPORTING`. Just like metrics mentioned above, participating helps us provide the best possible support for _fastlane_, so we hope you'll consider it a plus! :heavy_plus_sign:
162
+
157
163
  ## Need Help?
158
164
 
159
165
  Please [submit an issue](https://github.com/fastlane/fastlane/issues) on GitHub and provide information about your setup.
@@ -250,7 +250,7 @@ module Deliver
250
250
  UI.user_error!("`trade_representative_contact_information` must be a hash", show_github_issues: true) unless info.kind_of?(Hash)
251
251
 
252
252
  TRADE_REPRESENTATIVE_CONTACT_INFORMATION_VALUES.each do |key, option_name|
253
- v.send("#{key}=", info[option_name].chomp) if info[option_name].chomp
253
+ v.send("#{key}=", info[option_name].to_s.chomp) if info[option_name]
254
254
  end
255
255
  end
256
256
 
@@ -0,0 +1,41 @@
1
+ module Fastlane
2
+ module Actions
3
+ class OptOutCrashReportingAction < Action
4
+ def self.run(params)
5
+ ENV['FASTLANE_OPT_OUT_CRASH_REPORTING'] = "YES"
6
+ UI.message("Disabled crash reporting")
7
+ end
8
+
9
+ def self.description
10
+ "This will prevent reports from being uploaded when _fastlane_ crashes"
11
+ end
12
+
13
+ def self.details
14
+ [
15
+ "By default, fastlane will send a report when it crashes",
16
+ "The stacktrace is sanitized so no personal information is sent.",
17
+ "Learn more at https://github.com/fastlane/fastlane#crash-reporting",
18
+ "Add `opt_out_crash_reporting` at the top of your Fastfile to disable crash reporting"
19
+ ].join(' ')
20
+ end
21
+
22
+ def self.authors
23
+ ['mpirri', 'ohayon']
24
+ end
25
+
26
+ def self.is_supported?(platform)
27
+ true
28
+ end
29
+
30
+ def self.example_code
31
+ [
32
+ 'opt_out_crash_reporting # add this to the top of your Fastfile'
33
+ ]
34
+ end
35
+
36
+ def self.category
37
+ :misc
38
+ end
39
+ end
40
+ end
41
+ end
@@ -57,8 +57,7 @@ module Fastlane
57
57
  update_needed.each do |tool_info|
58
58
  tool = tool_info[0]
59
59
  local_version = Gem::Version.new(highest_versions[tool].version)
60
- update_url = FastlaneCore::UpdateChecker.generate_fetch_url(tool)
61
- latest_version = FastlaneCore::UpdateChecker.fetch_latest(update_url)
60
+ latest_version = FastlaneCore::UpdateChecker.fetch_latest(tool)
62
61
  UI.message("Updating #{tool} from #{local_version} to #{latest_version} ... 🚀")
63
62
 
64
63
  # Approximate_recommendation will create a string like "~> 0.10" from a version 0.10.0, e.g. one that is valid for versions >= 0.10 and <1.0
@@ -62,17 +62,16 @@ module Fastlane
62
62
  table << "|--------|---------|\n"
63
63
  plugin_manager.available_plugins.each do |plugin|
64
64
  begin
65
- installed_version = Fastlane::ActionCollector.determine_version(plugin)
66
- update_url = FastlaneCore::UpdateChecker.generate_fetch_url(plugin)
67
- latest_version = FastlaneCore::UpdateChecker.fetch_latest(update_url)
68
- if Gem::Version.new(installed_version) == Gem::Version.new(latest_version)
69
- update_status = "✅ Up-To-Date"
70
- else
71
- update_status = "🚫 Update available"
65
+ installed_version = Fastlane::ActionCollector.determine_version(plugin)
66
+ latest_version = FastlaneCore::UpdateChecker.fetch_latest(plugin)
67
+ if Gem::Version.new(installed_version) == Gem::Version.new(latest_version)
68
+ update_status = "✅ Up-To-Date"
69
+ else
70
+ update_status = "🚫 Update available"
71
+ end
72
+ rescue
73
+ update_status = "💥 Check failed"
72
74
  end
73
- rescue
74
- update_status = "💥 Check failed"
75
- end
76
75
  table << "| #{plugin} | #{installed_version} | #{update_status} |\n"
77
76
  end
78
77
 
@@ -107,9 +106,8 @@ module Fastlane
107
106
 
108
107
  next unless fastlane_tools.include?(current_gem.name.to_sym)
109
108
  begin
110
- update_url = FastlaneCore::UpdateChecker.generate_fetch_url(current_gem.name)
111
- latest_version = FastlaneCore::UpdateChecker.fetch_latest(update_url)
112
- if Gem::Version.new(current_gem.version) == Gem::Version.new(latest_version)
109
+ latest_version = FastlaneCore::UpdateChecker.fetch_latest(current_gem.name)
110
+ if Gem::Version.new(current_gem.version) >= Gem::Version.new(latest_version)
113
111
  update_status = "✅ Up-To-Date"
114
112
  else
115
113
  update_status = "🚫 Update available"
@@ -253,6 +253,7 @@ module Fastlane
253
253
  end
254
254
  end
255
255
  rescue FastlaneCore::Interface::FastlaneError => e # user_error!
256
+ FastlaneCore::CrashReporter.report_crash(type: :user_error, exception: e, action: method_sym)
256
257
  collector.did_raise_error(method_sym)
257
258
  raise e
258
259
  rescue FastlaneCore::Interface::FastlaneTestFailure => e # test_failure!
@@ -260,6 +261,8 @@ module Fastlane
260
261
  rescue Exception => e # rubocop:disable Lint/RescueException
261
262
  # high chance this is actually FastlaneCore::Interface::FastlaneCrash, but can be anything else
262
263
  # Catches all exceptions, since some plugins might use system exits to get out
264
+ type = e.kind_of?(FastlaneCore::Interface::FastlaneCrash) ? :crash : :exception
265
+ FastlaneCore::CrashReporter.report_crash(type: type, exception: e, action: method_sym)
263
266
  collector.did_crash(method_sym)
264
267
  raise e
265
268
  end
@@ -1,4 +1,4 @@
1
1
  module Fastlane
2
- VERSION = '2.30.0.beta.20170511010018'.freeze
2
+ VERSION = '2.30.0'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  end
@@ -31,6 +31,9 @@ require 'fastlane_core/fastlane_folder'
31
31
  require 'fastlane_core/keychain_importer'
32
32
  require 'fastlane_core/swag'
33
33
  require 'fastlane_core/build_watcher'
34
+ require 'fastlane_core/crash_reporter/crash_reporter'
35
+ require 'fastlane_core/crash_reporter/crash_report_generator'
36
+ require 'fastlane_core/crash_reporter/backtrace_sanitizer'
34
37
 
35
38
  # Third Party code
36
39
  require 'colored'
@@ -4,10 +4,14 @@ module FastlaneCore
4
4
  # A reference to the actual configuration
5
5
  attr_accessor :config
6
6
 
7
+ # Path to the config file represented by the current object
8
+ attr_accessor :configfile_path
9
+
7
10
  # @param config [FastlaneCore::Configuration] is stored to save the resulting values
8
11
  # @param path [String] The path to the configuration file to use
9
12
  def initialize(config, path, block_for_missing)
10
13
  self.config = config
14
+ self.configfile_path = path
11
15
 
12
16
  @block_for_missing = block_for_missing
13
17
  content = File.read(path)
@@ -25,20 +29,20 @@ module FastlaneCore
25
29
  eval(content) # this is okay in this case
26
30
  # rubocop:enable Security/Eval
27
31
 
28
- print_resulting_config_values(path) # only on success
32
+ print_resulting_config_values # only on success
29
33
  rescue SyntaxError => ex
30
34
  line = ex.to_s.match(/\(eval\):(\d+)/)[1]
31
35
  UI.user_error!("Syntax error in your configuration file '#{path}' on line #{line}: #{ex}")
32
36
  end
33
37
  end
34
38
 
35
- def print_resulting_config_values(path)
39
+ def print_resulting_config_values
36
40
  require 'terminal-table'
37
- UI.success("Successfully loaded '#{File.expand_path(path)}' 📄")
41
+ UI.success("Successfully loaded '#{File.expand_path(self.configfile_path)}' 📄")
38
42
 
39
43
  # Show message when self.modified_values is empty
40
44
  if self.modified_values.empty?
41
- UI.important("No values defined in '#{path}'")
45
+ UI.important("No values defined in '#{self.configfile_path}'")
42
46
  return
43
47
  end
44
48
 
@@ -48,7 +52,7 @@ module FastlaneCore
48
52
 
49
53
  puts ""
50
54
  puts Terminal::Table.new(rows: FastlaneCore::PrintTable.transform_output(rows),
51
- title: "Detected Values from '#{path}'")
55
+ title: "Detected Values from '#{self.configfile_path}'")
52
56
  puts ""
53
57
  end
54
58
 
@@ -66,7 +70,24 @@ module FastlaneCore
66
70
  value = arguments.first
67
71
  value = yield if value.nil? && block_given?
68
72
 
69
- return if value.nil?
73
+ if value.nil?
74
+ unless block_given?
75
+ # The config file has something like this:
76
+ #
77
+ # clean
78
+ #
79
+ # without specifying a value for the method call
80
+ # or a block. This is most likely a user error
81
+ # So we tell the user that they can provide a value
82
+ warning = ["In the config file '#{self.configfile_path}'"]
83
+ warning << "you have the line #{method_sym}, but didn't provide"
84
+ warning << "any value. Make sure to append a value rght after the"
85
+ warning << "option name. Make sure to check the docs for more information"
86
+ UI.important(warning.join(" "))
87
+ end
88
+ return
89
+ end
90
+
70
91
  self.modified_values[method_sym] = value
71
92
 
72
93
  # to support frozen strings (e.g. ENV variables) too
@@ -0,0 +1,42 @@
1
+ module FastlaneCore
2
+ class BacktraceSanitizer
3
+ class << self
4
+ def sanitize(type: :unknown, backtrace: nil)
5
+ if type == :user_error || type == :crash
6
+ # If the crash is from `UI` we only want to include the stack trace
7
+ # up to the point where the crash was initiated.
8
+ # The two stack frames we are dropping are `method_missing` and
9
+ # the call to `crash!` or `user_error!`.
10
+ stack = backtrace.drop(2)
11
+ else
12
+ stack = backtrace
13
+ end
14
+
15
+ stack = remove_fastlane_gem_path(backtrace: stack)
16
+ stack = remove_gem_home_path(backtrace: stack)
17
+ remove_home_dir_mentions(backtrace: stack)
18
+ end
19
+
20
+ def remove_fastlane_gem_path(backtrace: nil)
21
+ fastlane_path = Gem.loaded_specs['fastlane'].full_gem_path
22
+ return backtrace unless fastlane_path
23
+ backtrace.map do |frame|
24
+ frame.gsub(fastlane_path, '[fastlane_path]')
25
+ end
26
+ end
27
+
28
+ def remove_gem_home_path(backtrace: nil)
29
+ return backtrace unless Gem.dir
30
+ backtrace.map do |frame|
31
+ frame.gsub(Gem.dir, '[gem_home]')
32
+ end
33
+ end
34
+
35
+ def remove_home_dir_mentions(backtrace: nil)
36
+ backtrace.map do |frame|
37
+ frame.gsub(Dir.home, '~')
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,50 @@
1
+ module FastlaneCore
2
+ class CrashReportGenerator
3
+ class << self
4
+ def types
5
+ {
6
+ user_error: '[USER_ERROR]',
7
+ crash: '[FASTLANE_CRASH]',
8
+ exception: '[EXCEPTION]',
9
+ connection_failure: '[CONNECTION_FAILURE]',
10
+ system: '[SYSTEM_ERROR]',
11
+ option_parser: '[OPTION_PARSER]',
12
+ invalid_command: '[INVALID_COMMAND]',
13
+ unknown: '[UNKNOWN]'
14
+ }
15
+ end
16
+
17
+ def generate(type: :unknown, exception: nil, action: nil)
18
+ message = crash_report_message(type: type, exception: exception)
19
+ crash_report_payload(message: message, action: action)
20
+ end
21
+
22
+ private
23
+
24
+ def crash_report_message(type: :unknown, exception: nil)
25
+ return if exception.nil?
26
+ backtrace = FastlaneCore::BacktraceSanitizer.sanitize(type: type, backtrace: exception.backtrace).join("\n")
27
+ message = types[type]
28
+ if type == :user_error
29
+ message += ': '
30
+ else
31
+ message += ": #{exception.message}"
32
+ end
33
+ message = message[0..100]
34
+ message += "\n" unless type == :user_error
35
+ message + backtrace
36
+ end
37
+
38
+ def crash_report_payload(message: '', action: nil)
39
+ {
40
+ 'eventTime' => Time.now.utc.to_datetime.rfc3339,
41
+ 'serviceContext' => {
42
+ 'service' => action || 'fastlane',
43
+ 'version' => Fastlane::VERSION
44
+ },
45
+ 'message' => message
46
+ }.to_json
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,82 @@
1
+ require 'faraday'
2
+ require 'json'
3
+
4
+ module FastlaneCore
5
+ class CrashReporter
6
+ class << self
7
+ @did_report_crash = false
8
+
9
+ @explitly_enabled_for_testing = false
10
+
11
+ def crash_report_path
12
+ File.join(FastlaneCore.fastlane_user_dir, 'latest_crash.json')
13
+ end
14
+
15
+ def enabled?
16
+ !FastlaneCore::Env.truthy?("FASTLANE_OPT_OUT_CRASH_REPORTING")
17
+ end
18
+
19
+ def report_crash(type: :unknown, exception: nil, action: nil)
20
+ return unless enabled?
21
+ return if @did_report_crash
22
+
23
+ # Do not run the crash reporter while tests are happening (it might try to send
24
+ # a crash report), unless we have explictly turned on the crash reporter because
25
+ # we want to test it
26
+ return if Helper.test? && !@explitly_enabled_for_testing
27
+
28
+ payload = CrashReportGenerator.generate(type: type, exception: exception, action: action)
29
+ send_report(payload: payload)
30
+ save_file(payload: payload)
31
+ show_message unless did_show_message?
32
+ @did_report_crash = true
33
+ end
34
+
35
+ def reset_crash_reporter_for_testing
36
+ @did_report_crash = false
37
+ end
38
+
39
+ def enable_for_testing
40
+ @explitly_enabled_for_testing = true
41
+ end
42
+
43
+ def disable_for_testing
44
+ @explitly_enabled_for_testing = false
45
+ end
46
+
47
+ private
48
+
49
+ def show_message
50
+ UI.message("Sending crash report...")
51
+ UI.message("The stacktrace is sanitized so no personal information is sent.")
52
+ UI.message("To see what we are sending, look here: #{crash_report_path}")
53
+ UI.message("Learn more at https://github.com/fastlane/fastlane#crash-reporting")
54
+ UI.message("You can disable crash reporting by adding `opt_out_crash_reporting` at the top of your Fastfile")
55
+ end
56
+
57
+ def did_show_message?
58
+ file_name = ".did_show_opt_out_crash_info"
59
+
60
+ path = File.join(FastlaneCore.fastlane_user_dir, file_name)
61
+ did_show = File.exist?(path)
62
+
63
+ return did_show if did_show
64
+
65
+ File.write(path, '1')
66
+ false
67
+ end
68
+
69
+ def save_file(payload: "{}")
70
+ File.write(crash_report_path, payload)
71
+ end
72
+
73
+ def send_report(payload: "{}")
74
+ connection = Faraday.new(url: "https://clouderrorreporting.googleapis.com/v1beta1/projects/fastlane-166414/events:report?key=AIzaSyAMACPfuI-wi4grJWEZjcPvhfV2Rhmddwo")
75
+ connection.post do |request|
76
+ request.headers['Content-Type'] = 'application/json'
77
+ request.body = payload
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -48,6 +48,7 @@ module Commander
48
48
  if FastlaneCore::Helper.test?
49
49
  raise e
50
50
  else
51
+ FastlaneCore::CrashReporter.report_crash(type: :invalid_command, exception: e, action: @program[:name])
51
52
  abort "#{e}. Use --help for more information"
52
53
  end
53
54
  rescue Interrupt => e
@@ -66,11 +67,13 @@ module Commander
66
67
  if FastlaneCore::Helper.test?
67
68
  raise e
68
69
  else
70
+ FastlaneCore::CrashReporter.report_crash(type: :option_parser, exception: e, action: @program[:name])
69
71
  abort e.to_s
70
72
  end
71
73
  rescue FastlaneCore::Interface::FastlaneError => e # user_error!
72
74
  collector.did_raise_error(@program[:name])
73
75
  show_github_issues(e.message) if e.show_github_issues
76
+ FastlaneCore::CrashReporter.report_crash(type: :user_error, exception: e, action: @program[:name])
74
77
  display_user_error!(e, e.message)
75
78
  rescue Errno::ENOENT => e
76
79
  # We're also printing the new-lines, as otherwise the message is not very visible in-between the error and the stacktrace
@@ -78,6 +81,7 @@ module Commander
78
81
  FastlaneCore::UI.important("Error accessing file, this might be due to fastlane's directory handling")
79
82
  FastlaneCore::UI.important("Check out https://docs.fastlane.tools/advanced/#directory-behavior for more details")
80
83
  puts ""
84
+ FastlaneCore::CrashReporter.report_crash(type: :system, exception: e, action: @program[:name])
81
85
  raise e
82
86
  rescue FastlaneCore::Interface::FastlaneTestFailure => e # test_failure!
83
87
  display_user_error!(e, e.to_s)
@@ -87,9 +91,12 @@ module Commander
87
91
  if e.message.include? 'Connection reset by peer - SSL_connect'
88
92
  handle_tls_error!(e)
89
93
  else
94
+ FastlaneCore::CrashReporter.report_crash(type: :connection_failure, exception: e, action: @program[:name])
90
95
  handle_unknown_error!(e)
91
96
  end
92
97
  rescue => e # high chance this is actually FastlaneCore::Interface::FastlaneCrash, but can be anything else
98
+ type = e.kind_of?(FastlaneCore::Interface::FastlaneCrash) ? :crash : :exception
99
+ FastlaneCore::CrashReporter.report_crash(type: type, exception: e, action: @program[:name])
93
100
  collector.did_crash(@program[:name])
94
101
  handle_unknown_error!(e)
95
102
  ensure
@@ -112,7 +112,11 @@ module FastlaneCore
112
112
  end
113
113
 
114
114
  def self.fetch_latest(gem_name)
115
- JSON.parse(Excon.get("https://rubygems.org/api/v1/gems/#{gem_name}.json").body)["version"]
115
+ JSON.parse(Excon.get(generate_fetch_url(gem_name)).body)["version"]
116
+ end
117
+
118
+ def self.generate_fetch_url(gem_name)
119
+ "https://rubygems.org/api/v1/gems/#{gem_name}.json"
116
120
  end
117
121
 
118
122
  # (optional) Returns the app identifier for the current tool
@@ -16,7 +16,9 @@ module Match
16
16
 
17
17
  unless password
18
18
  if !UI.interactive?
19
- UI.error "No password found neither in environment nor in local keychain. Bailing out as in non interactive mode."
19
+ UI.error "Neither the MATCH_PASSWORD environment variable nor the local keychain contained a password."
20
+ UI.error "Bailing out instead of asking for a password, since this is non-interactive mode."
21
+ UI.user_error!("Try setting the MATCH_PASSWORD environment variable, or temporarily enable interactive mode to store a password.")
20
22
  else
21
23
  UI.important "Enter the passphrase that should be used to encrypt/decrypt your certificates"
22
24
  UI.important "This passphrase is specific per repository and will be stored in your local keychain"
@@ -6,6 +6,13 @@
6
6
  // Copyright © 2015 Felix Krause. All rights reserved.
7
7
  //
8
8
 
9
+ // -----------------------------------------------------
10
+ // IMPORTANT: When modifying this file, make sure to
11
+ // increment the version number at the very
12
+ // bottom of the file to notify users about
13
+ // the new SnapshotHelper.swift
14
+ // -----------------------------------------------------
15
+
9
16
  import Foundation
10
17
  import XCTest
11
18
 
@@ -163,4 +170,4 @@ extension XCUIElement {
163
170
 
164
171
  // Please don't remove the lines below
165
172
  // They are used to detect outdated configuration files
166
- // SnapshotHelperVersion [1.3]
173
+ // SnapshotHelperVersion [1.4]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.30.0.beta.20170511010018
4
+ version: 2.30.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
@@ -922,6 +922,7 @@ files:
922
922
  - fastlane/lib/fastlane/actions/number_of_commits.rb
923
923
  - fastlane/lib/fastlane/actions/oclint.rb
924
924
  - fastlane/lib/fastlane/actions/onesignal.rb
925
+ - fastlane/lib/fastlane/actions/opt_out_crash_reporting.rb
925
926
  - fastlane/lib/fastlane/actions/opt_out_usage.rb
926
927
  - fastlane/lib/fastlane/actions/pem.rb
927
928
  - fastlane/lib/fastlane/actions/pilot.rb
@@ -1082,6 +1083,9 @@ files:
1082
1083
  - fastlane_core/lib/fastlane_core/configuration/configuration.rb
1083
1084
  - fastlane_core/lib/fastlane_core/configuration/configuration_file.rb
1084
1085
  - fastlane_core/lib/fastlane_core/core_ext/string.rb
1086
+ - fastlane_core/lib/fastlane_core/crash_reporter/backtrace_sanitizer.rb
1087
+ - fastlane_core/lib/fastlane_core/crash_reporter/crash_report_generator.rb
1088
+ - fastlane_core/lib/fastlane_core/crash_reporter/crash_reporter.rb
1085
1089
  - fastlane_core/lib/fastlane_core/device_manager.rb
1086
1090
  - fastlane_core/lib/fastlane_core/env.rb
1087
1091
  - fastlane_core/lib/fastlane_core/fastlane_folder.rb
@@ -1357,23 +1361,23 @@ metadata:
1357
1361
  post_install_message:
1358
1362
  rdoc_options: []
1359
1363
  require_paths:
1360
- - pem/lib
1361
- - produce/lib
1362
- - gym/lib
1363
- - snapshot/lib
1364
- - sigh/lib
1365
- - pilot/lib
1366
- - supply/lib
1367
1364
  - cert/lib
1365
+ - credentials_manager/lib
1368
1366
  - deliver/lib
1369
- - match/lib
1370
- - fastlane_core/lib
1371
- - spaceship/lib
1372
1367
  - fastlane/lib
1368
+ - fastlane_core/lib
1373
1369
  - frameit/lib
1374
- - screengrab/lib
1375
- - credentials_manager/lib
1370
+ - gym/lib
1371
+ - match/lib
1372
+ - pem/lib
1373
+ - pilot/lib
1374
+ - produce/lib
1376
1375
  - scan/lib
1376
+ - screengrab/lib
1377
+ - sigh/lib
1378
+ - snapshot/lib
1379
+ - spaceship/lib
1380
+ - supply/lib
1377
1381
  required_ruby_version: !ruby/object:Gem::Requirement
1378
1382
  requirements:
1379
1383
  - - ">="
@@ -1381,14 +1385,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
1381
1385
  version: 2.0.0
1382
1386
  required_rubygems_version: !ruby/object:Gem::Requirement
1383
1387
  requirements:
1384
- - - ">"
1388
+ - - ">="
1385
1389
  - !ruby/object:Gem::Version
1386
- version: 1.3.1
1390
+ version: '0'
1387
1391
  requirements: []
1388
1392
  rubyforge_project:
1389
- rubygems_version: 2.4.5.2
1393
+ rubygems_version: 2.5.2
1390
1394
  signing_key:
1391
1395
  specification_version: 4
1392
1396
  summary: The easiest way to automate beta deployments and releases for your iOS and
1393
1397
  Android apps
1394
1398
  test_files: []
1399
+ has_rdoc: