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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
  - - ">="