fastlane 2.142.0 → 2.146.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +80 -80
  3. data/credentials_manager/lib/credentials_manager/appfile_config.rb +4 -0
  4. data/deliver/lib/deliver/app_screenshot.rb +1 -0
  5. data/deliver/lib/deliver/options.rb +30 -1
  6. data/deliver/lib/deliver/setup.rb +4 -4
  7. data/fastlane/lib/fastlane/actions/automatic_code_signing.rb +7 -1
  8. data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +3 -0
  9. data/fastlane/lib/fastlane/actions/crashlytics.rb +14 -2
  10. data/fastlane/lib/fastlane/actions/create_pull_request.rb +7 -1
  11. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +10 -4
  12. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +22 -6
  13. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +23 -7
  14. data/fastlane/lib/fastlane/actions/frame_screenshots.rb +2 -1
  15. data/fastlane/lib/fastlane/actions/get_version_number.rb +1 -1
  16. data/fastlane/lib/fastlane/actions/pod_lib_lint.rb +7 -1
  17. data/fastlane/lib/fastlane/actions/s3.rb +3 -289
  18. data/fastlane/lib/fastlane/actions/setup_ci.rb +1 -1
  19. data/fastlane/lib/fastlane/actions/setup_jenkins.rb +11 -2
  20. data/fastlane/lib/fastlane/actions/slather.rb +1 -1
  21. data/fastlane/lib/fastlane/actions/swiftlint.rb +28 -7
  22. data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +203 -0
  23. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +1 -1
  24. data/fastlane/lib/fastlane/actions/verify_build.rb +1 -1
  25. data/fastlane/lib/fastlane/helper/s3_client_helper.rb +61 -0
  26. data/fastlane/lib/fastlane/version.rb +1 -1
  27. data/fastlane/swift/Deliverfile.swift +1 -1
  28. data/fastlane/swift/Fastlane.swift +147 -8
  29. data/fastlane/swift/Gymfile.swift +1 -1
  30. data/fastlane/swift/Matchfile.swift +1 -1
  31. data/fastlane/swift/MatchfileProtocol.swift +17 -1
  32. data/fastlane/swift/Precheckfile.swift +1 -1
  33. data/fastlane/swift/Scanfile.swift +1 -1
  34. data/fastlane/swift/ScanfileProtocol.swift +5 -1
  35. data/fastlane/swift/Screengrabfile.swift +1 -1
  36. data/fastlane/swift/Snapshotfile.swift +1 -1
  37. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +9 -0
  38. data/fastlane_core/lib/fastlane_core/device_manager.rb +3 -3
  39. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +1 -0
  40. data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +15 -2
  41. data/frameit/lib/frameit/commands_generator.rb +25 -0
  42. data/frameit/lib/frameit/config_parser.rb +31 -9
  43. data/frameit/lib/frameit/device.rb +90 -0
  44. data/frameit/lib/frameit/device_types.rb +121 -5
  45. data/frameit/lib/frameit/editor.rb +29 -41
  46. data/frameit/lib/frameit/offsets.rb +8 -1
  47. data/frameit/lib/frameit/options.rb +81 -54
  48. data/frameit/lib/frameit/runner.rb +17 -7
  49. data/frameit/lib/frameit/screenshot.rb +39 -47
  50. data/frameit/lib/frameit/template_finder.rb +15 -12
  51. data/gym/lib/gym/generators/package_command_generator.rb +4 -0
  52. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +5 -0
  53. data/gym/lib/gym/runner.rb +14 -0
  54. data/match/lib/match/change_password.rb +1 -1
  55. data/match/lib/match/encryption.rb +4 -0
  56. data/match/lib/match/importer.rb +37 -20
  57. data/match/lib/match/module.rb +1 -1
  58. data/match/lib/match/nuke.rb +5 -1
  59. data/match/lib/match/options.rb +18 -0
  60. data/match/lib/match/runner.rb +4 -0
  61. data/match/lib/match/setup.rb +1 -1
  62. data/match/lib/match/storage.rb +4 -0
  63. data/match/lib/match/storage/s3_storage.rb +167 -0
  64. data/pilot/lib/pilot/build_manager.rb +15 -4
  65. data/pilot/lib/pilot/options.rb +8 -0
  66. data/produce/lib/produce/developer_center.rb +11 -2
  67. data/produce/lib/produce/itunes_connect.rb +11 -3
  68. data/produce/lib/produce/options.rb +12 -0
  69. data/scan/lib/scan/options.rb +5 -0
  70. data/scan/lib/scan/test_command_generator.rb +5 -1
  71. data/screengrab/lib/screengrab/runner.rb +12 -4
  72. data/snapshot/lib/snapshot/reports_generator.rb +4 -0
  73. data/spaceship/lib/spaceship/connect_api/models/app.rb +11 -0
  74. data/spaceship/lib/spaceship/connect_api/models/build.rb +1 -2
  75. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +2 -0
  76. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +23 -0
  77. data/spaceship/lib/spaceship/portal/app_service.rb +2 -2
  78. data/spaceship/lib/spaceship/portal/portal_client.rb +13 -0
  79. data/spaceship/lib/spaceship/tunes/app_version.rb +6 -1
  80. data/spaceship/lib/spaceship/tunes/application.rb +2 -1
  81. data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -2
  82. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +52 -16
  83. data/supply/lib/supply/client.rb +4 -4
  84. data/supply/lib/supply/setup.rb +5 -3
  85. metadata +34 -17
  86. data/gym/lib/gym/.code_signing_mapping.rb.swp +0 -0
@@ -93,7 +93,7 @@ module Fastlane
93
93
  env_name: "FL_SETUP_CI_PROVIDER",
94
94
  description: "CI provider. If none is set, the provider is detected automatically",
95
95
  is_string: true,
96
- default_value: false,
96
+ optional: true,
97
97
  verify_block: proc do |value|
98
98
  value = value.to_s
99
99
  # Validate both 'travis' and 'circleci' for backwards compatibility, even
@@ -14,7 +14,10 @@ module Fastlane
14
14
  "SCAN_DERIVED_DATA_PATH",
15
15
  "SCAN_OUTPUT_DIRECTORY",
16
16
  "SCAN_RESULT_BUNDLE",
17
- "XCODE_DERIVED_DATA_PATH"
17
+ "XCODE_DERIVED_DATA_PATH",
18
+ "MATCH_KEYCHAIN_NAME",
19
+ "MATCH_KEYCHAIN_PASSWORD",
20
+ "MATCH_READONLY"
18
21
  ].freeze
19
22
 
20
23
  def self.run(params)
@@ -40,6 +43,9 @@ module Fastlane
40
43
  add_to_search_list: params[:add_keychain_to_search_list],
41
44
  set_default: params[:set_default_keychain]
42
45
  )
46
+ ENV['MATCH_KEYCHAIN_NAME'] ||= keychain_path
47
+ ENV['MATCH_KEYCHAIN_PASSWORD'] ||= params[:keychain_password]
48
+ ENV["MATCH_READONLY"] ||= true.to_s
43
49
  end
44
50
 
45
51
  # Code signing identity
@@ -90,6 +96,7 @@ module Fastlane
90
96
  def self.details
91
97
  list = <<-LIST.markdown_list(true)
92
98
  Adds and unlocks keychains from Jenkins 'Keychains and Provisioning Profiles Plugin'
99
+ Sets unlocked keychain to be used by Match
93
100
  Sets code signing identity from Jenkins 'Keychains and Provisioning Profiles Plugin'
94
101
  Sets output directory to './output' (gym, scan and backup_xcarchive)
95
102
  Sets derived data path to './derivedData' (xcodebuild, gym, scan and clear_derived_data, carthage)
@@ -99,7 +106,9 @@ module Fastlane
99
106
  [
100
107
  list,
101
108
  "This action helps with Jenkins integration. Creates own derived data for each job. All build results like IPA files and archives will be stored in the `./output` directory.",
102
- "The action also works with [Keychains and Provisioning Profiles Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Keychains+and+Provisioning+Profiles+Plugin), the selected keychain will be automatically unlocked and the selected code signing identity will be used. By default this action will only work when _fastlane_ is executed on a CI system."
109
+ "The action also works with [Keychains and Provisioning Profiles Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Keychains+and+Provisioning+Profiles+Plugin), the selected keychain will be automatically unlocked and the selected code signing identity will be used.",
110
+ "[Match](https://docs.fastlane.tools/actions/match/) will be also set up to use the unlocked keychain and set in read-only mode, if its environment variables were not yet defined.",
111
+ "By default this action will only work when _fastlane_ is executed on a CI system."
103
112
  ].join("\n")
104
113
  end
105
114
 
@@ -241,7 +241,7 @@ module Fastlane
241
241
  FastlaneCore::ConfigItem.new(key: :ignore,
242
242
  env_name: "FL_SLATHER_IGNORE",
243
243
  description: "Tell slather to ignore files matching a path or any path from an array of paths",
244
- is_string: false,
244
+ type: Array,
245
245
  optional: true),
246
246
  FastlaneCore::ConfigItem.new(key: :verbose,
247
247
  env_name: "FL_SLATHER_VERBOSE",
@@ -13,13 +13,7 @@ module Fastlane
13
13
 
14
14
  command = (params[:executable] || "swiftlint").dup
15
15
  command << " #{params[:mode]}"
16
- command << " --path #{params[:path].shellescape}" if params[:path]
17
- command << supported_option_switch(params, :strict, "0.9.2", true)
18
- command << " --config #{params[:config_file].shellescape}" if params[:config_file]
19
- command << " --reporter #{params[:reporter]}" if params[:reporter]
20
- command << supported_option_switch(params, :quiet, "0.9.0", true)
21
- command << supported_option_switch(params, :format, "0.11.0", true) if params[:mode] == :autocorrect
22
- command << " --compiler-log-path #{params[:compiler_log_path].shellescape}" if params[:compiler_log_path]
16
+ command << optional_flags(params)
23
17
 
24
18
  if params[:files]
25
19
  if version < Gem::Version.new('0.5.1')
@@ -41,12 +35,33 @@ module Fastlane
41
35
  end
42
36
  end
43
37
 
38
+ def self.optional_flags(params)
39
+ command = ""
40
+ command << " --path #{params[:path].shellescape}" if params[:path]
41
+ command << supported_option_switch(params, :strict, "0.9.2", true)
42
+ command << " --config #{params[:config_file].shellescape}" if params[:config_file]
43
+ command << " --reporter #{params[:reporter]}" if params[:reporter]
44
+ command << supported_option_switch(params, :quiet, "0.9.0", true)
45
+ command << supported_option_switch(params, :format, "0.11.0", true) if params[:mode] == :autocorrect
46
+ command << supported_no_cache_option(params) if params[:no_cache]
47
+ command << " --compiler-log-path #{params[:compiler_log_path].shellescape}" if params[:compiler_log_path]
48
+ return command
49
+ end
50
+
44
51
  # Get current SwiftLint version
45
52
  def self.swiftlint_version(executable: nil)
46
53
  binary = executable || 'swiftlint'
47
54
  Gem::Version.new(`#{binary} version`.chomp)
48
55
  end
49
56
 
57
+ def self.supported_no_cache_option(params)
58
+ if params[:mode] == :autocorrect || params[:mode] == :lint
59
+ return " --no-cache"
60
+ else
61
+ return ""
62
+ end
63
+ end
64
+
50
65
  # Return "--option" switch if option is on and current SwiftLint version is greater or equal than min version.
51
66
  # Return "" otherwise.
52
67
  def self.supported_option_switch(params, option, min_version, can_ignore = false)
@@ -139,6 +154,12 @@ module Fastlane
139
154
  is_string: false,
140
155
  type: Boolean,
141
156
  optional: true),
157
+ FastlaneCore::ConfigItem.new(key: :no_cache,
158
+ description: "Ignore the cache when mode is :autocorrect or :lint",
159
+ default_value: false,
160
+ is_string: false,
161
+ type: Boolean,
162
+ optional: true),
142
163
  FastlaneCore::ConfigItem.new(key: :compiler_log_path,
143
164
  description: "Compiler log path when mode is :analyze",
144
165
  is_string: true,
@@ -0,0 +1,203 @@
1
+ require 'xcodeproj'
2
+ module Fastlane
3
+ module Actions
4
+ class UpdateCodeSigningSettingsAction < Action
5
+ def self.run(params)
6
+ FastlaneCore::PrintTable.print_values(config: params, title: "Summary for code signing settings")
7
+ path = params[:path]
8
+ path = File.join(File.expand_path(path), "project.pbxproj")
9
+
10
+ project = Xcodeproj::Project.open(params[:path])
11
+ UI.user_error!("Could not find path to project config '#{path}'. Pass the path to your project (not workspace)!") unless File.exist?(path)
12
+ UI.message("Updating the Automatic Codesigning flag to #{params[:use_automatic_signing] ? 'enabled' : 'disabled'} for the given project '#{path}'")
13
+
14
+ unless project.root_object.attributes["TargetAttributes"]
15
+ UI.user_error!("Seems to be a very old project file format - please open your project file in a more recent version of Xcode")
16
+ return false
17
+ end
18
+
19
+ changed_targets = []
20
+ changed_build_configurations = []
21
+
22
+ project.targets.each do |target|
23
+ if params[:targets]
24
+ unless params[:targets].include?(target.name)
25
+ UI.important("Skipping #{target.name} not selected (#{params[:targets].join(',')})")
26
+ next
27
+ end
28
+ end
29
+
30
+ target.build_configurations.each do |config|
31
+ if params[:build_configurations]
32
+ unless params[:build_configurations].include?(config.name)
33
+ UI.important("Skipping #{config.name} not selected (#{params[:build_configurations].join(',')})")
34
+ next
35
+ end
36
+ end
37
+
38
+ style_value = params[:use_automatic_signing] ? 'Automatic' : 'Manual'
39
+ set_build_setting(config, "CODE_SIGN_STYLE", style_value)
40
+
41
+ if params[:team_id]
42
+ set_build_setting(config, "DEVELOPMENT_TEAM", params[:team_id])
43
+ UI.important("Set Team id to: #{params[:team_id]} for target: #{target.name} for build configuration: #{config.name}")
44
+ end
45
+ if params[:code_sign_identity]
46
+ set_build_setting(config, "CODE_SIGN_IDENTITY", params[:code_sign_identity])
47
+ UI.important("Set Code Sign identity to: #{params[:code_sign_identity]} for target: #{target.name} for build configuration: #{config.name}")
48
+ end
49
+ if params[:profile_name]
50
+ set_build_setting(config, "PROVISIONING_PROFILE_SPECIFIER", params[:profile_name])
51
+ UI.important("Set Provisioning Profile name to: #{params[:profile_name]} for target: #{target.name} for build configuration: #{config.name}")
52
+ end
53
+ # Since Xcode 8, this is no longer needed, you simply use PROVISIONING_PROFILE_SPECIFIER
54
+ if params[:profile_uuid]
55
+ set_build_setting(config, "PROVISIONING_PROFILE", params[:profile_uuid])
56
+ UI.important("Set Provisioning Profile UUID to: #{params[:profile_uuid]} for target: #{target.name} for build configuration: #{config.name}")
57
+ end
58
+ if params[:bundle_identifier]
59
+ set_build_setting(config, "PRODUCT_BUNDLE_IDENTIFIER", params[:bundle_identifier])
60
+ UI.important("Set Bundle identifier to: #{params[:bundle_identifier]} for target: #{target.name} for build configuration: #{config.name}")
61
+ end
62
+
63
+ changed_build_configurations << config.name
64
+ end
65
+
66
+ changed_targets << target.name
67
+ end
68
+ project.save
69
+
70
+ if changed_targets.empty?
71
+ UI.important("None of the specified targets has been modified")
72
+ UI.important("available targets:")
73
+ project.targets.each do |target|
74
+ UI.important("\t* #{target.name}")
75
+ end
76
+ else
77
+ UI.success("Successfully updated project settings to use Code Sign Style = '#{params[:use_automatic_signing] ? 'Automatic' : 'Manual'}'")
78
+ UI.success("Modified Targets:")
79
+ changed_targets.each do |target|
80
+ UI.success("\t * #{target}")
81
+ end
82
+
83
+ UI.success("Modified Build Configurations:")
84
+ changed_build_configurations.each do |name|
85
+ UI.success("\t * #{name}")
86
+ end
87
+ end
88
+
89
+ params[:use_automatic_signing]
90
+ end
91
+
92
+ def self.set_build_setting(configuration, name, value)
93
+ # Iterate over any keys that start with this name
94
+ # This will also set keys that have filtering like [sdk=iphoneos*]
95
+ keys = configuration.build_settings.keys.select { |key| key.to_s.match(/#{name}.*/) }
96
+ keys.each do |key|
97
+ configuration.build_settings[key] = value
98
+ end
99
+
100
+ # Explicitly set the key with value if keys don't exist
101
+ configuration.build_settings[name] = value
102
+ end
103
+
104
+ def self.description
105
+ "Configures Xcode's Codesigning options"
106
+ end
107
+
108
+ def self.details
109
+ "Configures Xcode's Codesigning options of all targets in the project"
110
+ end
111
+
112
+ def self.available_options
113
+ [
114
+ FastlaneCore::ConfigItem.new(key: :path,
115
+ env_name: "FL_PROJECT_SIGNING_PROJECT_PATH",
116
+ description: "Path to your Xcode project",
117
+ code_gen_sensitive: true,
118
+ default_value: Dir['*.xcodeproj'].first,
119
+ default_value_dynamic: true,
120
+ verify_block: proc do |value|
121
+ UI.user_error!("Path is invalid") unless File.exist?(File.expand_path(value))
122
+ end),
123
+ FastlaneCore::ConfigItem.new(key: :use_automatic_signing,
124
+ env_name: "FL_PROJECT_USE_AUTOMATIC_SIGNING",
125
+ description: "Defines if project should use automatic signing",
126
+ is_string: false,
127
+ default_value: false),
128
+ FastlaneCore::ConfigItem.new(key: :team_id,
129
+ env_name: "FASTLANE_TEAM_ID",
130
+ optional: true,
131
+ description: "Team ID, is used when upgrading project",
132
+ is_string: true),
133
+ FastlaneCore::ConfigItem.new(key: :targets,
134
+ env_name: "FL_PROJECT_SIGNING_TARGETS",
135
+ optional: true,
136
+ type: Array,
137
+ description: "Specify targets you want to toggle the signing mech. (default to all targets)",
138
+ is_string: false),
139
+ FastlaneCore::ConfigItem.new(key: :build_configurations,
140
+ env_name: "FL_PROJECT_SIGNING_BUILD_CONFIGURATIONS",
141
+ optional: true,
142
+ type: Array,
143
+ description: "Specify build_configurations you want to toggle the signing mech. (default to all targets)",
144
+ is_string: false),
145
+ FastlaneCore::ConfigItem.new(key: :code_sign_identity,
146
+ env_name: "FL_CODE_SIGN_IDENTITY",
147
+ description: "Code signing identity type (iPhone Developer, iPhone Distribution)",
148
+ optional: true,
149
+ is_string: true),
150
+ FastlaneCore::ConfigItem.new(key: :profile_name,
151
+ env_name: "FL_PROVISIONING_PROFILE_SPECIFIER",
152
+ description: "Provisioning profile name to use for code signing",
153
+ optional: true,
154
+ is_string: true),
155
+ FastlaneCore::ConfigItem.new(key: :profile_uuid,
156
+ env_name: "FL_PROVISIONING_PROFILE",
157
+ description: "Provisioning profile UUID to use for code signing",
158
+ optional: true,
159
+ is_string: true),
160
+ FastlaneCore::ConfigItem.new(key: :bundle_identifier,
161
+ env_name: "FL_APP_IDENTIFIER",
162
+ description: "Application Product Bundle Identifier",
163
+ optional: true,
164
+ is_string: true)
165
+ ]
166
+ end
167
+
168
+ def self.output
169
+ end
170
+
171
+ def self.example_code
172
+ [
173
+ ' # manual code signing
174
+ update_code_signing_settings(
175
+ use_automatic_signing: false,
176
+ path: "demo-project/demo/demo.xcodeproj"
177
+ )',
178
+ ' # automatic code signing
179
+ update_code_signing_settings(
180
+ use_automatic_signing: true,
181
+ path: "demo-project/demo/demo.xcodeproj"
182
+ )'
183
+ ]
184
+ end
185
+
186
+ def self.category
187
+ :code_signing
188
+ end
189
+
190
+ def self.return_value
191
+ "The current status (boolean) of codesigning after modification"
192
+ end
193
+
194
+ def self.authors
195
+ ["mathiasAichinger", "hjanuschka", "p4checo", "portellaa", "aeons", "att55"]
196
+ end
197
+
198
+ def self.is_supported?(platform)
199
+ [:ios, :mac].include?(platform)
200
+ end
201
+ end
202
+ end
203
+ end
@@ -130,7 +130,7 @@ module Fastlane
130
130
  end
131
131
 
132
132
  def self.find_binary_path(params)
133
- params[:binary_path] ||= (Dir["/Applications/Fabric.app/**/upload-symbols"] + Dir["./Pods/**/upload-symbols"]).last
133
+ params[:binary_path] ||= (Dir["/Applications/Fabric.app/**/upload-symbols"] + Dir["./Pods/Fabric/upload-symbols"] + Dir["./Pods/FirebaseCrashlytics/upload-symbols"]).last
134
134
  UI.user_error!("Failed to find Fabric's upload_symbols binary at /Applications/Fabric.app/**/upload-symbols or ./Pods/**/upload-symbols. Please specify the location of the binary explicitly by using the binary_path option") unless params[:binary_path]
135
135
 
136
136
  params[:binary_path] = File.expand_path(params[:binary_path])
@@ -46,7 +46,7 @@ module Fastlane
46
46
 
47
47
  parts = cert_info.strip.split(/\r?\n/)
48
48
  parts.each do |part|
49
- if part =~ /\AAuthority=i(Phone|OS)/
49
+ if part =~ /\AAuthority=(iPhone|iOS|Apple)\s(Distribution|Development)/
50
50
  type = part.split('=')[1].split(':')[0]
51
51
  values['provisioning_type'] = type.downcase =~ /distribution/i ? "distribution" : "development"
52
52
  end
@@ -0,0 +1,61 @@
1
+ require 'aws-sdk-s3'
2
+
3
+ module Fastlane
4
+ module Helper
5
+ class S3ClientHelper
6
+ attr_reader :client
7
+
8
+ def initialize(access_key: nil, secret_access_key: nil, region: nil)
9
+ creds = Aws::Credentials.new(access_key, secret_access_key)
10
+ Aws.config.update(
11
+ region: region,
12
+ credentials: creds
13
+ )
14
+ end
15
+
16
+ def list_buckets
17
+ return client.list_buckets
18
+ end
19
+
20
+ def upload_file(bucket_name, file_name, file_data, acl)
21
+ bucket = find_bucket!(bucket_name)
22
+ details = {
23
+ acl: acl,
24
+ key: file_name,
25
+ body: file_data
26
+ }
27
+ obj = bucket.put_object(details)
28
+
29
+ # When you enable versioning on a S3 bucket,
30
+ # writing to an object will create an object version
31
+ # instead of replacing the existing object.
32
+ # http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/ObjectVersion.html
33
+ if obj.kind_of?(Aws::S3::ObjectVersion)
34
+ obj = obj.object
35
+ end
36
+
37
+ # Return public url
38
+ obj.public_url.to_s
39
+ end
40
+
41
+ def delete_file(bucket_name, file_name)
42
+ bucket = find_bucket!(bucket_name)
43
+ file = bucket.object(file_name)
44
+ file.delete
45
+ end
46
+
47
+ def find_bucket!(bucket_name)
48
+ bucket = Aws::S3::Bucket.new(bucket_name, client: client)
49
+ raise "Bucket '#{bucket_name}' not found" unless bucket.exists?
50
+
51
+ return bucket
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ def client
58
+ @client ||= Aws::S3::Client.new
59
+ end
60
+ end
61
+ end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.142.0'.freeze
2
+ VERSION = '2.146.1'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.142.0
21
+ // Generated with fastlane 2.146.1
@@ -2122,7 +2122,7 @@ func copyArtifacts(keepOriginal: Bool = true,
2122
2122
  }
2123
2123
 
2124
2124
  /**
2125
- Upload a new build to [Crashlytics Beta](http://try.crashlytics.com/beta/)
2125
+ Refer to [Firebase App Distribution](https://appdistro.page.link/fastlane-repo)
2126
2126
 
2127
2127
  - parameters:
2128
2128
  - ipaPath: Path to your IPA file. Optional if you use the _gym_ or _xcodebuild_ action
@@ -2137,6 +2137,10 @@ func copyArtifacts(keepOriginal: Bool = true,
2137
2137
  - notifications: Crashlytics notification option (true/false)
2138
2138
  - debug: Crashlytics debug option (true/false)
2139
2139
 
2140
+ Crashlytics Beta has been deprecated and replaced with Firebase App Distribution.
2141
+ Beta will continue working until May 4, 2020.
2142
+ Check out the [Firebase App Distribution docs](https://github.com/fastlane/fastlane-plugin-firebase_app_distribution) to get started.
2143
+
2140
2144
  Additionally, you can specify `notes`, `emails`, `groups` and `notifications`.
2141
2145
  Distributing to Groups: When using the `groups` parameter, it's important to use the group **alias** names for each group you'd like to distribute to. A group's alias can be found in the web UI. If you're viewing the Beta page, you can open the groups dialog by clicking the 'Manage Groups' button.
2142
2146
  This action uses the `submit` binary provided by the Crashlytics framework. If the binary is not found in its usual path, you'll need to specify the path manually by using the `crashlytics_path` option.
@@ -2211,6 +2215,7 @@ func createAppOnManagedPlayStore(jsonKey: String? = nil,
2211
2215
  - appVersion: Initial version number (e.g. '1.0')
2212
2216
  - sku: SKU Number (e.g. '1234')
2213
2217
  - platform: The platform to use (optional)
2218
+ - platforms: The platforms to use (optional)
2214
2219
  - language: Primary Language (e.g. 'English', 'German')
2215
2220
  - companyName: The name of your company. Only required if it's the first app you create
2216
2221
  - skipItc: Skip the creation of the app on App Store Connect
@@ -2234,6 +2239,7 @@ func createAppOnline(username: String,
2234
2239
  appVersion: String? = nil,
2235
2240
  sku: String,
2236
2241
  platform: String = "ios",
2242
+ platforms: [String]? = nil,
2237
2243
  language: String = "English",
2238
2244
  companyName: String? = nil,
2239
2245
  skipItc: Bool = false,
@@ -2252,6 +2258,7 @@ func createAppOnline(username: String,
2252
2258
  RubyCommand.Argument(name: "app_version", value: appVersion),
2253
2259
  RubyCommand.Argument(name: "sku", value: sku),
2254
2260
  RubyCommand.Argument(name: "platform", value: platform),
2261
+ RubyCommand.Argument(name: "platforms", value: platforms),
2255
2262
  RubyCommand.Argument(name: "language", value: language),
2256
2263
  RubyCommand.Argument(name: "company_name", value: companyName),
2257
2264
  RubyCommand.Argument(name: "skip_itc", value: skipItc),
@@ -2312,6 +2319,7 @@ func createKeychain(name: String? = nil,
2312
2319
  - repo: The name of the repository you want to submit the pull request to
2313
2320
  - title: The title of the pull request
2314
2321
  - body: The contents of the pull request
2322
+ - draft: Indicates whether the pull request is a draft
2315
2323
  - labels: The labels for the pull request
2316
2324
  - milestone: The milestone ID (Integer) for the pull request
2317
2325
  - head: The name of the branch where your changes are implemented (defaults to the current branch name)
@@ -2327,6 +2335,7 @@ func createPullRequest(apiToken: String,
2327
2335
  repo: String,
2328
2336
  title: String,
2329
2337
  body: String? = nil,
2338
+ draft: Bool? = nil,
2330
2339
  labels: [String]? = nil,
2331
2340
  milestone: String? = nil,
2332
2341
  head: String? = nil,
@@ -2339,6 +2348,7 @@ func createPullRequest(apiToken: String,
2339
2348
  RubyCommand.Argument(name: "repo", value: repo),
2340
2349
  RubyCommand.Argument(name: "title", value: title),
2341
2350
  RubyCommand.Argument(name: "body", value: body),
2351
+ RubyCommand.Argument(name: "draft", value: draft),
2342
2352
  RubyCommand.Argument(name: "labels", value: labels),
2343
2353
  RubyCommand.Argument(name: "milestone", value: milestone),
2344
2354
  RubyCommand.Argument(name: "head", value: head),
@@ -2986,10 +2996,15 @@ func flock(message: String,
2986
2996
  - forceDeviceType: Forces a given device type, useful for Mac screenshots, as their sizes vary
2987
2997
  - useLegacyIphone5s: Use iPhone 5s instead of iPhone SE frames
2988
2998
  - useLegacyIphone6s: Use iPhone 6s frames instead of iPhone 7 frames
2999
+ - useLegacyIphone7: Use iPhone 7 frames instead of iPhone 8 frames
2989
3000
  - useLegacyIphonex: Use iPhone X instead of iPhone XS frames
3001
+ - useLegacyIphonexr: Use iPhone XR instead of iPhone 11 frames
3002
+ - useLegacyIphonexs: Use iPhone XS instead of iPhone 11 Pro frames
3003
+ - useLegacyIphonexsmax: Use iPhone XS Max instead of iPhone 11 Pro Max frames
2990
3004
  - forceOrientationBlock: [Advanced] A block to customize your screenshots' device orientation
2991
3005
  - debugMode: Output debug information in framed screenshots
2992
3006
  - resume: Resume frameit instead of reprocessing all screenshots
3007
+ - usePlatform: Choose a platform, the valid options are IOS, ANDROID and ANY (IOS is default to ensure backward compatibility)
2993
3008
  - path: The path to the directory containing the screenshots
2994
3009
 
2995
3010
  Uses [frameit](https://docs.fastlane.tools/actions/frameit/) to prepare perfect screenshots for the App Store, your website, QA or emails.
@@ -3002,10 +3017,15 @@ func frameScreenshots(white: Bool? = nil,
3002
3017
  forceDeviceType: String? = nil,
3003
3018
  useLegacyIphone5s: Bool = false,
3004
3019
  useLegacyIphone6s: Bool = false,
3020
+ useLegacyIphone7: Bool = false,
3005
3021
  useLegacyIphonex: Bool = false,
3022
+ useLegacyIphonexr: Bool = false,
3023
+ useLegacyIphonexs: Bool = false,
3024
+ useLegacyIphonexsmax: Bool = false,
3006
3025
  forceOrientationBlock: String? = nil,
3007
3026
  debugMode: Bool = false,
3008
3027
  resume: Bool = false,
3028
+ usePlatform: String = "IOS",
3009
3029
  path: String = "./") {
3010
3030
  let command = RubyCommand(commandID: "", methodName: "frame_screenshots", className: nil, args: [RubyCommand.Argument(name: "white", value: white),
3011
3031
  RubyCommand.Argument(name: "silver", value: silver),
@@ -3014,10 +3034,15 @@ func frameScreenshots(white: Bool? = nil,
3014
3034
  RubyCommand.Argument(name: "force_device_type", value: forceDeviceType),
3015
3035
  RubyCommand.Argument(name: "use_legacy_iphone5s", value: useLegacyIphone5s),
3016
3036
  RubyCommand.Argument(name: "use_legacy_iphone6s", value: useLegacyIphone6s),
3037
+ RubyCommand.Argument(name: "use_legacy_iphone7", value: useLegacyIphone7),
3017
3038
  RubyCommand.Argument(name: "use_legacy_iphonex", value: useLegacyIphonex),
3039
+ RubyCommand.Argument(name: "use_legacy_iphonexr", value: useLegacyIphonexr),
3040
+ RubyCommand.Argument(name: "use_legacy_iphonexs", value: useLegacyIphonexs),
3041
+ RubyCommand.Argument(name: "use_legacy_iphonexsmax", value: useLegacyIphonexsmax),
3018
3042
  RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock),
3019
3043
  RubyCommand.Argument(name: "debug_mode", value: debugMode),
3020
3044
  RubyCommand.Argument(name: "resume", value: resume),
3045
+ RubyCommand.Argument(name: "use_platform", value: usePlatform),
3021
3046
  RubyCommand.Argument(name: "path", value: path)])
3022
3047
  _ = runner.executeCommand(command)
3023
3048
  }
@@ -3033,10 +3058,15 @@ func frameScreenshots(white: Bool? = nil,
3033
3058
  - forceDeviceType: Forces a given device type, useful for Mac screenshots, as their sizes vary
3034
3059
  - useLegacyIphone5s: Use iPhone 5s instead of iPhone SE frames
3035
3060
  - useLegacyIphone6s: Use iPhone 6s frames instead of iPhone 7 frames
3061
+ - useLegacyIphone7: Use iPhone 7 frames instead of iPhone 8 frames
3036
3062
  - useLegacyIphonex: Use iPhone X instead of iPhone XS frames
3063
+ - useLegacyIphonexr: Use iPhone XR instead of iPhone 11 frames
3064
+ - useLegacyIphonexs: Use iPhone XS instead of iPhone 11 Pro frames
3065
+ - useLegacyIphonexsmax: Use iPhone XS Max instead of iPhone 11 Pro Max frames
3037
3066
  - forceOrientationBlock: [Advanced] A block to customize your screenshots' device orientation
3038
3067
  - debugMode: Output debug information in framed screenshots
3039
3068
  - resume: Resume frameit instead of reprocessing all screenshots
3069
+ - usePlatform: Choose a platform, the valid options are IOS, ANDROID and ANY (IOS is default to ensure backward compatibility)
3040
3070
  - path: The path to the directory containing the screenshots
3041
3071
 
3042
3072
  Uses [frameit](https://docs.fastlane.tools/actions/frameit/) to prepare perfect screenshots for the App Store, your website, QA or emails.
@@ -3049,10 +3079,15 @@ func frameit(white: Bool? = nil,
3049
3079
  forceDeviceType: String? = nil,
3050
3080
  useLegacyIphone5s: Bool = false,
3051
3081
  useLegacyIphone6s: Bool = false,
3082
+ useLegacyIphone7: Bool = false,
3052
3083
  useLegacyIphonex: Bool = false,
3084
+ useLegacyIphonexr: Bool = false,
3085
+ useLegacyIphonexs: Bool = false,
3086
+ useLegacyIphonexsmax: Bool = false,
3053
3087
  forceOrientationBlock: String? = nil,
3054
3088
  debugMode: Bool = false,
3055
3089
  resume: Bool = false,
3090
+ usePlatform: String = "IOS",
3056
3091
  path: String = "./") {
3057
3092
  let command = RubyCommand(commandID: "", methodName: "frameit", className: nil, args: [RubyCommand.Argument(name: "white", value: white),
3058
3093
  RubyCommand.Argument(name: "silver", value: silver),
@@ -3061,10 +3096,15 @@ func frameit(white: Bool? = nil,
3061
3096
  RubyCommand.Argument(name: "force_device_type", value: forceDeviceType),
3062
3097
  RubyCommand.Argument(name: "use_legacy_iphone5s", value: useLegacyIphone5s),
3063
3098
  RubyCommand.Argument(name: "use_legacy_iphone6s", value: useLegacyIphone6s),
3099
+ RubyCommand.Argument(name: "use_legacy_iphone7", value: useLegacyIphone7),
3064
3100
  RubyCommand.Argument(name: "use_legacy_iphonex", value: useLegacyIphonex),
3101
+ RubyCommand.Argument(name: "use_legacy_iphonexr", value: useLegacyIphonexr),
3102
+ RubyCommand.Argument(name: "use_legacy_iphonexs", value: useLegacyIphonexs),
3103
+ RubyCommand.Argument(name: "use_legacy_iphonexsmax", value: useLegacyIphonexsmax),
3065
3104
  RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock),
3066
3105
  RubyCommand.Argument(name: "debug_mode", value: debugMode),
3067
3106
  RubyCommand.Argument(name: "resume", value: resume),
3107
+ RubyCommand.Argument(name: "use_platform", value: usePlatform),
3068
3108
  RubyCommand.Argument(name: "path", value: path)])
3069
3109
  _ = runner.executeCommand(command)
3070
3110
  }
@@ -4444,6 +4484,10 @@ func makeChangelogFromJenkins(fallbackChangelog: String = "",
4444
4484
  - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
4445
4485
  - googleCloudKeysFile: Path to the gc_keys.json file
4446
4486
  - googleCloudProjectId: ID of the Google Cloud project to use for authentication
4487
+ - s3Region: Name of the S3 region
4488
+ - s3AccessKey: S3 access key
4489
+ - s3SecretAccessKey: S3 secret access key
4490
+ - s3Bucket: Name of the S3 bucket
4447
4491
  - keychainName: Keychain the items should be imported to
4448
4492
  - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password
4449
4493
  - force: Renew the provisioning profiles every time you run match
@@ -4478,6 +4522,10 @@ func match(type: Any = matchfile.type,
4478
4522
  googleCloudBucketName: Any? = matchfile.googleCloudBucketName,
4479
4523
  googleCloudKeysFile: Any? = matchfile.googleCloudKeysFile,
4480
4524
  googleCloudProjectId: Any? = matchfile.googleCloudProjectId,
4525
+ s3Region: Any? = matchfile.s3Region,
4526
+ s3AccessKey: Any? = matchfile.s3AccessKey,
4527
+ s3SecretAccessKey: Any? = matchfile.s3SecretAccessKey,
4528
+ s3Bucket: Any? = matchfile.s3Bucket,
4481
4529
  keychainName: Any = matchfile.keychainName,
4482
4530
  keychainPassword: Any? = matchfile.keychainPassword,
4483
4531
  force: Bool = matchfile.force,
@@ -4509,6 +4557,10 @@ func match(type: Any = matchfile.type,
4509
4557
  RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
4510
4558
  RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
4511
4559
  RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
4560
+ RubyCommand.Argument(name: "s3_region", value: s3Region),
4561
+ RubyCommand.Argument(name: "s3_access_key", value: s3AccessKey),
4562
+ RubyCommand.Argument(name: "s3_secret_access_key", value: s3SecretAccessKey),
4563
+ RubyCommand.Argument(name: "s3_bucket", value: s3Bucket),
4512
4564
  RubyCommand.Argument(name: "keychain_name", value: keychainName),
4513
4565
  RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
4514
4566
  RubyCommand.Argument(name: "force", value: force),
@@ -4910,6 +4962,8 @@ func pem(development: Bool = false,
4910
4962
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
4911
4963
  - distributeExternal: Should the build be distributed to external testers?
4912
4964
  - notifyExternalTesters: Should notify external testers?
4965
+ - appVersion: The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed
4966
+ - buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed
4913
4967
  - firstName: The tester's first name
4914
4968
  - lastName: The tester's last name
4915
4969
  - email: The tester's email
@@ -4944,6 +4998,8 @@ func pilot(username: String,
4944
4998
  usesNonExemptEncryption: Bool = false,
4945
4999
  distributeExternal: Bool = false,
4946
5000
  notifyExternalTesters: Bool = true,
5001
+ appVersion: String? = nil,
5002
+ buildNumber: String? = nil,
4947
5003
  firstName: String? = nil,
4948
5004
  lastName: String? = nil,
4949
5005
  email: String? = nil,
@@ -4974,6 +5030,8 @@ func pilot(username: String,
4974
5030
  RubyCommand.Argument(name: "uses_non_exempt_encryption", value: usesNonExemptEncryption),
4975
5031
  RubyCommand.Argument(name: "distribute_external", value: distributeExternal),
4976
5032
  RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters),
5033
+ RubyCommand.Argument(name: "app_version", value: appVersion),
5034
+ RubyCommand.Argument(name: "build_number", value: buildNumber),
4977
5035
  RubyCommand.Argument(name: "first_name", value: firstName),
4978
5036
  RubyCommand.Argument(name: "last_name", value: lastName),
4979
5037
  RubyCommand.Argument(name: "email", value: email),
@@ -5029,6 +5087,7 @@ func pluginScores(outputPath: String,
5029
5087
  - platforms: Lint against specific platforms (defaults to all platforms supported by the podspec). Multiple platforms must be comma-delimited (available since cocoapods >= 1.6)
5030
5088
  - skipImportValidation: Lint skips validating that the pod can be imported (available since cocoapods >= 1.3)
5031
5089
  - skipTests: Lint skips building and running tests during validation (available since cocoapods >= 1.3)
5090
+ - analyze: Validate with the Xcode Static Analysis tool (available since cocoapods >= 1.6.1)
5032
5091
 
5033
5092
  Test the syntax of your Podfile by linting the pod against the files of its directory
5034
5093
  */
@@ -5050,7 +5109,8 @@ func podLibLint(useBundleExec: Bool = true,
5050
5109
  noSubspecs: Bool = false,
5051
5110
  platforms: String? = nil,
5052
5111
  skipImportValidation: Bool = false,
5053
- skipTests: Bool = false) {
5112
+ skipTests: Bool = false,
5113
+ analyze: Bool = false) {
5054
5114
  let command = RubyCommand(commandID: "", methodName: "pod_lib_lint", className: nil, args: [RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec),
5055
5115
  RubyCommand.Argument(name: "podspec", value: podspec),
5056
5116
  RubyCommand.Argument(name: "verbose", value: verbose),
@@ -5069,7 +5129,8 @@ func podLibLint(useBundleExec: Bool = true,
5069
5129
  RubyCommand.Argument(name: "no_subspecs", value: noSubspecs),
5070
5130
  RubyCommand.Argument(name: "platforms", value: platforms),
5071
5131
  RubyCommand.Argument(name: "skip_import_validation", value: skipImportValidation),
5072
- RubyCommand.Argument(name: "skip_tests", value: skipTests)])
5132
+ RubyCommand.Argument(name: "skip_tests", value: skipTests),
5133
+ RubyCommand.Argument(name: "analyze", value: analyze)])
5073
5134
  _ = runner.executeCommand(command)
5074
5135
  }
5075
5136
 
@@ -5201,6 +5262,7 @@ func println(message: String? = nil) {
5201
5262
  - appVersion: Initial version number (e.g. '1.0')
5202
5263
  - sku: SKU Number (e.g. '1234')
5203
5264
  - platform: The platform to use (optional)
5265
+ - platforms: The platforms to use (optional)
5204
5266
  - language: Primary Language (e.g. 'English', 'German')
5205
5267
  - companyName: The name of your company. Only required if it's the first app you create
5206
5268
  - skipItc: Skip the creation of the app on App Store Connect
@@ -5224,6 +5286,7 @@ func produce(username: String,
5224
5286
  appVersion: String? = nil,
5225
5287
  sku: String,
5226
5288
  platform: String = "ios",
5289
+ platforms: [String]? = nil,
5227
5290
  language: String = "English",
5228
5291
  companyName: String? = nil,
5229
5292
  skipItc: Bool = false,
@@ -5242,6 +5305,7 @@ func produce(username: String,
5242
5305
  RubyCommand.Argument(name: "app_version", value: appVersion),
5243
5306
  RubyCommand.Argument(name: "sku", value: sku),
5244
5307
  RubyCommand.Argument(name: "platform", value: platform),
5308
+ RubyCommand.Argument(name: "platforms", value: platforms),
5245
5309
  RubyCommand.Argument(name: "language", value: language),
5246
5310
  RubyCommand.Argument(name: "company_name", value: companyName),
5247
5311
  RubyCommand.Argument(name: "skip_itc", value: skipItc),
@@ -5598,6 +5662,7 @@ func rubyVersion() {
5598
5662
  - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
5599
5663
  - onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
5600
5664
  - skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
5665
+ - testplan: The testplan associated with the scheme that should be used for testing
5601
5666
  - xctestrun: Run tests using the provided `.xctestrun` file
5602
5667
  - toolchain: The toolchain that should be used for building the application (e.g. `com.apple.dt.toolchain.Swift_2_3, org.swift.30p620160816a`)
5603
5668
  - clean: Should the project be cleaned before building it?
@@ -5660,6 +5725,7 @@ func runTests(workspace: String? = nil,
5660
5725
  appIdentifier: String? = nil,
5661
5726
  onlyTesting: Any? = nil,
5662
5727
  skipTesting: Any? = nil,
5728
+ testplan: String? = nil,
5663
5729
  xctestrun: String? = nil,
5664
5730
  toolchain: Any? = nil,
5665
5731
  clean: Bool = false,
@@ -5719,6 +5785,7 @@ func runTests(workspace: String? = nil,
5719
5785
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
5720
5786
  RubyCommand.Argument(name: "only_testing", value: onlyTesting),
5721
5787
  RubyCommand.Argument(name: "skip_testing", value: skipTesting),
5788
+ RubyCommand.Argument(name: "testplan", value: testplan),
5722
5789
  RubyCommand.Argument(name: "xctestrun", value: xctestrun),
5723
5790
  RubyCommand.Argument(name: "toolchain", value: toolchain),
5724
5791
  RubyCommand.Argument(name: "clean", value: clean),
@@ -5859,6 +5926,7 @@ func say(text: Any,
5859
5926
  - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
5860
5927
  - onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
5861
5928
  - skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
5929
+ - testplan: The testplan associated with the scheme that should be used for testing
5862
5930
  - xctestrun: Run tests using the provided `.xctestrun` file
5863
5931
  - toolchain: The toolchain that should be used for building the application (e.g. `com.apple.dt.toolchain.Swift_2_3, org.swift.30p620160816a`)
5864
5932
  - clean: Should the project be cleaned before building it?
@@ -5921,6 +5989,7 @@ func scan(workspace: Any? = scanfile.workspace,
5921
5989
  appIdentifier: Any? = scanfile.appIdentifier,
5922
5990
  onlyTesting: Any? = scanfile.onlyTesting,
5923
5991
  skipTesting: Any? = scanfile.skipTesting,
5992
+ testplan: Any? = scanfile.testplan,
5924
5993
  xctestrun: Any? = scanfile.xctestrun,
5925
5994
  toolchain: Any? = scanfile.toolchain,
5926
5995
  clean: Bool = scanfile.clean,
@@ -5980,6 +6049,7 @@ func scan(workspace: Any? = scanfile.workspace,
5980
6049
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
5981
6050
  RubyCommand.Argument(name: "only_testing", value: onlyTesting),
5982
6051
  RubyCommand.Argument(name: "skip_testing", value: skipTesting),
6052
+ RubyCommand.Argument(name: "testplan", value: testplan),
5983
6053
  RubyCommand.Argument(name: "xctestrun", value: xctestrun),
5984
6054
  RubyCommand.Argument(name: "toolchain", value: toolchain),
5985
6055
  RubyCommand.Argument(name: "clean", value: clean),
@@ -6283,7 +6353,7 @@ func setPodKey(useBundleExec: Bool = true,
6283
6353
  This action helps with CI integration. Add this to the top of your Fastfile if you use CI.
6284
6354
  */
6285
6355
  func setupCi(force: Bool = false,
6286
- provider: Bool = false) {
6356
+ provider: String? = nil) {
6287
6357
  let command = RubyCommand(commandID: "", methodName: "setup_ci", className: nil, args: [RubyCommand.Argument(name: "force", value: force),
6288
6358
  RubyCommand.Argument(name: "provider", value: provider)])
6289
6359
  _ = runner.executeCommand(command)
@@ -6322,13 +6392,16 @@ func setupCircleCi(force: Bool = false) {
6322
6392
  - resultBundle: Produce the result bundle describing what occurred will be placed
6323
6393
 
6324
6394
  - Adds and unlocks keychains from Jenkins 'Keychains and Provisioning Profiles Plugin'|
6395
+ - Sets unlocked keychain to be used by Match|
6325
6396
  - Sets code signing identity from Jenkins 'Keychains and Provisioning Profiles Plugin'|
6326
6397
  - Sets output directory to './output' (gym, scan and backup_xcarchive)|
6327
6398
  - Sets derived data path to './derivedData' (xcodebuild, gym, scan and clear_derived_data, carthage)|
6328
6399
  - Produce result bundle (gym and scan)|
6329
6400
  >|
6330
6401
  This action helps with Jenkins integration. Creates own derived data for each job. All build results like IPA files and archives will be stored in the `./output` directory.
6331
- The action also works with [Keychains and Provisioning Profiles Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Keychains+and+Provisioning+Profiles+Plugin), the selected keychain will be automatically unlocked and the selected code signing identity will be used. By default this action will only work when _fastlane_ is executed on a CI system.
6402
+ The action also works with [Keychains and Provisioning Profiles Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Keychains+and+Provisioning+Profiles+Plugin), the selected keychain will be automatically unlocked and the selected code signing identity will be used.
6403
+ [Match](https://docs.fastlane.tools/actions/match/) will be also set up to use the unlocked keychain and set in read-only mode, if its environment variables were not yet defined.
6404
+ By default this action will only work when _fastlane_ is executed on a CI system.
6332
6405
  */
6333
6406
  func setupJenkins(force: Bool = false,
6334
6407
  unlockKeychain: Bool = true,
@@ -6619,7 +6692,7 @@ func slather(buildDirectory: String? = nil,
6619
6692
  show: Bool = false,
6620
6693
  sourceDirectory: String? = nil,
6621
6694
  outputDirectory: String? = nil,
6622
- ignore: Any? = nil,
6695
+ ignore: [String]? = nil,
6623
6696
  verbose: Bool? = nil,
6624
6697
  useBundleExec: Bool = false,
6625
6698
  binaryBasename: Bool = false,
@@ -7081,6 +7154,7 @@ func supply(packageName: String,
7081
7154
  - quiet: Don't print status logs like 'Linting <file>' & 'Done linting'
7082
7155
  - executable: Path to the `swiftlint` executable on your machine
7083
7156
  - format: Format code when mode is :autocorrect
7157
+ - noCache: Ignore the cache when mode is :autocorrect or :lint
7084
7158
  - compilerLogPath: Compiler log path when mode is :analyze
7085
7159
  */
7086
7160
  func swiftlint(mode: Any = "lint",
@@ -7095,6 +7169,7 @@ func swiftlint(mode: Any = "lint",
7095
7169
  quiet: Bool = false,
7096
7170
  executable: String? = nil,
7097
7171
  format: Bool = false,
7172
+ noCache: Bool = false,
7098
7173
  compilerLogPath: String? = nil) {
7099
7174
  let command = RubyCommand(commandID: "", methodName: "swiftlint", className: nil, args: [RubyCommand.Argument(name: "mode", value: mode),
7100
7175
  RubyCommand.Argument(name: "path", value: path),
@@ -7108,6 +7183,7 @@ func swiftlint(mode: Any = "lint",
7108
7183
  RubyCommand.Argument(name: "quiet", value: quiet),
7109
7184
  RubyCommand.Argument(name: "executable", value: executable),
7110
7185
  RubyCommand.Argument(name: "format", value: format),
7186
+ RubyCommand.Argument(name: "no_cache", value: noCache),
7111
7187
  RubyCommand.Argument(name: "compiler_log_path", value: compilerLogPath)])
7112
7188
  _ = runner.executeCommand(command)
7113
7189
  }
@@ -7137,6 +7213,10 @@ func swiftlint(mode: Any = "lint",
7137
7213
  - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
7138
7214
  - googleCloudKeysFile: Path to the gc_keys.json file
7139
7215
  - googleCloudProjectId: ID of the Google Cloud project to use for authentication
7216
+ - s3Region: Name of the S3 region
7217
+ - s3AccessKey: S3 access key
7218
+ - s3SecretAccessKey: S3 secret access key
7219
+ - s3Bucket: Name of the S3 bucket
7140
7220
  - keychainName: Keychain the items should be imported to
7141
7221
  - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password
7142
7222
  - force: Renew the provisioning profiles every time you run match
@@ -7171,6 +7251,10 @@ func syncCodeSigning(type: String = "development",
7171
7251
  googleCloudBucketName: String? = nil,
7172
7252
  googleCloudKeysFile: String? = nil,
7173
7253
  googleCloudProjectId: String? = nil,
7254
+ s3Region: String? = nil,
7255
+ s3AccessKey: String? = nil,
7256
+ s3SecretAccessKey: String? = nil,
7257
+ s3Bucket: String? = nil,
7174
7258
  keychainName: String = "login.keychain",
7175
7259
  keychainPassword: String? = nil,
7176
7260
  force: Bool = false,
@@ -7202,6 +7286,10 @@ func syncCodeSigning(type: String = "development",
7202
7286
  RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
7203
7287
  RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
7204
7288
  RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
7289
+ RubyCommand.Argument(name: "s3_region", value: s3Region),
7290
+ RubyCommand.Argument(name: "s3_access_key", value: s3AccessKey),
7291
+ RubyCommand.Argument(name: "s3_secret_access_key", value: s3SecretAccessKey),
7292
+ RubyCommand.Argument(name: "s3_bucket", value: s3Bucket),
7205
7293
  RubyCommand.Argument(name: "keychain_name", value: keychainName),
7206
7294
  RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
7207
7295
  RubyCommand.Argument(name: "force", value: force),
@@ -7302,6 +7390,8 @@ func testfairy(apiKey: String,
7302
7390
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
7303
7391
  - distributeExternal: Should the build be distributed to external testers?
7304
7392
  - notifyExternalTesters: Should notify external testers?
7393
+ - appVersion: The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed
7394
+ - buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed
7305
7395
  - firstName: The tester's first name
7306
7396
  - lastName: The tester's last name
7307
7397
  - email: The tester's email
@@ -7336,6 +7426,8 @@ func testflight(username: String,
7336
7426
  usesNonExemptEncryption: Bool = false,
7337
7427
  distributeExternal: Bool = false,
7338
7428
  notifyExternalTesters: Bool = true,
7429
+ appVersion: String? = nil,
7430
+ buildNumber: String? = nil,
7339
7431
  firstName: String? = nil,
7340
7432
  lastName: String? = nil,
7341
7433
  email: String? = nil,
@@ -7366,6 +7458,8 @@ func testflight(username: String,
7366
7458
  RubyCommand.Argument(name: "uses_non_exempt_encryption", value: usesNonExemptEncryption),
7367
7459
  RubyCommand.Argument(name: "distribute_external", value: distributeExternal),
7368
7460
  RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters),
7461
+ RubyCommand.Argument(name: "app_version", value: appVersion),
7462
+ RubyCommand.Argument(name: "build_number", value: buildNumber),
7369
7463
  RubyCommand.Argument(name: "first_name", value: firstName),
7370
7464
  RubyCommand.Argument(name: "last_name", value: lastName),
7371
7465
  RubyCommand.Argument(name: "email", value: email),
@@ -7503,6 +7597,45 @@ func updateAppIdentifier(xcodeproj: String,
7503
7597
  _ = runner.executeCommand(command)
7504
7598
  }
7505
7599
 
7600
+ /**
7601
+ Configures Xcode's Codesigning options
7602
+
7603
+ - parameters:
7604
+ - path: Path to your Xcode project
7605
+ - useAutomaticSigning: Defines if project should use automatic signing
7606
+ - teamId: Team ID, is used when upgrading project
7607
+ - targets: Specify targets you want to toggle the signing mech. (default to all targets)
7608
+ - buildConfigurations: Specify build_configurations you want to toggle the signing mech. (default to all targets)
7609
+ - codeSignIdentity: Code signing identity type (iPhone Developer, iPhone Distribution)
7610
+ - profileName: Provisioning profile name to use for code signing
7611
+ - profileUuid: Provisioning profile UUID to use for code signing
7612
+ - bundleIdentifier: Application Product Bundle Identifier
7613
+
7614
+ - returns: The current status (boolean) of codesigning after modification
7615
+
7616
+ Configures Xcode's Codesigning options of all targets in the project
7617
+ */
7618
+ func updateCodeSigningSettings(path: String,
7619
+ useAutomaticSigning: Bool = false,
7620
+ teamId: String? = nil,
7621
+ targets: [String]? = nil,
7622
+ buildConfigurations: [String]? = nil,
7623
+ codeSignIdentity: String? = nil,
7624
+ profileName: String? = nil,
7625
+ profileUuid: String? = nil,
7626
+ bundleIdentifier: String? = nil) {
7627
+ let command = RubyCommand(commandID: "", methodName: "update_code_signing_settings", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
7628
+ RubyCommand.Argument(name: "use_automatic_signing", value: useAutomaticSigning),
7629
+ RubyCommand.Argument(name: "team_id", value: teamId),
7630
+ RubyCommand.Argument(name: "targets", value: targets),
7631
+ RubyCommand.Argument(name: "build_configurations", value: buildConfigurations),
7632
+ RubyCommand.Argument(name: "code_sign_identity", value: codeSignIdentity),
7633
+ RubyCommand.Argument(name: "profile_name", value: profileName),
7634
+ RubyCommand.Argument(name: "profile_uuid", value: profileUuid),
7635
+ RubyCommand.Argument(name: "bundle_identifier", value: bundleIdentifier)])
7636
+ _ = runner.executeCommand(command)
7637
+ }
7638
+
7506
7639
  /**
7507
7640
  Makes sure fastlane-tools are up-to-date when running fastlane
7508
7641
 
@@ -8163,6 +8296,8 @@ func uploadToPlayStoreInternalAppSharing(packageName: String,
8163
8296
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
8164
8297
  - distributeExternal: Should the build be distributed to external testers?
8165
8298
  - notifyExternalTesters: Should notify external testers?
8299
+ - appVersion: The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed
8300
+ - buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed
8166
8301
  - firstName: The tester's first name
8167
8302
  - lastName: The tester's last name
8168
8303
  - email: The tester's email
@@ -8197,6 +8332,8 @@ func uploadToTestflight(username: String,
8197
8332
  usesNonExemptEncryption: Bool = false,
8198
8333
  distributeExternal: Bool = false,
8199
8334
  notifyExternalTesters: Bool = true,
8335
+ appVersion: String? = nil,
8336
+ buildNumber: String? = nil,
8200
8337
  firstName: String? = nil,
8201
8338
  lastName: String? = nil,
8202
8339
  email: String? = nil,
@@ -8227,6 +8364,8 @@ func uploadToTestflight(username: String,
8227
8364
  RubyCommand.Argument(name: "uses_non_exempt_encryption", value: usesNonExemptEncryption),
8228
8365
  RubyCommand.Argument(name: "distribute_external", value: distributeExternal),
8229
8366
  RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters),
8367
+ RubyCommand.Argument(name: "app_version", value: appVersion),
8368
+ RubyCommand.Argument(name: "build_number", value: buildNumber),
8230
8369
  RubyCommand.Argument(name: "first_name", value: firstName),
8231
8370
  RubyCommand.Argument(name: "last_name", value: lastName),
8232
8371
  RubyCommand.Argument(name: "email", value: email),
@@ -8536,7 +8675,7 @@ func xcov(workspace: String? = nil,
8536
8675
  coverallsServiceJobId: String? = nil,
8537
8676
  coverallsRepoToken: String? = nil,
8538
8677
  xcconfig: String? = nil,
8539
- ideFoundationPath: String = "/Applications/Xcode-11.3.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
8678
+ ideFoundationPath: String = "/Applications/Xcode-11.4.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
8540
8679
  legacySupport: Bool = false) {
8541
8680
  let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
8542
8681
  RubyCommand.Argument(name: "project", value: project),
@@ -8681,4 +8820,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
8681
8820
 
8682
8821
  // Please don't remove the lines below
8683
8822
  // They are used to detect outdated files
8684
- // FastlaneRunnerAPIVersion [0.9.70]
8823
+ // FastlaneRunnerAPIVersion [0.9.74]