fastlane 2.146.1 → 2.147.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +82 -82
  3. data/fastlane/lib/assets/custom_action_template.rb +6 -6
  4. data/fastlane/lib/fastlane/actions/cocoapods.rb +1 -1
  5. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +3 -1
  6. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -1
  7. data/fastlane/lib/fastlane/actions/git_branch.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/set_pod_key.rb +3 -3
  9. data/fastlane/lib/fastlane/actions/testfairy.rb +18 -3
  10. data/fastlane/lib/fastlane/actions/verify_xcode.rb +7 -0
  11. data/fastlane/lib/fastlane/commands_generator.rb +4 -1
  12. data/fastlane/lib/fastlane/helper/lane_helper.rb +13 -0
  13. data/fastlane/lib/fastlane/version.rb +1 -1
  14. data/fastlane/swift/Deliverfile.swift +1 -1
  15. data/fastlane/swift/Fastlane.swift +41 -11
  16. data/fastlane/swift/Gymfile.swift +1 -1
  17. data/fastlane/swift/Matchfile.swift +1 -1
  18. data/fastlane/swift/MatchfileProtocol.swift +5 -1
  19. data/fastlane/swift/Precheckfile.swift +1 -1
  20. data/fastlane/swift/Scanfile.swift +1 -1
  21. data/fastlane/swift/ScanfileProtocol.swift +6 -2
  22. data/fastlane/swift/Screengrabfile.swift +1 -1
  23. data/fastlane/swift/Snapshotfile.swift +1 -1
  24. data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
  25. data/fastlane_core/lib/fastlane_core/helper.rb +17 -0
  26. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +46 -2
  27. data/frameit/lib/frameit/device_types.rb +10 -0
  28. data/frameit/lib/frameit/options.rb +5 -2
  29. data/frameit/lib/frameit/runner.rb +5 -0
  30. data/frameit/lib/frameit/screenshot.rb +1 -0
  31. data/match/lib/match/change_password.rb +1 -18
  32. data/match/lib/match/encryption/openssl.rb +1 -1
  33. data/match/lib/match/generator.rb +5 -1
  34. data/match/lib/match/options.rb +5 -0
  35. data/match/lib/match/utils.rb +1 -1
  36. data/scan/lib/scan/options.rb +6 -1
  37. data/scan/lib/scan/runner.rb +2 -0
  38. data/scan/lib/scan/test_command_generator.rb +1 -1
  39. data/snapshot/lib/assets/SnapfileTemplate +3 -0
  40. data/snapshot/lib/snapshot/options.rb +10 -0
  41. data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
  42. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +4 -0
  43. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +21 -0
  44. data/snapshot/lib/snapshot/test_command_generator_base.rb +3 -0
  45. data/spaceship/lib/spaceship/base.rb +1 -1
  46. data/spaceship/lib/spaceship/connect_api/model.rb +6 -0
  47. data/spaceship/lib/spaceship/tunes/iap.rb +15 -0
  48. data/spaceship/lib/spaceship/tunes/tunes_client.rb +14 -0
  49. data/supply/lib/supply/.client.rb.swp +0 -0
  50. metadata +35 -21
@@ -99,7 +99,7 @@ module Match
99
99
  UI.important("Enter the passphrase that should be used to encrypt/decrypt your certificates")
100
100
  UI.important("This passphrase is specific per repository and will be stored in your local keychain")
101
101
  UI.important("Make sure to remember the password, as you'll need it when you run match on a different machine")
102
- password = ChangePassword.ask_password(confirm: true)
102
+ password = FastlaneCore::Helper.ask_password(message: "Passphrase for Match storage: ", confirm: true)
103
103
  store_password(password)
104
104
  end
105
105
  end
@@ -60,7 +60,11 @@ module Match
60
60
  names << params[:platform]
61
61
  end
62
62
 
63
- profile_name = names.join(" ")
63
+ if params[:profile_name].to_s.empty?
64
+ profile_name = names.join(" ")
65
+ else
66
+ profile_name = params[:profile_name]
67
+ end
64
68
 
65
69
  values = {
66
70
  app_identifier: app_identifier,
@@ -226,6 +226,11 @@ module Match
226
226
  description: "The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. \"Apple Pay Pass Suppression Development\")",
227
227
  optional: true,
228
228
  default_value: nil),
229
+ FastlaneCore::ConfigItem.new(key: :profile_name,
230
+ env_name: "MATCH_PROVISIONING_PROFILE_NAME",
231
+ description: "A custom name for the provisioning profile. This will replace the default provisioning profile name if specified",
232
+ optional: true,
233
+ default_value: nil),
229
234
  FastlaneCore::ConfigItem.new(key: :output_path,
230
235
  env_name: "MATCH_OUTPUT_PATH",
231
236
  description: "Path in which to export certificates, key and profile",
@@ -4,7 +4,7 @@ require_relative 'module'
4
4
 
5
5
  module Match
6
6
  class Utils
7
- def self.import(item_path, keychain, password: "")
7
+ def self.import(item_path, keychain, password: nil)
8
8
  keychain_path = FastlaneCore::Helper.keychain_path(keychain)
9
9
  FastlaneCore::KeychainImporter.import_file(item_path, keychain_path, keychain_password: password, output: FastlaneCore::Globals.verbose?)
10
10
  end
@@ -180,6 +180,11 @@ module Scan
180
180
  description: "Should the HTML report be opened when tests are completed?",
181
181
  is_string: false,
182
182
  default_value: false),
183
+ FastlaneCore::ConfigItem.new(key: :disable_xcpretty,
184
+ env_name: "SCAN_DISABLE_XCPRETTY",
185
+ description: "Disable xcpretty formatting of build, similar to `output_style='raw'` but this will also skip the test results table",
186
+ type: Boolean,
187
+ optional: true),
183
188
  FastlaneCore::ConfigItem.new(key: :output_directory,
184
189
  short_option: "-o",
185
190
  env_name: "SCAN_OUTPUT_DIRECTORY",
@@ -191,7 +196,7 @@ module Scan
191
196
  FastlaneCore::ConfigItem.new(key: :output_style,
192
197
  short_option: "-b",
193
198
  env_name: "SCAN_OUTPUT_STYLE",
194
- description: "Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty)",
199
+ description: "Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty during xcodebuild)",
195
200
  optional: true,
196
201
  verify_block: proc do |value|
197
202
  UI.user_error!("Invalid output_style #{value}") unless ['standard', 'basic', 'rspec', 'raw'].include?(value)
@@ -148,6 +148,8 @@ module Scan
148
148
  end
149
149
 
150
150
  def test_results
151
+ return if Scan.config[:disable_xcpretty]
152
+
151
153
  temp_junit_report = Scan.cache[:temp_junit_report]
152
154
  return File.read(temp_junit_report) if temp_junit_report && File.file?(temp_junit_report)
153
155
 
@@ -85,7 +85,7 @@ module Scan
85
85
  def pipe
86
86
  pipe = ["| tee '#{xcodebuild_log_path}'"]
87
87
 
88
- if Scan.config[:output_style] == 'raw'
88
+ if Scan.config[:disable_xcpretty] || Scan.config[:output_style] == 'raw'
89
89
  return pipe
90
90
  end
91
91
 
@@ -27,6 +27,9 @@
27
27
  # remove the '#' to clear all previously generated screenshots before creating new ones
28
28
  # clear_previous_screenshots(true)
29
29
 
30
+ # Remove the '#' to set the status bar to 9:41 AM, and show full battery and reception.
31
+ # override_status_bar(true)
32
+
30
33
  # Arguments to pass to the app on launch. See https://docs.fastlane.tools/actions/snapshot/#launch-arguments
31
34
  # launch_arguments(["-favColor red"])
32
35
 
@@ -111,6 +111,11 @@ module Snapshot
111
111
  description: "Enabling this option will automatically erase the simulator before running the application",
112
112
  default_value: false,
113
113
  is_string: false),
114
+ FastlaneCore::ConfigItem.new(key: :override_status_bar,
115
+ env_name: 'SNAPSHOT_OVERRIDE_STATUS_BAR',
116
+ description: "Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception",
117
+ default_value: false,
118
+ is_string: false),
114
119
  FastlaneCore::ConfigItem.new(key: :localize_simulator,
115
120
  env_name: 'SNAPSHOT_LOCALIZE_SIMULATOR',
116
121
  description: "Enabling this option will configure the Simulator's system language",
@@ -232,6 +237,11 @@ module Snapshot
232
237
  env_name: "SNAPSHOT_CLONED_SOURCE_PACKAGES_PATH",
233
238
  description: "Sets a custom path for Swift Package Manager dependencies",
234
239
  type: String,
240
+ optional: true),
241
+ FastlaneCore::ConfigItem.new(key: :testplan,
242
+ env_name: "SNAPSHOT_TESTPLAN",
243
+ description: "The testplan associated with the scheme that should be used for testing",
244
+ is_string: true,
235
245
  optional: true)
236
246
  ]
237
247
  end
@@ -12,6 +12,7 @@ module Snapshot
12
12
  attr_accessor :reinstall_app
13
13
  attr_accessor :app_identifier
14
14
  attr_accessor :disable_slide_to_type
15
+ attr_accessor :override_status_bar
15
16
 
16
17
  # xcode 8
17
18
  attr_accessor :number_of_retries
@@ -43,6 +44,7 @@ module Snapshot
43
44
  @output_directory = snapshot_config[:output_directory]
44
45
  @concurrent_simulators = snapshot_config[:concurrent_simulators]
45
46
  @disable_slide_to_type = snapshot_config[:disable_slide_to_type]
47
+ @override_status_bar = snapshot_config[:override_status_bar]
46
48
 
47
49
  launch_arguments = Array(snapshot_config[:launch_arguments])
48
50
  # if more than 1 set of arguments, use a tuple with an index
@@ -89,10 +89,14 @@ module Snapshot
89
89
  log_path: xcodebuild_log_path(language: language, locale: locale)
90
90
  )
91
91
 
92
+ devices.each { |device_type| override_status_bar(device_type) } if launcher_config.override_status_bar
93
+
92
94
  UI.important("Running snapshot on: #{devices.join(', ')}")
93
95
 
94
96
  execute(command: command, language: language, locale: locale, launch_args: launch_arguments, devices: devices)
95
97
 
98
+ devices.each { |device_type| clear_status_bar(device_type) } if launcher_config.override_status_bar
99
+
96
100
  return copy_screenshots(language: language, locale: locale, launch_args: launch_arguments)
97
101
  end
98
102
 
@@ -1,4 +1,5 @@
1
1
  require 'plist'
2
+ require 'time'
2
3
 
3
4
  require_relative '../module'
4
5
  require_relative '../test_command_generator'
@@ -102,6 +103,26 @@ module Snapshot
102
103
  end
103
104
  end
104
105
 
106
+ def override_status_bar(device_type)
107
+ device_udid = TestCommandGenerator.device_udid(device_type)
108
+
109
+ UI.message("Launch Simulator #{device_type}")
110
+ Helper.backticks("xcrun instruments -w #{device_udid} &> /dev/null")
111
+
112
+ UI.message("Overriding Status Bar")
113
+
114
+ # The time needs to be passed as ISO8601 so the simulator formats it correctly
115
+ time = Time.new(2007, 1, 9, 9, 41, 0)
116
+ Helper.backticks("xcrun simctl status_bar #{device_udid} override --time #{time.iso8601} --dataNetwork wifi --wifiMode active --wifiBars 3 --cellularMode active --cellularBars 4 --batteryState charged --batteryLevel 100 &> /dev/null")
117
+ end
118
+
119
+ def clear_status_bar(device_type)
120
+ device_udid = TestCommandGenerator.device_udid(device_type)
121
+
122
+ UI.message("Clearing Status Bar Override")
123
+ Helper.backticks("xcrun simctl status_bar #{device_udid} clear &> /dev/null")
124
+ end
125
+
105
126
  def uninstall_app(device_type)
106
127
  launcher_config.app_identifier ||= UI.input("App Identifier: ")
107
128
  device_udid = TestCommandGenerator.device_udid(device_type)
@@ -26,6 +26,9 @@ module Snapshot
26
26
  options << "-sdk '#{config[:sdk]}'" if config[:sdk]
27
27
  options << "-derivedDataPath '#{derived_data_path}'"
28
28
  options << "-resultBundlePath '#{result_bundle_path}'" if result_bundle_path
29
+ if FastlaneCore::Helper.xcode_at_least?(11)
30
+ options << "-testPlan '#{config[:testplan]}'" if config[:testplan]
31
+ end
29
32
  options << config[:xcargs] if config[:xcargs]
30
33
  return options
31
34
  end
@@ -295,7 +295,7 @@ module Spaceship
295
295
  def inspect_value
296
296
  self.attributes.map do |k|
297
297
  v = self.send(k).inspect
298
- v.gsub!("\n", "\n\t") # to align nested elements
298
+ v = v.gsub("\n", "\n\t") # to align nested elements
299
299
 
300
300
  "\t#{k}=#{v}"
301
301
  end.join(", \n")
@@ -49,6 +49,12 @@ module Spaceship
49
49
  alias_method(key_writer, writer)
50
50
  end
51
51
  end
52
+
53
+ def to_json(*options)
54
+ instance_variables.map do |var|
55
+ [var.to_s[1..-1], instance_variable_get(var)]
56
+ end.to_h.to_json(*options)
57
+ end
52
58
  end
53
59
 
54
60
  module Models
@@ -132,6 +132,21 @@ module Spaceship
132
132
  return nil
133
133
  end
134
134
 
135
+ # generate app-specific shared secret (or regenerate if exists)
136
+ def generate_shared_secret
137
+ client.generate_shared_secret(app_id: self.application.apple_id)
138
+ end
139
+
140
+ # retrieve app-specific shared secret
141
+ # @param create (Boolean) Create new shared secret if does not exist
142
+ def get_shared_secret(create: false)
143
+ secret = client.get_shared_secret(app_id: self.application.apple_id)
144
+ if create && secret.nil?
145
+ secret = generate_shared_secret
146
+ end
147
+ secret
148
+ end
149
+
135
150
  private
136
151
 
137
152
  def find_product_with_retries(product_id, max_tries)
@@ -1422,6 +1422,20 @@ module Spaceship
1422
1422
  handle_itc_response(r.body)
1423
1423
  end
1424
1424
 
1425
+ # Retrieves app-specific shared secret key
1426
+ def get_shared_secret(app_id: nil)
1427
+ r = request(:get, "ra/apps/#{app_id}/iaps/appSharedSecret")
1428
+ data = parse_response(r, 'data')
1429
+ data['sharedSecret']
1430
+ end
1431
+
1432
+ # Generates app-specific shared secret key
1433
+ def generate_shared_secret(app_id: nil)
1434
+ r = request(:post, "ra/apps/#{app_id}/iaps/appSharedSecret")
1435
+ data = parse_response(r, 'data')
1436
+ data['sharedSecret']
1437
+ end
1438
+
1425
1439
  #####################################################
1426
1440
  # @!group Sandbox Testers
1427
1441
  #####################################################
Binary file
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.146.1
4
+ version: 2.147.0
5
5
  platform: ruby
6
6
  authors:
7
- - Jérôme Lacoste
7
+ - Josh Holtz
8
+ - Joshua Liebowitz
9
+ - Felix Krause
8
10
  - Iulian Onofrei
9
- - Luka Mirosevic
10
- - Matthew Ellis
11
+ - Stefan Natchev
12
+ - Fumiya Nakamura
13
+ - Jorge Revuelta H
11
14
  - Helmut Januschka
12
15
  - Manu Wallner
13
16
  - Olivier Halligon
17
+ - Danielle Tomlinson
18
+ - Jérôme Lacoste
19
+ - Matthew Ellis
20
+ - Max Ott
14
21
  - Aaron Brager
15
- - Jan Piotrowski
16
- - Kohki Miki
22
+ - Luka Mirosevic
23
+ - Andrew McBurney
17
24
  - Maksym Grebenets
18
- - Felix Krause
19
- - Josh Holtz
20
- - Max Ott
21
- - Danielle Tomlinson
22
25
  - Daniel Jankowski
26
+ - Jan Piotrowski
27
+ - Kohki Miki
23
28
  - Jimmy Dee
24
- - Fumiya Nakamura
25
- - Andrew McBurney
26
- - Stefan Natchev
27
- - Joshua Liebowitz
28
- - Jorge Revuelta H
29
29
  autorequire:
30
30
  bindir: bin
31
31
  cert_chain: []
32
- date: 2020-04-22 00:00:00.000000000 Z
32
+ date: 2020-05-12 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: slack-notifier
@@ -359,30 +359,42 @@ dependencies:
359
359
  name: faraday
360
360
  requirement: !ruby/object:Gem::Requirement
361
361
  requirements:
362
- - - "~>"
362
+ - - ">="
363
363
  - !ruby/object:Gem::Version
364
364
  version: '0.17'
365
+ - - "<"
366
+ - !ruby/object:Gem::Version
367
+ version: '2.0'
365
368
  type: :runtime
366
369
  prerelease: false
367
370
  version_requirements: !ruby/object:Gem::Requirement
368
371
  requirements:
369
- - - "~>"
372
+ - - ">="
370
373
  - !ruby/object:Gem::Version
371
374
  version: '0.17'
375
+ - - "<"
376
+ - !ruby/object:Gem::Version
377
+ version: '2.0'
372
378
  - !ruby/object:Gem::Dependency
373
379
  name: faraday_middleware
374
380
  requirement: !ruby/object:Gem::Requirement
375
381
  requirements:
376
- - - "~>"
382
+ - - ">="
377
383
  - !ruby/object:Gem::Version
378
384
  version: 0.13.1
385
+ - - "<"
386
+ - !ruby/object:Gem::Version
387
+ version: '2.0'
379
388
  type: :runtime
380
389
  prerelease: false
381
390
  version_requirements: !ruby/object:Gem::Requirement
382
391
  requirements:
383
- - - "~>"
392
+ - - ">="
384
393
  - !ruby/object:Gem::Version
385
394
  version: 0.13.1
395
+ - - "<"
396
+ - !ruby/object:Gem::Version
397
+ version: '2.0'
386
398
  - !ruby/object:Gem::Dependency
387
399
  name: fastimage
388
400
  requirement: !ruby/object:Gem::Requirement
@@ -1277,6 +1289,7 @@ files:
1277
1289
  - fastlane/lib/fastlane/helper/gem_helper.rb
1278
1290
  - fastlane/lib/fastlane/helper/git_helper.rb
1279
1291
  - fastlane/lib/fastlane/helper/gradle_helper.rb
1292
+ - fastlane/lib/fastlane/helper/lane_helper.rb
1280
1293
  - fastlane/lib/fastlane/helper/podspec_helper.rb
1281
1294
  - fastlane/lib/fastlane/helper/s3_client_helper.rb
1282
1295
  - fastlane/lib/fastlane/helper/sh_helper.rb
@@ -1771,6 +1784,7 @@ files:
1771
1784
  - spaceship/lib/spaceship/ui.rb
1772
1785
  - supply/README.md
1773
1786
  - supply/lib/supply.rb
1787
+ - supply/lib/supply/.client.rb.swp
1774
1788
  - supply/lib/supply/apk_listing.rb
1775
1789
  - supply/lib/supply/client.rb
1776
1790
  - supply/lib/supply/commands_generator.rb
@@ -1811,7 +1825,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
1811
1825
  requirements:
1812
1826
  - - ">="
1813
1827
  - !ruby/object:Gem::Version
1814
- version: 2.0.0
1828
+ version: '2.4'
1815
1829
  required_rubygems_version: !ruby/object:Gem::Requirement
1816
1830
  requirements:
1817
1831
  - - ">="