fastlane 2.171.0 → 2.172.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +72 -72
  3. data/deliver/lib/deliver/commands_generator.rb +1 -1
  4. data/deliver/lib/deliver/setup.rb +8 -3
  5. data/fastlane/lib/fastlane/actions/{.github_api.rb.swp → .update_fastlane.rb.swp} +0 -0
  6. data/fastlane/lib/fastlane/actions/artifactory.rb +36 -3
  7. data/fastlane/lib/fastlane/actions/build_app.rb +3 -1
  8. data/fastlane/lib/fastlane/actions/create_pull_request.rb +16 -1
  9. data/fastlane/lib/fastlane/actions/create_xcframework.rb +118 -0
  10. data/fastlane/lib/fastlane/actions/download_dsyms.rb +0 -1
  11. data/fastlane/lib/fastlane/actions/git_commit.rb +8 -4
  12. data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
  13. data/fastlane/lib/fastlane/actions/register_devices.rb +2 -1
  14. data/fastlane/lib/fastlane/actions/swiftlint.rb +4 -4
  15. data/fastlane/lib/fastlane/cli_tools_distributor.rb +3 -0
  16. data/fastlane/lib/fastlane/version.rb +1 -1
  17. data/fastlane/swift/Deliverfile.swift +2 -2
  18. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  19. data/fastlane/swift/Fastlane.swift +125 -18
  20. data/fastlane/swift/Gymfile.swift +2 -2
  21. data/fastlane/swift/GymfileProtocol.swift +11 -3
  22. data/fastlane/swift/Matchfile.swift +2 -2
  23. data/fastlane/swift/MatchfileProtocol.swift +2 -2
  24. data/fastlane/swift/Precheckfile.swift +2 -2
  25. data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
  26. data/fastlane/swift/Scanfile.swift +2 -2
  27. data/fastlane/swift/ScanfileProtocol.swift +10 -2
  28. data/fastlane/swift/Screengrabfile.swift +2 -2
  29. data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
  30. data/fastlane/swift/Snapshotfile.swift +2 -2
  31. data/fastlane/swift/SnapshotfileProtocol.swift +14 -2
  32. data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
  33. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +41 -16
  34. data/fastlane_core/lib/fastlane_core/project.rb +18 -5
  35. data/frameit/lib/frameit/device_types.rb +7 -1
  36. data/gym/lib/gym/generators/build_command_generator.rb +3 -1
  37. data/gym/lib/gym/options.rb +12 -2
  38. data/scan/lib/scan/options.rb +10 -0
  39. data/scan/lib/scan/runner.rb +6 -1
  40. data/scan/lib/scan/slack_poster.rb +3 -1
  41. data/scan/lib/scan/test_command_generator.rb +3 -1
  42. data/snapshot/lib/assets/SnapshotHelper.swift +1 -1
  43. data/snapshot/lib/snapshot/options.rb +16 -1
  44. data/snapshot/lib/snapshot/update.rb +1 -1
  45. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +3 -1
  46. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +9 -0
  47. data/spaceship/lib/spaceship/connect_api/models/device.rb +26 -0
  48. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +12 -0
  49. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +1 -0
  50. metadata +36 -23
  51. data/fastlane/lib/fastlane/actions/.download_dsyms.rb.swp +0 -0
  52. data/fastlane/lib/fastlane/actions/.set_github_release.rb.swp +0 -0
@@ -83,7 +83,12 @@ module Scan
83
83
  end
84
84
 
85
85
  def handle_results(tests_exit_status)
86
- return if Scan.config[:disable_xcpretty]
86
+ if Scan.config[:disable_xcpretty]
87
+ unless tests_exit_status == 0
88
+ UI.test_failure!("Test execution failed. Exit status: #{tests_exit_status}")
89
+ end
90
+ return
91
+ end
87
92
 
88
93
  result = TestResultParser.new.parse_result(test_results)
89
94
  SlackPoster.new.run(result)
@@ -1,5 +1,6 @@
1
1
  require 'fastlane/action'
2
2
  require 'fastlane/actions/slack'
3
+ require 'fastlane_core/configuration/configuration'
3
4
 
4
5
  require_relative 'module'
5
6
 
@@ -43,7 +44,7 @@ module Scan
43
44
  }
44
45
  end
45
46
 
46
- Fastlane::Actions::SlackAction.run({
47
+ options = FastlaneCore::Configuration.create(Fastlane::Actions::SlackAction.available_options, {
47
48
  message: "#{Scan.config[:app_name] || Scan.project.app_name} Tests:\n#{Scan.config[:slack_message]}",
48
49
  channel: channel,
49
50
  slack_url: Scan.config[:slack_url].to_s,
@@ -56,6 +57,7 @@ module Scan
56
57
  fields: fields
57
58
  }
58
59
  })
60
+ Fastlane::Actions::SlackAction.run(options)
59
61
  end
60
62
  end
61
63
  end
@@ -32,13 +32,15 @@ module Scan
32
32
 
33
33
  options = []
34
34
  options += project_path_array unless config[:xctestrun]
35
- options << "-scmProvider system" if config[:use_system_scm]
36
35
  options << "-sdk '#{config[:sdk]}'" if config[:sdk]
37
36
  options << destination # generated in `detect_values`
38
37
  options << "-toolchain '#{config[:toolchain]}'" if config[:toolchain]
39
38
  if config[:derived_data_path] && !options.include?("-derivedDataPath #{config[:derived_data_path].shellescape}")
40
39
  options << "-derivedDataPath #{config[:derived_data_path].shellescape}"
41
40
  end
41
+ if config[:use_system_scm] && !options.include?("-scmProvider system")
42
+ options << "-scmProvider system"
43
+ end
42
44
  options << "-resultBundlePath '#{result_bundle_path}'" if config[:result_bundle]
43
45
  if FastlaneCore::Helper.xcode_at_least?(10)
44
46
  options << "-parallel-testing-worker-count #{config[:concurrent_workers]}" if config[:concurrent_workers]
@@ -227,7 +227,7 @@ open class Snapshot: NSObject {
227
227
  #if os(OSX)
228
228
  let homeDir = URL(fileURLWithPath: NSHomeDirectory())
229
229
  return homeDir.appendingPathComponent(cachePath)
230
- #elseif arch(i386) || arch(x86_64)
230
+ #elseif arch(i386) || arch(x86_64) || arch(arm64)
231
231
  guard let simulatorHostHome = ProcessInfo().environment["SIMULATOR_HOST_HOME"] else {
232
232
  throw SnapshotError.cannotFindSimulatorHomeDirectory
233
233
  }
@@ -253,6 +253,16 @@ module Snapshot
253
253
  description: "Sets a custom path for Swift Package Manager dependencies",
254
254
  type: String,
255
255
  optional: true),
256
+ FastlaneCore::ConfigItem.new(key: :skip_package_dependencies_resolution,
257
+ env_name: "SNAPSHOT_SKIP_PACKAGE_DEPENDENCIES_RESOLUTION",
258
+ description: "Skips resolution of Swift Package Manager dependencies",
259
+ type: Boolean,
260
+ default_value: false),
261
+ FastlaneCore::ConfigItem.new(key: :disable_package_automatic_updates,
262
+ env_name: "SNAPSHOT_DISABLE_PACKAGE_AUTOMATIC_UPDATES",
263
+ description: "Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file",
264
+ type: Boolean,
265
+ default_value: false),
256
266
  FastlaneCore::ConfigItem.new(key: :testplan,
257
267
  env_name: "SNAPSHOT_TESTPLAN",
258
268
  description: "The testplan associated with the scheme that should be used for testing",
@@ -283,7 +293,12 @@ module Snapshot
283
293
  env_name: "SNAPSHOT_SUPPRESS_XCODE_OUTPUT",
284
294
  description: "Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path",
285
295
  type: Boolean,
286
- optional: true)
296
+ optional: true),
297
+ FastlaneCore::ConfigItem.new(key: :use_system_scm,
298
+ env_name: "SNAPSHOT_USE_SYSTEM_SCM",
299
+ description: "Lets xcodebuild use system's scm configuration",
300
+ type: Boolean,
301
+ default_value: false)
287
302
  ]
288
303
  end
289
304
  end
@@ -8,7 +8,7 @@ module Snapshot
8
8
  def self.find_helper
9
9
  paths = Dir["./**/SnapshotHelper.swift"] + Dir["./**/SnapshotHelperXcode8.swift"]
10
10
  # exclude assets in gym
11
- paths.reject { |p| p.include?("snapshot/lib/assets/") }
11
+ paths.reject { |p| p.include?("snapshot/lib/assets/") || p.include?("DerivedData") }
12
12
  end
13
13
 
14
14
  def update(force: false)
@@ -23,6 +23,7 @@ module Spaceship
23
23
  attr_accessor :app_store_version_submission
24
24
  attr_accessor :app_store_version_phased_release
25
25
  attr_accessor :app_store_review_detail
26
+ attr_accessor :app_store_version_localizations
26
27
 
27
28
  module AppStoreState
28
29
  READY_FOR_SALE = "READY_FOR_SALE"
@@ -62,7 +63,8 @@ module Spaceship
62
63
  "appStoreVersionSubmission" => "app_store_version_submission",
63
64
  "build" => "build",
64
65
  "appStoreVersionPhasedRelease" => "app_store_version_phased_release",
65
- "appStoreReviewDetail" => "app_store_review_detail"
66
+ "appStoreReviewDetail" => "app_store_review_detail",
67
+ "appStoreVersionLocalizations" => "app_store_version_localizations"
66
68
  })
67
69
 
68
70
  ESSENTIAL_INCLUDES = [
@@ -38,6 +38,15 @@ module Spaceship
38
38
  return client.post_bulk_beta_tester_assignments(beta_group_id: id, beta_testers: beta_testers)
39
39
  end
40
40
 
41
+ def update(client: nil, attributes: nil)
42
+ return if attributes.empty?
43
+
44
+ client ||= Spaceship::ConnectAPI
45
+
46
+ attributes = reverse_attr_mapping(attributes)
47
+ return client.patch_group(group_id: id, attributes: attributes).first
48
+ end
49
+
41
50
  def delete!
42
51
  return Spaceship::ConnectAPI.delete_beta_group(group_id: id)
43
52
  end
@@ -54,6 +54,32 @@ module Spaceship
54
54
  return resps.flat_map(&:to_models)
55
55
  end
56
56
 
57
+ # @param client [ConnectAPI] ConnectAPI client.
58
+ # @param platform [String] The platform of the device.
59
+ # @param include_disabled [Bool] Whether to include disable devices. false by default.
60
+ # @return (Device) Find a device based on the UDID of the device. nil if no device was found.
61
+ def self.find_by_udid(device_udid, client: nil, platform: nil, include_disabled: false)
62
+ self.all(client: client).find do |device|
63
+ device.udid.casecmp(device_udid) == 0 && (include_disabled ? true : device.enabled?)
64
+ end
65
+ end
66
+
67
+ # @param client [ConnectAPI] ConnectAPI client.
68
+ # @param name [String] The name to be assigned to the device, if it needs to be created.
69
+ # @param platform [String] The platform of the device.
70
+ # @param include_disabled [Bool] Whether to include disable devices. false by default.
71
+ # @return (Device) Find a device based on the UDID of the device. If no device was found, nil if no device was found.
72
+ def self.find_or_create(device_udid, client: nil, name: nil, platform: nil, include_disabled: false)
73
+ existing = self.find_by_udid(device_udid, client: client, platform: platform)
74
+ return existing if existing
75
+ return self.create(client: client, name: name, platform: platform, udid: device_udid)
76
+ end
77
+
78
+ # @param client [ConnectAPI] ConnectAPI client.
79
+ # @param name [String] The name to be assigned to the device.
80
+ # @param platform [String] The platform of the device.
81
+ # @param udid [String] The udid of the device being created.
82
+ # @return (Device) Find a device based on the UDID of the device. nil if no device was found.
57
83
  def self.create(client: nil, name: nil, platform: nil, udid: nil)
58
84
  client ||= Spaceship::ConnectAPI
59
85
  resp = client.post_device(name: name, platform: platform, udid: udid)
@@ -214,6 +214,18 @@ module Spaceship
214
214
  test_flight_request_client.post("betaGroups", body)
215
215
  end
216
216
 
217
+ def patch_group(group_id: nil, attributes: {})
218
+ body = {
219
+ data: {
220
+ attributes: attributes,
221
+ id: group_id,
222
+ type: "betaGroups"
223
+ }
224
+ }
225
+
226
+ test_flight_request_client.patch("betaGroups/#{group_id}", body)
227
+ end
228
+
217
229
  def delete_beta_group(group_id: nil)
218
230
  raise "group_id is nil" if group_id.nil?
219
231
 
@@ -4,6 +4,7 @@ require_relative 'tunes/tunes_client'
4
4
  module Spaceship
5
5
  class Client
6
6
  def handle_two_step_or_factor(response)
7
+ raise "2FA can only be performed in interactive mode" if ENV["FASTLANE_IS_INTERACTIVE"] == "false"
7
8
  # extract `x-apple-id-session-id` and `scnt` from response, to be used by `update_request_headers`
8
9
  @x_apple_id_session_id = response["x-apple-id-session-id"]
9
10
  @scnt = response["scnt"]
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.171.0
4
+ version: 2.172.0
5
5
  platform: ruby
6
6
  authors:
7
- - Maksym Grebenets
8
- - Kohki Miki
9
- - Jan Piotrowski
10
- - Helmut Januschka
11
- - Joshua Liebowitz
12
- - Aaron Brager
13
7
  - Andrew McBurney
8
+ - Olivier Halligon
9
+ - Felix Krause
10
+ - Daniel Jankowski
14
11
  - Danielle Tomlinson
12
+ - Jimmy Dee
13
+ - Max Ott
14
+ - Stefan Natchev
15
+ - Maksym Grebenets
16
+ - Jérôme Lacoste
17
+ - Jan Piotrowski
15
18
  - Jorge Revuelta H
16
- - Manu Wallner
19
+ - Kohki Miki
20
+ - Aaron Brager
21
+ - Luka Mirosevic
17
22
  - Josh Holtz
18
23
  - Iulian Onofrei
19
- - Stefan Natchev
20
- - Olivier Halligon
21
- - Max Ott
22
- - Daniel Jankowski
23
- - Luka Mirosevic
24
- - Jérôme Lacoste
24
+ - Helmut Januschka
25
+ - Joshua Liebowitz
25
26
  - Fumiya Nakamura
26
- - Felix Krause
27
- - Jimmy Dee
28
27
  - Matthew Ellis
28
+ - Manu Wallner
29
29
  autorequire:
30
30
  bindir: bin
31
31
  cert_chain: []
32
- date: 2020-12-31 00:00:00.000000000 Z
32
+ date: 2021-01-21 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: slack-notifier
@@ -253,6 +253,20 @@ dependencies:
253
253
  - - "<"
254
254
  - !ruby/object:Gem::Version
255
255
  version: 1.0.0
256
+ - !ruby/object:Gem::Dependency
257
+ name: artifactory
258
+ requirement: !ruby/object:Gem::Requirement
259
+ requirements:
260
+ - - "~>"
261
+ - !ruby/object:Gem::Version
262
+ version: '3.0'
263
+ type: :runtime
264
+ prerelease: false
265
+ version_requirements: !ruby/object:Gem::Requirement
266
+ requirements:
267
+ - - "~>"
268
+ - !ruby/object:Gem::Version
269
+ version: '3.0'
256
270
  - !ruby/object:Gem::Dependency
257
271
  name: babosa
258
272
  requirement: !ruby/object:Gem::Requirement
@@ -679,14 +693,14 @@ dependencies:
679
693
  requirements:
680
694
  - - "~>"
681
695
  - !ruby/object:Gem::Version
682
- version: 3.9.0
696
+ version: 3.10.0
683
697
  type: :development
684
698
  prerelease: false
685
699
  version_requirements: !ruby/object:Gem::Requirement
686
700
  requirements:
687
701
  - - "~>"
688
702
  - !ruby/object:Gem::Version
689
- version: 3.9.0
703
+ version: 3.10.0
690
704
  - !ruby/object:Gem::Dependency
691
705
  name: rspec_junit_formatter
692
706
  requirement: !ruby/object:Gem::Requirement
@@ -984,10 +998,8 @@ files:
984
998
  - fastlane/lib/fastlane/.erb_template_helper.rb.swp
985
999
  - fastlane/lib/fastlane/action.rb
986
1000
  - fastlane/lib/fastlane/action_collector.rb
987
- - fastlane/lib/fastlane/actions/.download_dsyms.rb.swp
988
1001
  - fastlane/lib/fastlane/actions/.git_commit.rb.swp
989
- - fastlane/lib/fastlane/actions/.github_api.rb.swp
990
- - fastlane/lib/fastlane/actions/.set_github_release.rb.swp
1002
+ - fastlane/lib/fastlane/actions/.update_fastlane.rb.swp
991
1003
  - fastlane/lib/fastlane/actions/README.md
992
1004
  - fastlane/lib/fastlane/actions/actions_helper.rb
993
1005
  - fastlane/lib/fastlane/actions/adb.rb
@@ -1036,6 +1048,7 @@ files:
1036
1048
  - fastlane/lib/fastlane/actions/create_app_online.rb
1037
1049
  - fastlane/lib/fastlane/actions/create_keychain.rb
1038
1050
  - fastlane/lib/fastlane/actions/create_pull_request.rb
1051
+ - fastlane/lib/fastlane/actions/create_xcframework.rb
1039
1052
  - fastlane/lib/fastlane/actions/danger.rb
1040
1053
  - fastlane/lib/fastlane/actions/debug.rb
1041
1054
  - fastlane/lib/fastlane/actions/default_platform.rb
@@ -1840,7 +1853,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1840
1853
  - !ruby/object:Gem::Version
1841
1854
  version: '0'
1842
1855
  requirements: []
1843
- rubygems_version: 3.1.4
1856
+ rubygems_version: 3.0.3
1844
1857
  signing_key:
1845
1858
  specification_version: 4
1846
1859
  summary: The easiest way to automate beta deployments and releases for your iOS and