fastlane 2.30.0.beta.20170511010018 → 2.30.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
  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: