fastlane 2.129.0.beta.20190811200106 → 2.129.0.beta.20190813200016

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/deliver/lib/deliver/submit_for_review.rb +1 -1
  3. data/fastlane/lib/fastlane/actions/appetize_viewing_url_generator.rb +1 -1
  4. data/fastlane/lib/fastlane/actions/automatic_code_signing.rb +1 -1
  5. data/fastlane/lib/fastlane/actions/commit_github_file.rb +1 -1
  6. data/fastlane/lib/fastlane/actions/get_version_number.rb +18 -2
  7. data/fastlane/lib/fastlane/actions/github_api.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/gradle.rb +26 -7
  9. data/fastlane/lib/fastlane/actions/import_from_git.rb +1 -1
  10. data/fastlane/lib/fastlane/actions/pod_push.rb +20 -10
  11. data/fastlane/lib/fastlane/actions/puts.rb +1 -1
  12. data/fastlane/lib/fastlane/actions/sonar.rb +18 -0
  13. data/fastlane/lib/fastlane/commands_generator.rb +1 -1
  14. data/fastlane/lib/fastlane/helper/adb_helper.rb +5 -0
  15. data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +1 -1
  16. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +4 -0
  17. data/fastlane/lib/fastlane/swift_fastlane_function.rb +11 -7
  18. data/fastlane/lib/fastlane/version.rb +1 -1
  19. data/fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb +1 -1
  20. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +1 -1
  21. data/frameit/lib/frameit/editor.rb +1 -1
  22. data/gym/lib/gym/options.rb +1 -1
  23. data/match/lib/match/nuke.rb +1 -1
  24. data/match/lib/match/runner.rb +2 -2
  25. data/match/lib/match/storage/interface.rb +1 -1
  26. data/scan/lib/scan/options.rb +1 -1
  27. data/scan/lib/scan/runner.rb +1 -1
  28. data/spaceship/lib/spaceship/connect_api/models/beta_tester_metric.rb +1 -0
  29. data/spaceship/lib/spaceship/du/du_client.rb +4 -0
  30. data/spaceship/lib/spaceship/portal/certificate.rb +15 -1
  31. data/spaceship/lib/spaceship/spaceauth_runner.rb +1 -1
  32. data/spaceship/lib/spaceship/test_flight/tester.rb +1 -1
  33. data/spaceship/lib/spaceship/tunes/display_family.rb +3 -3
  34. data/spaceship/lib/spaceship/tunes/iap.rb +2 -0
  35. data/spaceship/lib/spaceship/tunes/iap_detail.rb +17 -0
  36. data/spaceship/lib/spaceship/tunes/tunes_client.rb +37 -1
  37. data/supply/lib/supply/client.rb +1 -1
  38. metadata +14 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 61f49f85f33f71ee3a54f4324ded48ba8503a8ce
4
- data.tar.gz: c159f08671231c2601c68e204cd9a481f9d84658
3
+ metadata.gz: 1b1f0d75e2cef96d9d66abd38b3d8f421ef561e8
4
+ data.tar.gz: 056af703f6e8ba46111b997331b1bfad37a9c042
5
5
  SHA512:
6
- metadata.gz: 43be43f0a5a30249820b1118e591edaad36c722856a92744757cd77de19dde19ac00b013748cd61156bd496d8e577b8b10cd526b56d45da8ee37b8f9d4cd07fa
7
- data.tar.gz: 9b73bec5130415cfc6df8a5038e2597aa05245cff752a50d833ef9431d14df597ee821f9314c519c77921848e89338b3a78dd60451a8ba1a381adf8af6044335
6
+ metadata.gz: '09e2b9151be73aae01748f211df62a622a419332da4d7113f05d691b8f872b774072bf72c0454b97cefe4e8505f8bb28a458380efe0cd21927433d93c134b936'
7
+ data.tar.gz: 896ed6d895e3c8f16b507c499ae8029ff5870a389d6a85fc246a4464491b60963ee7f09c3d897893330beca522a00571f1163bf8cfb06767f85179d213b12a39
@@ -59,7 +59,7 @@ module Deliver
59
59
  build = nil
60
60
 
61
61
  loop do
62
- # Sometimes candidate_builds don't appear immediately after submittion
62
+ # Sometimes candidate_builds don't appear immediately after submission
63
63
  # Wait for candidate_builds to appear on App Store Connect
64
64
  # Issue https://github.com/fastlane/fastlane/issues/10411
65
65
  candidate_builds = app.latest_version.candidate_builds
@@ -115,7 +115,7 @@ module Fastlane
115
115
  optional: true),
116
116
  FastlaneCore::ConfigItem.new(key: :params,
117
117
  env_name: "APPETIZE_VIEWING_URL_GENERATOR_PARAMS",
118
- description: "Specifiy params value to be passed to Appetize",
118
+ description: "Specify params value to be passed to Appetize",
119
119
  is_string: true,
120
120
  optional: true),
121
121
  FastlaneCore::ConfigItem.new(key: :proxy,
@@ -50,7 +50,7 @@ module Fastlane
50
50
  if params[:code_sign_identity]
51
51
  build_configuration_list.set_setting("CODE_SIGN_IDENTITY", params[:code_sign_identity])
52
52
 
53
- # We also need to update the value if it was overriden for a specific SDK
53
+ # We also need to update the value if it was overridden for a specific SDK
54
54
  build_configuration_list.build_configurations.each do |build_configuration|
55
55
  codesign_build_settings_keys = build_configuration.build_settings.keys.select { |key| key.to_s.match(/CODE_SIGN_IDENTITY.*/) }
56
56
  codesign_build_settings_keys.each do |setting|
@@ -50,7 +50,7 @@ module Fastlane
50
50
  end
51
51
  }
52
52
  }) do |result|
53
- UI.success("Successfully commited file to GitHub")
53
+ UI.success("Successfully committed file to GitHub")
54
54
  json = result[:json]
55
55
  html_url = json['commit']['html_url']
56
56
  download_url = json['content']['download_url']
@@ -16,7 +16,12 @@ module Fastlane
16
16
  project = get_project!(folder)
17
17
  target = get_target!(project, target_name)
18
18
  plist_file = get_plist!(folder, target, configuration)
19
- version_number = get_version_number!(plist_file)
19
+ version_number = get_version_number_from_plist!(plist_file)
20
+
21
+ # Get from build settings if needed (ex: $(MARKETING_VERSION) is default in Xcode 11)
22
+ if version_number =~ /\$\(([\w\-]+)\)/
23
+ version_number = get_version_number_from_build_settings!(target, $1, configuration)
24
+ end
20
25
 
21
26
  # Store the number in the shared hash
22
27
  Actions.lane_context[SharedValues::VERSION_NUMBER] = version_number
@@ -65,6 +70,17 @@ module Fastlane
65
70
  target
66
71
  end
67
72
 
73
+ def self.get_version_number_from_build_settings!(target, variable, configuration = nil)
74
+ target.build_configurations.each do |config|
75
+ if configuration.nil? || config.name == configuration
76
+ value = config.build_settings[variable]
77
+ return value if value
78
+ end
79
+ end
80
+
81
+ UI.user_error!("Unable to find Xcode build setting: #{variable}")
82
+ end
83
+
68
84
  def self.get_plist!(folder, target, configuration = nil)
69
85
  plist_files = target.resolved_build_setting("INFOPLIST_FILE")
70
86
  plist_files_count = plist_files.values.compact.uniq.count
@@ -94,7 +110,7 @@ module Fastlane
94
110
  plist_file
95
111
  end
96
112
 
97
- def self.get_version_number!(plist_file)
113
+ def self.get_version_number_from_plist!(plist_file)
98
114
  plist = Xcodeproj::Plist.read_from_path(plist_file)
99
115
  UI.user_error!("Unable to read plist: #{plist_file}") unless plist
100
116
 
@@ -113,7 +113,7 @@ module Fastlane
113
113
  optional: true),
114
114
  FastlaneCore::ConfigItem.new(key: :raw_body,
115
115
  env_name: "FL_GITHUB_API_REQUEST_RAW_BODY",
116
- description: "The request body taken vertabim instead of as JSON, useful for file uploads",
116
+ description: "The request body taken verbatim instead of as JSON, useful for file uploads",
117
117
  is_string: true,
118
118
  optional: true),
119
119
  FastlaneCore::ConfigItem.new(key: :path,
@@ -102,7 +102,7 @@ module Fastlane
102
102
  [
103
103
  FastlaneCore::ConfigItem.new(key: :task,
104
104
  env_name: 'FL_GRADLE_TASK',
105
- description: 'The gradle task you want to execute, e.g. `assemble` or `test`. For tasks such as `assembleMyFlavorRelease` you should use gradle(task: \'assemble\', flavor: \'Myflavor\', build_type: \'Release\')',
105
+ description: 'The gradle task you want to execute, e.g. `assemble`, `bundle` or `test`. For tasks such as `assembleMyFlavorRelease` you should use gradle(task: \'assemble\', flavor: \'Myflavor\', build_type: \'Release\')',
106
106
  optional: false,
107
107
  is_string: true),
108
108
  FastlaneCore::ConfigItem.new(key: :flavor,
@@ -187,8 +187,21 @@ module Fastlane
187
187
  task: "assemble",
188
188
  flavor: "WorldDomination",
189
189
  build_type: "Release"
190
- )',
191
- 'gradle(
190
+ )
191
+ ```
192
+
193
+ To build an AAB use:
194
+ ```ruby
195
+ gradle(
196
+ task: "bundle",
197
+ flavor: "WorldDomination",
198
+ build_type: "Release"
199
+ )
200
+ ```
201
+
202
+ You can pass properties to gradle:
203
+ ```ruby
204
+ gradle(
192
205
  # ...
193
206
 
194
207
  properties: {
@@ -211,8 +224,11 @@ module Fastlane
211
224
  "android.injected.signing.key.alias" => "key_alias",
212
225
  "android.injected.signing.key.password" => "key_password",
213
226
  }
214
- )',
215
- '# If you need to pass sensitive information through the `gradle` action, and don\'t want the generated command to be printed before it is run, you can suppress that:
227
+ )
228
+ ```
229
+
230
+ If you need to pass sensitive information through the `gradle` action, and don\'t want the generated command to be printed before it is run, you can suppress that:
231
+ ```ruby
216
232
  gradle(
217
233
  # ...
218
234
  print_command: false
@@ -233,8 +249,11 @@ module Fastlane
233
249
  # ...
234
250
 
235
251
  flags: "--exitcode --xml file.xml"
236
- )',
237
- '# Delete the build directory and generated APKs
252
+ )
253
+ ```
254
+
255
+ Delete the build directory, generated APKs and AABs
256
+ ```ruby
238
257
  gradle(
239
258
  task: "clean"
240
259
  )'
@@ -31,7 +31,7 @@ module Fastlane
31
31
  default_value: 'fastlane/Fastfile',
32
32
  optional: true),
33
33
  FastlaneCore::ConfigItem.new(key: :version,
34
- description: "The version to checkout on the respository. Optimistic match operator or multiple conditions can be used to select the latest version within constraints",
34
+ description: "The version to checkout on the repository. Optimistic match operator or multiple conditions can be used to select the latest version within constraints",
35
35
  default_value: nil,
36
36
  is_string: false,
37
37
  optional: true)
@@ -65,25 +65,30 @@ module Fastlane
65
65
  FastlaneCore::ConfigItem.new(key: :use_bundle_exec,
66
66
  description: "Use bundle exec when there is a Gemfile presented",
67
67
  type: Boolean,
68
- default_value: false),
68
+ default_value: false,
69
+ env_name: "FL_POD_PUSH_USE_BUNDLE_EXEC"),
69
70
  FastlaneCore::ConfigItem.new(key: :path,
70
71
  description: "The Podspec you want to push",
71
72
  optional: true,
72
73
  verify_block: proc do |value|
73
74
  UI.user_error!("Couldn't find file at path '#{value}'") unless File.exist?(value)
74
75
  UI.user_error!("File must be a `.podspec` or `.podspec.json`") unless value.end_with?(".podspec", ".podspec.json")
75
- end),
76
+ end,
77
+ env_name: "FL_POD_PUSH_PATH"),
76
78
  FastlaneCore::ConfigItem.new(key: :repo,
77
79
  description: "The repo you want to push. Pushes to Trunk by default",
78
- optional: true),
80
+ optional: true,
81
+ env_name: "FL_POD_PUSH_REPO"),
79
82
  FastlaneCore::ConfigItem.new(key: :allow_warnings,
80
83
  description: "Allow warnings during pod push",
81
84
  optional: true,
82
- type: Boolean),
85
+ type: Boolean,
86
+ env_name: "FL_POD_PUSH_ALLOW_WARNINGS"),
83
87
  FastlaneCore::ConfigItem.new(key: :use_libraries,
84
88
  description: "Allow lint to use static libraries to install the spec",
85
89
  optional: true,
86
- type: Boolean),
90
+ type: Boolean,
91
+ env_name: "FL_POD_PUSH_USE_LIBRARIES"),
87
92
  FastlaneCore::ConfigItem.new(key: :sources,
88
93
  description: "The sources of repos you want the pod spec to lint with, separated by commas",
89
94
  optional: true,
@@ -91,24 +96,29 @@ module Fastlane
91
96
  type: Array,
92
97
  verify_block: proc do |value|
93
98
  UI.user_error!("Sources must be an array.") unless value.kind_of?(Array)
94
- end),
99
+ end,
100
+ env_name: "FL_POD_PUSH_SOURCES"),
95
101
  FastlaneCore::ConfigItem.new(key: :swift_version,
96
102
  description: "The SWIFT_VERSION that should be used to lint the spec. This takes precedence over a .swift-version file",
97
103
  optional: true,
98
- is_string: true),
104
+ is_string: true,
105
+ env_name: "FL_POD_PUSH_SWIFT_VERSION"),
99
106
  FastlaneCore::ConfigItem.new(key: :skip_import_validation,
100
107
  description: "Lint skips validating that the pod can be imported",
101
108
  optional: true,
102
- type: Boolean),
109
+ type: Boolean,
110
+ env_name: "FL_POD_PUSH_SKIP_IMPORT_VALIDATION"),
103
111
  FastlaneCore::ConfigItem.new(key: :skip_tests,
104
112
  description: "Lint skips building and running tests during validation",
105
113
  optional: true,
106
- type: Boolean),
114
+ type: Boolean,
115
+ env_name: "FL_POD_PUSH_SKIP_TESTS"),
107
116
  FastlaneCore::ConfigItem.new(key: :verbose,
108
117
  description: "Show more debugging information",
109
118
  optional: true,
110
119
  type: Boolean,
111
- default_value: false)
120
+ default_value: false,
121
+ env_name: "FL_POD_PUSH_VERBOSE")
112
122
  ]
113
123
  end
114
124
 
@@ -9,7 +9,7 @@ module Fastlane
9
9
  return
10
10
  end
11
11
 
12
- # no paramter included in the call means treat this like a normal fastlane ruby call
12
+ # no parameter included in the call means treat this like a normal fastlane ruby call
13
13
  UI.message(params.join(' '))
14
14
  end
15
15
 
@@ -21,6 +21,9 @@ module Fastlane
21
21
  sonar_scanner_args << "-Dsonar.login=\"#{params[:sonar_login]}\"" if params[:sonar_login]
22
22
  sonar_scanner_args << "-Dsonar.host.url=\"#{params[:sonar_url]}\"" if params[:sonar_url]
23
23
  sonar_scanner_args << "-Dsonar.branch.name=\"#{params[:branch_name]}\"" if params[:branch_name]
24
+ sonar_scanner_args << "-Dsonar.pullrequest.branch=\"#{params[:pull_request_branch]}\"" if params[:pull_request_branch]
25
+ sonar_scanner_args << "-Dsonar.pullrequest.base=\"#{params[:pull_request_base]}\"" if params[:pull_request_base]
26
+ sonar_scanner_args << "-Dsonar.pullrequest.key=\"#{params[:pull_request_key]}\"" if params[:pull_request_key]
24
27
  sonar_scanner_args << params[:sonar_runner_args] if params[:sonar_runner_args]
25
28
 
26
29
  command = [
@@ -103,6 +106,21 @@ module Fastlane
103
106
  env_name: "FL_SONAR_RUNNER_BRANCH_NAME",
104
107
  description: "Pass the branch name which is getting scanned",
105
108
  optional: true,
109
+ is_string: true),
110
+ FastlaneCore::ConfigItem.new(key: :pull_request_branch,
111
+ env_name: "FL_SONAR_RUNNER_PULL_REQUEST_BRANCH",
112
+ description: "The name of the branch that contains the changes to be merged",
113
+ optional: true,
114
+ is_string: true),
115
+ FastlaneCore::ConfigItem.new(key: :pull_request_base,
116
+ env_name: "FL_SONAR_RUNNER_PULL_REQUEST_BASE",
117
+ description: "The long-lived branch into which the PR will be merged",
118
+ optional: true,
119
+ is_string: true),
120
+ FastlaneCore::ConfigItem.new(key: :pull_request_key,
121
+ env_name: "FL_SONAR_RUNNER_PULL_REQUEST_KEY",
122
+ description: "Unique identifier of your PR. Must correspond to the key of the PR in GitHub or TFS",
123
+ optional: true,
106
124
  is_string: true)
107
125
  ]
108
126
  end
@@ -43,7 +43,7 @@ module Fastlane
43
43
  Fastlane::PluginUpdateManager.show_update_status
44
44
  if FastlaneCore::Globals.capture_output?
45
45
  if $stdout.respond_to?(:string)
46
- # Sometimes you can get NoMethodError: undefined method `string' for #<IO:<STDOUT>> when runing with FastlaneRunner (swift)
46
+ # Sometimes you can get NoMethodError: undefined method `string' for #<IO:<STDOUT>> when running with FastlaneRunner (swift)
47
47
  FastlaneCore::Globals.captured_output = Helper.strip_ansi_colors($stdout.string)
48
48
  end
49
49
  $stdout = STDOUT
@@ -31,6 +31,11 @@ module Fastlane
31
31
  end
32
32
 
33
33
  def device_avalaible?(serial)
34
+ UI.deprecated("Please use `device_available?` instead... This will be removed in a future version of fastlane")
35
+ device_available?(serial)
36
+ end
37
+
38
+ def device_available?(serial)
34
39
  load_all_devices
35
40
  return devices.map(&:serial).include?(serial)
36
41
  end
@@ -7,7 +7,7 @@ module Fastlane
7
7
  def discover_crashlytics_path(params)
8
8
  path = params[:crashlytics_path]
9
9
 
10
- # Finding submit binary inside of given Crashlytics path (for backwards compatability)
10
+ # Finding submit binary inside of given Crashlytics path (for backwards compatibility)
11
11
  if path
12
12
  if File.basename(path) != "submit"
13
13
  path = Dir[File.join(path, '**', 'submit')].last
@@ -337,6 +337,7 @@ func parseInt(fromString: String, function: String = #function) -> Int {
337
337
  key_default_values = []
338
338
  key_optionality_values = []
339
339
  key_type_overrides = []
340
+ key_is_strings = []
340
341
 
341
342
  if options.kind_of?(Array)
342
343
  options.each do |current|
@@ -350,6 +351,7 @@ func parseInt(fromString: String, function: String = #function) -> Int {
350
351
  key_default_values << current.code_gen_default_value
351
352
  key_optionality_values << current.optional
352
353
  key_type_overrides << current.data_type
354
+ key_is_strings << current.is_string
353
355
  end
354
356
  end
355
357
  action_return_type = action.return_type
@@ -362,6 +364,7 @@ func parseInt(fromString: String, function: String = #function) -> Int {
362
364
  key_default_values: key_default_values,
363
365
  key_optionality_values: key_optionality_values,
364
366
  key_type_overrides: key_type_overrides,
367
+ key_is_strings: key_is_strings,
365
368
  return_type: action_return_type
366
369
  )
367
370
  generated_protocol_file_path = generate_tool_protocol(tool_swift_function: tool_swift_function)
@@ -375,6 +378,7 @@ func parseInt(fromString: String, function: String = #function) -> Int {
375
378
  key_default_values: key_default_values,
376
379
  key_optionality_values: key_optionality_values,
377
380
  key_type_overrides: key_type_overrides,
381
+ key_is_strings: key_is_strings,
378
382
  return_type: action_return_type
379
383
  )
380
384
  end
@@ -7,15 +7,17 @@ module Fastlane
7
7
  attr_accessor :param_default_values
8
8
  attr_accessor :param_optionality_values
9
9
  attr_accessor :param_type_overrides
10
+ attr_accessor :param_is_strings
10
11
  attr_accessor :reserved_words
11
12
  attr_accessor :default_values_to_ignore
12
13
 
13
- def initialize(action_name: nil, keys: nil, key_descriptions: nil, key_default_values: nil, key_optionality_values: nil, key_type_overrides: nil, return_type: nil)
14
+ def initialize(action_name: nil, keys: nil, key_descriptions: nil, key_default_values: nil, key_optionality_values: nil, key_type_overrides: nil, key_is_strings: nil, return_type: nil)
14
15
  @function_name = action_name
15
16
  @param_names = keys
16
17
  @param_descriptions = key_descriptions
17
18
  @param_default_values = key_default_values
18
19
  @param_optionality_values = key_optionality_values
20
+ @param_is_strings = key_is_strings
19
21
  @return_type = return_type
20
22
  @param_type_overrides = key_type_overrides
21
23
 
@@ -91,11 +93,13 @@ module Fastlane
91
93
  return default_value
92
94
  end
93
95
 
94
- def get_type(param: nil, default_value: nil, optional: nil, param_type_override: nil)
96
+ def get_type(param: nil, default_value: nil, optional: nil, param_type_override: nil, is_string: true)
95
97
  unless param_type_override.nil?
96
98
  type = determine_type_from_override(type_override: param_type_override)
97
99
  end
98
- type ||= "String"
100
+
101
+ # defaulting type to Any if is_string is false so users are allowed to input all allowed types
102
+ type ||= is_string ? "String" : "Any"
99
103
 
100
104
  optional_specifier = ""
101
105
  # if we are optional and don't have a default value, we'll need to use ?
@@ -121,8 +125,8 @@ module Fastlane
121
125
  return ""
122
126
  end
123
127
 
124
- param_names_and_types = @param_names.zip(param_default_values, param_optionality_values, param_type_overrides).map do |param, default_value, optional, param_type_override|
125
- type = get_type(param: param, default_value: default_value, optional: optional, param_type_override: param_type_override)
128
+ param_names_and_types = @param_names.zip(param_default_values, param_optionality_values, param_type_overrides, param_is_strings).map do |param, default_value, optional, param_type_override, is_string|
129
+ type = get_type(param: param, default_value: default_value, optional: optional, param_type_override: param_type_override, is_string: is_string)
126
130
 
127
131
  unless default_value.nil?
128
132
  if type == "[String : Any]"
@@ -304,8 +308,8 @@ module Fastlane
304
308
  return ""
305
309
  end
306
310
 
307
- param_names_and_types = @param_names.zip(param_default_values, param_optionality_values, param_type_overrides).map do |param, default_value, optional, param_type_override|
308
- type = get_type(param: param, default_value: default_value, optional: optional, param_type_override: param_type_override)
311
+ param_names_and_types = @param_names.zip(param_default_values, param_optionality_values, param_type_overrides).map do |param, default_value, optional, param_type_override, is_string|
312
+ type = get_type(param: param, default_value: default_value, optional: optional, param_type_override: param_type_override, is_string: is_string)
309
313
 
310
314
  param = camel_case_lower(string: param)
311
315
  param = sanitize_reserved_word(word: param)
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.129.0.beta.20190811200106'.freeze
2
+ VERSION = '2.129.0.beta.20190813200016'.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
@@ -13,7 +13,7 @@ module FastlaneCore
13
13
  def new_event(action_stage)
14
14
  {
15
15
  client_id: @p_hash,
16
- category: "fastlane Client Langauge - #{@fastlane_client_language}",
16
+ category: "fastlane Client Language - #{@fastlane_client_language}",
17
17
  action: action_stage,
18
18
  label: action_name,
19
19
  value: nil
@@ -196,7 +196,7 @@ module FastlaneCore
196
196
  return
197
197
  end
198
198
 
199
- # We need to explicity test against Fastlane::Boolean, TrueClass/FalseClass
199
+ # We need to explicitly test against Fastlane::Boolean, TrueClass/FalseClass
200
200
  if value.class != FalseClass && value.class != TrueClass
201
201
  UI.user_error!("'#{self.key}' value must be either `true` or `false`! Found #{value.class} instead.")
202
202
  end
@@ -330,7 +330,7 @@ module Frameit
330
330
  background = put_title_into_background_stacked(background, title, keyword)
331
331
  return background
332
332
  end
333
- # sum_width: the width of both labels together including the space inbetween
333
+ # sum_width: the width of both labels together including the space in-between
334
334
  # is used to calculate the ratio
335
335
  sum_width = title.width
336
336
  sum_width += keyword.width + keyword_padding if keyword
@@ -210,7 +210,7 @@ module Gym
210
210
  env_name: "SUPPRESS_OUTPUT",
211
211
  description: "Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path",
212
212
  optional: true,
213
- is_string: false),
213
+ type: Boolean),
214
214
  FastlaneCore::ConfigItem.new(key: :disable_xcpretty,
215
215
  env_name: "DISABLE_XCPRETTY",
216
216
  description: "Disable xcpretty formatting of build output",
@@ -148,7 +148,7 @@ module Match
148
148
  rows = self.profiles.collect do |p|
149
149
  status = p.status == 'Active' ? p.status.green : p.status.red
150
150
 
151
- # Expires is somtimes nil
151
+ # Expires is sometimes nil
152
152
  expires = p.expires ? p.expires.strftime("%Y-%m-%d") : nil
153
153
  [p.name, p.id, status, p.type, expires]
154
154
  end
@@ -156,7 +156,7 @@ module Match
156
156
  UI.message("Installing certificate...")
157
157
 
158
158
  # Only looking for cert in "custom" (non login.keychain) keychain
159
- # Doing this for backwards compatability
159
+ # Doing this for backwards compatibility
160
160
  keychain_name = params[:keychain_name] == "login.keychain" ? nil : params[:keychain_name]
161
161
 
162
162
  if FastlaneCore::CertChecker.installed?(cert_path, in_keychain: keychain_name)
@@ -217,7 +217,7 @@ module Match
217
217
  end
218
218
  end
219
219
 
220
- if profile.nil? || params[:force]
220
+ if profile.nil? || force
221
221
  if params[:readonly]
222
222
  UI.error("No matching provisioning profiles found for '#{profile_name}'")
223
223
  UI.error("A new one cannot be created because you enabled `readonly`")
@@ -23,7 +23,7 @@ module Match
23
23
 
24
24
  # Call this method after creating a new object to configure
25
25
  # the given Storage object. This method will take
26
- # different paramters depending on specific class being used
26
+ # different parameters depending on specific class being used
27
27
  def configure
28
28
  not_implemented(__method__)
29
29
  end
@@ -213,7 +213,7 @@ module Scan
213
213
  env_name: "SCAN_SUPPRESS_XCODE_OUTPUT",
214
214
  description: "Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path",
215
215
  optional: true,
216
- is_string: false),
216
+ type: Boolean),
217
217
  FastlaneCore::ConfigItem.new(key: :formatter,
218
218
  short_option: "-n",
219
219
  env_name: "SCAN_FORMATTER",
@@ -136,7 +136,7 @@ module Scan
136
136
  # Zips build products and moves it to output directory
137
137
  UI.message("Zipping build products")
138
138
  FastlaneCore::Helper.zip_directory(path, output_path, contents_only: true, overwrite: true, print: false)
139
- UI.message("Succesfully zipped build products: #{output_path}")
139
+ UI.message("Successfully zipped build products: #{output_path}")
140
140
  end
141
141
 
142
142
  def test_results
@@ -24,6 +24,7 @@ module Spaceship
24
24
 
25
25
  module BetaTesterState
26
26
  INSTALLED = "INSTALLED"
27
+ INVITED = "INVITED"
27
28
  NO_BUILDS = "NO_BUILDS"
28
29
  end
29
30
 
@@ -22,6 +22,10 @@ module Spaceship
22
22
  upload_file(app_version: app_version, upload_file: upload_file, path: '/upload/image', content_provider_id: content_provider_id, sso_token: sso_token_for_image, du_validation_rule_set: screenshot_picture_type(device, is_messages))
23
23
  end
24
24
 
25
+ def upload_purchase_merch_screenshot(app_id, upload_file, content_provider_id, sso_token_for_image)
26
+ upload_file(app_id: app_id, upload_file: upload_file, path: '/upload/image', content_provider_id: content_provider_id, sso_token: sso_token_for_image, du_validation_rule_set: 'MZPFT.MerchandisingIAPIcon')
27
+ end
28
+
25
29
  def upload_purchase_review_screenshot(app_id, upload_file, content_provider_id, sso_token_for_image)
26
30
  upload_file(app_id: app_id, upload_file: upload_file, path: '/upload/image', content_provider_id: content_provider_id, sso_token: sso_token_for_image, du_validation_rule_set: get_picture_type(upload_file))
27
31
  end
@@ -89,6 +89,12 @@ module Spaceship
89
89
  # Certs are not associated with apps
90
90
  #####################################################
91
91
 
92
+ # An Apple development code signing certificate used for development environment
93
+ class AppleDevelopment < Certificate; end
94
+
95
+ # An Apple distribution code signing certificate used for distribution environment
96
+ class AppleDistribution < Certificate; end
97
+
92
98
  # A development code signing certificate used for development environment
93
99
  class Development < Certificate; end
94
100
 
@@ -152,6 +158,11 @@ module Spaceship
152
158
  # A Mac push notification certificate for production environment
153
159
  class MacProductionPush < PushCertificate; end
154
160
 
161
+ APPLE_CERTIFICATE_TYPE_IDS = {
162
+ "83Q87W3TGH" => AppleDevelopment,
163
+ "WXV89964HE" => AppleDistribution
164
+ }
165
+
155
166
  IOS_CERTIFICATE_TYPE_IDS = {
156
167
  "5QPB9NHCEI" => Development,
157
168
  "R58UK2EWSO" => Production,
@@ -187,7 +198,9 @@ module Spaceship
187
198
  "DIVN2GW3XT" => DeveloperIdApplication
188
199
  }
189
200
 
190
- CERTIFICATE_TYPE_IDS = IOS_CERTIFICATE_TYPE_IDS.merge(MAC_CERTIFICATE_TYPE_IDS)
201
+ CERTIFICATE_TYPE_IDS = APPLE_CERTIFICATE_TYPE_IDS
202
+ .merge(IOS_CERTIFICATE_TYPE_IDS)
203
+ .merge(MAC_CERTIFICATE_TYPE_IDS)
191
204
 
192
205
  # Class methods
193
206
  class << self
@@ -259,6 +272,7 @@ module Spaceship
259
272
  def all(mac: false)
260
273
  if self == Certificate # are we the base-class?
261
274
  type_ids = mac ? MAC_CERTIFICATE_TYPE_IDS : IOS_CERTIFICATE_TYPE_IDS
275
+ type_ids = APPLE_CERTIFICATE_TYPE_IDS.merge(type_ids)
262
276
  types = type_ids.keys
263
277
  types += OLDER_IOS_CERTIFICATE_TYPES unless mac
264
278
  else
@@ -25,7 +25,7 @@ module Spaceship
25
25
  puts("Please try unsetting the FASTLANE_SESSION environment variable".yellow)
26
26
  puts("(if it is set) and re-run `fastlane spaceauth`".yellow)
27
27
  puts("")
28
- puts("Execption type: #{ex.class}")
28
+ puts("Exception type: #{ex.class}")
29
29
  raise ex
30
30
  end
31
31
 
@@ -93,7 +93,7 @@ module Spaceship
93
93
  end
94
94
 
95
95
  # @return (Spaceship::TestFlight::Tester) Returns the testers matching the parameter.
96
- # ITC searchs all fields, and is full text. The search results are the union of all words in the search text
96
+ # ITC searches all fields, and is full text. The search results are the union of all words in the search text
97
97
  # @param text (String) (required): Value used to filter the tester, case insensitive
98
98
  def self.search(app_id: nil, text: nil, is_email_exact_match: false)
99
99
  text = text.strip
@@ -5,7 +5,7 @@ module Spaceship
5
5
  # A definition of different styled displays used by devices
6
6
  # that App Store Connect supports storing screenshots.
7
7
  # Display styles often only vary based on screen resolution
8
- # however other aspects of a displays physical apperance are
8
+ # however other aspects of a displays physical appearance are
9
9
  # also factored (i.e if the home indicator is provided via
10
10
  # a hardware button or a software interface).
11
11
  class DisplayFamily
@@ -15,12 +15,12 @@ module Spaceship
15
15
  # Spaceship::Tunes::AppScreenshot#device_type attribute.
16
16
  attr_accessor :name
17
17
 
18
- # The user friendly name of this defintion.
18
+ # The user friendly name of this definition.
19
19
  #
20
20
  # Source: Media Manager in App Store Connect.
21
21
  attr_accessor :friendly_name
22
22
 
23
- # The user friendly category for this defintion (i.e iPhone,
23
+ # The user friendly category for this definition (i.e iPhone,
24
24
  # Apple TV or Desktop).
25
25
  attr_accessor :friendly_category_name
26
26
 
@@ -65,6 +65,7 @@ module Spaceship
65
65
  reference_name: nil,
66
66
  product_id: nil,
67
67
  cleared_for_sale: true,
68
+ merch_screenshot: nil,
68
69
  review_notes: nil,
69
70
  review_screenshot: nil,
70
71
  pricing_intervals: nil,
@@ -78,6 +79,7 @@ module Spaceship
78
79
  reference_name: reference_name,
79
80
  product_id: product_id,
80
81
  cleared_for_sale: cleared_for_sale,
82
+ merch_screenshot: merch_screenshot,
81
83
  review_notes: review_notes,
82
84
  review_screenshot: review_screenshot,
83
85
  pricing_intervals: pricing_intervals,
@@ -30,6 +30,10 @@ module Spaceship
30
30
  # @return (Bool) Cleared for sale flag
31
31
  attr_accessor :cleared_for_sale
32
32
 
33
+ # @return (Hash) app store promotion image (optional)
34
+ attr_accessor :merch_screenshot
35
+
36
+ # @return (Hash) app review screenshot (required)
33
37
  attr_accessor :review_screenshot
34
38
 
35
39
  # @return (String) the notes for the review team
@@ -142,6 +146,12 @@ module Spaceship
142
146
  Tunes::IAPStatus.get_from_string(raw_data["versions"].first["status"])
143
147
  end
144
148
 
149
+ # @return (Hash) Hash containing existing promotional image data
150
+ def merch_screenshot
151
+ return nil unless raw_data && raw_data["versions"] && raw_data["versions"].first && raw_data["versions"].first["merch"] && raw_data["versions"].first["merch"]["images"].first["image"]["value"]
152
+ raw_data["versions"].first["merch"]["images"].first["image"]["value"]
153
+ end
154
+
145
155
  # @return (Hash) Hash containing existing review screenshot data
146
156
  def review_screenshot
147
157
  return nil unless raw_data && raw_data["versions"] && raw_data["versions"].first && raw_data["versions"].first["reviewScreenshot"] && raw_data['versions'].first["reviewScreenshot"]["value"]
@@ -172,6 +182,13 @@ module Spaceship
172
182
  raw_data.set(["pricingIntervals"], raw_pricing_intervals)
173
183
  @raw_pricing_data["subscriptions"] = raw_pricing_intervals if @raw_pricing_data
174
184
 
185
+ if @merch_screenshot
186
+ # Upload App Store Promotional image (Optional)
187
+ upload_file = UploadFile.from_path(@merch_screenshot)
188
+ merch_data = client.upload_purchase_merch_screenshot(application.apple_id, upload_file)
189
+ raw_data["versions"][0]["merch"] = merch_data
190
+ end
191
+
175
192
  if @review_screenshot
176
193
  # Upload Screenshot
177
194
  upload_file = UploadFile.from_path(@review_screenshot)
@@ -791,6 +791,35 @@ module Spaceship
791
791
  du_client.upload_watch_icon(app_version, upload_image, content_provider_id, sso_token_for_image)
792
792
  end
793
793
 
794
+ # Uploads an In-App-Purchase Promotional image
795
+ # @param upload_image (UploadFile): The icon to upload
796
+ # @return [JSON] the image data, ready to be added to an In-App-Purchase
797
+ def upload_purchase_merch_screenshot(app_id, upload_image)
798
+ data = du_client.upload_purchase_merch_screenshot(app_id, upload_image, content_provider_id, sso_token_for_image)
799
+ {
800
+ "images" => [
801
+ {
802
+ "id" => nil,
803
+ "image" => {
804
+ "value" => {
805
+ "assetToken" => data["token"],
806
+ "originalFileName" => upload_image.file_name,
807
+ "height" => data["height"],
808
+ "width" => data["width"],
809
+ "checksum" => data["md5"]
810
+ },
811
+ "isEditable" => true,
812
+ "isREquired" => false,
813
+ "errorKeys" => nil
814
+ },
815
+ "status" => "proposed"
816
+ }
817
+ ],
818
+ "showByDefault" => true,
819
+ "isActive" => false
820
+ }
821
+ end
822
+
794
823
  # Uploads an In-App-Purchase Review screenshot
795
824
  # @param app_id (AppId): The id of the app
796
825
  # @param upload_image (UploadFile): The icon to upload
@@ -1304,7 +1333,7 @@ module Spaceship
1304
1333
  end
1305
1334
 
1306
1335
  # Creates an In-App-Purchases
1307
- def create_iap!(app_id: nil, type: nil, versions: nil, reference_name: nil, product_id: nil, cleared_for_sale: true, review_notes: nil, review_screenshot: nil, pricing_intervals: nil, family_id: nil, subscription_duration: nil, subscription_free_trial: nil)
1336
+ def create_iap!(app_id: nil, type: nil, versions: nil, reference_name: nil, product_id: nil, cleared_for_sale: true, merch_screenshot: nil, review_notes: nil, review_screenshot: nil, pricing_intervals: nil, family_id: nil, subscription_duration: nil, subscription_free_trial: nil)
1308
1337
  # Load IAP Template based on Type
1309
1338
  type ||= "consumable"
1310
1339
  r = request(:get, "ra/apps/#{app_id}/iaps/#{type}/template")
@@ -1348,6 +1377,13 @@ module Spaceship
1348
1377
  data["versions"][0]["details"]["value"] = versions_array
1349
1378
  data['versions'][0]["reviewNotes"] = { value: review_notes }
1350
1379
 
1380
+ if merch_screenshot
1381
+ # Upload App Store Promotional image (Optional)
1382
+ upload_file = UploadFile.from_path(merch_screenshot)
1383
+ merch_data = upload_purchase_merch_screenshot(app_id, upload_file)
1384
+ data["versions"][0]["merch"] = merch_data
1385
+ end
1386
+
1351
1387
  if review_screenshot
1352
1388
  # Upload Screenshot:
1353
1389
  upload_file = UploadFile.from_path(review_screenshot)
@@ -312,7 +312,7 @@ module Supply
312
312
 
313
313
  track_version_codes = apk_version_code.kind_of?(Array) ? apk_version_code : [apk_version_code]
314
314
 
315
- # This change happend on 2018-04-24
315
+ # This change happened on 2018-04-24
316
316
  # rollout cannot be sent on any other track besides "rollout"
317
317
  # https://github.com/fastlane/fastlane/issues/12372
318
318
  rollout = nil unless track == "rollout"
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.129.0.beta.20190811200106
4
+ version: 2.129.0.beta.20190813200016
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luka Mirosevic
@@ -27,7 +27,7 @@ authors:
27
27
  autorequire:
28
28
  bindir: bin
29
29
  cert_chain: []
30
- date: 2019-08-11 00:00:00.000000000 Z
30
+ date: 2019-08-13 00:00:00.000000000 Z
31
31
  dependencies:
32
32
  - !ruby/object:Gem::Dependency
33
33
  name: slack-notifier
@@ -1742,24 +1742,24 @@ metadata:
1742
1742
  post_install_message:
1743
1743
  rdoc_options: []
1744
1744
  require_paths:
1745
- - sigh/lib
1745
+ - scan/lib
1746
+ - deliver/lib
1746
1747
  - produce/lib
1748
+ - spaceship/lib
1749
+ - pem/lib
1750
+ - match/lib
1751
+ - screengrab/lib
1747
1752
  - frameit/lib
1753
+ - credentials_manager/lib
1754
+ - pilot/lib
1748
1755
  - fastlane/lib
1749
- - spaceship/lib
1750
- - fastlane_core/lib
1756
+ - cert/lib
1751
1757
  - supply/lib
1752
- - gym/lib
1753
- - screengrab/lib
1754
1758
  - precheck/lib
1755
- - pem/lib
1756
- - scan/lib
1757
- - credentials_manager/lib
1758
- - match/lib
1759
1759
  - snapshot/lib
1760
- - cert/lib
1761
- - deliver/lib
1762
- - pilot/lib
1760
+ - gym/lib
1761
+ - sigh/lib
1762
+ - fastlane_core/lib
1763
1763
  required_ruby_version: !ruby/object:Gem::Requirement
1764
1764
  requirements:
1765
1765
  - - ">="