fastlane 2.141.0 → 2.142.0

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +84 -84
  4. data/fastlane/lib/fastlane/actions/README.md +2 -0
  5. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +13 -5
  6. data/fastlane/lib/fastlane/actions/cocoapods.rb +2 -2
  7. data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +35 -7
  9. data/fastlane/lib/fastlane/actions/get_github_release.rb +3 -0
  10. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +9 -3
  11. data/fastlane/lib/fastlane/actions/notarize.rb +183 -0
  12. data/fastlane/lib/fastlane/actions/s3.rb +2 -2
  13. data/fastlane/lib/fastlane/actions/spm.rb +8 -0
  14. data/fastlane/lib/fastlane/actions/swiftlint.rb +17 -2
  15. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +13 -3
  16. data/fastlane/lib/fastlane/helper/adb_helper.rb +1 -1
  17. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +1 -1
  18. data/fastlane/lib/fastlane/server/socket_server_action_command_executor.rb +1 -1
  19. data/fastlane/lib/fastlane/version.rb +1 -1
  20. data/fastlane/swift/Deliverfile.swift +1 -1
  21. data/fastlane/swift/Fastlane.swift +55 -6
  22. data/fastlane/swift/Gymfile.swift +1 -1
  23. data/fastlane/swift/Matchfile.swift +1 -1
  24. data/fastlane/swift/Precheckfile.swift +1 -1
  25. data/fastlane/swift/RubyCommand.swift +1 -1
  26. data/fastlane/swift/Scanfile.swift +1 -1
  27. data/fastlane/swift/ScanfileProtocol.swift +5 -1
  28. data/fastlane/swift/Screengrabfile.swift +1 -1
  29. data/fastlane/swift/Snapshotfile.swift +1 -1
  30. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +2 -0
  31. data/fastlane_core/lib/fastlane_core/project.rb +4 -0
  32. data/gym/lib/gym/.code_signing_mapping.rb.swp +0 -0
  33. data/gym/lib/gym/runner.rb +2 -2
  34. data/match/lib/match/storage/google_cloud_storage.rb +2 -2
  35. data/pilot/lib/pilot/build_manager.rb +9 -3
  36. data/scan/lib/scan/options.rb +5 -0
  37. data/scan/lib/scan/runner.rb +9 -7
  38. data/scan/lib/scan/test_command_generator.rb +6 -3
  39. data/screengrab/lib/screengrab/runner.rb +20 -15
  40. data/snapshot/lib/snapshot/fixes/simulator_shared_pasteboard.rb +16 -0
  41. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -0
  42. metadata +19 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d66ea0e82a638091cb2b4fba453027bd4deae45204e4b0060e371bcdfdd42377
4
- data.tar.gz: 579a0b416a314bfbac2b5bce550d2788f9dae40a7fc9686cf47d5b20b8be3dda
3
+ metadata.gz: 16f5d0c8e98d22db28cf818ffd26b3ecddf27f360bbe11174dd398d00f8d4a7c
4
+ data.tar.gz: 63fae2c4ff11cc689da7946ee00cfab6219da35aa70308e9b0d61ec09a91ce25
5
5
  SHA512:
6
- metadata.gz: e59b4a106d204a597833eb62f3cacddb865f8c55702ec510331415c0efcb5de5d7d5442ca2e55c731bdc3a57be57331113dd626864792ca2c7722ffcca6b5649
7
- data.tar.gz: 17f635afbd24dd656d231eb32f3fdd9240093715c0abdaaea3c39cbedec9475b6a8659baec933539b1a29585fccae9c4482f7e57af18bc648526728b3f61dcf5
6
+ metadata.gz: e87a15a427996b6169a72f2b8c62d02016cc7ec7d6278ae9a427f7f44800682487739a5efd21596c1ea098f76b11431365a986dc02451854f113e5fca2489627
7
+ data.tar.gz: 2e88f0b54168f8cf9b252296e41a35e0f7231a4383a8838bb44864235d3cc00aeca5bdb81fe56c95985ebde78c401530aec9048efd755963c01cd993eed395c8
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2019 The Fastlane Authors
3
+ Copyright (c) 2015-2020 The Fastlane Authors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -34,49 +34,49 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
34
34
  <!-- This table is regenerated and resorted on each release -->
35
35
  <table id='team'>
36
36
  <tr>
37
- <td id='jimmy-dee'>
38
- <a href='https://github.com/jdee'>
39
- <img src='https://github.com/jdee.png?size=140'>
37
+ <td id='luka-mirosevic'>
38
+ <a href='https://github.com/lmirosevic'>
39
+ <img src='https://github.com/lmirosevic.png?size=140'>
40
40
  </a>
41
- <h4 align='center'>Jimmy Dee</h4>
41
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
42
42
  </td>
43
- <td id='felix-krause'>
44
- <a href='https://github.com/KrauseFx'>
45
- <img src='https://github.com/KrauseFx.png?size=140'>
43
+ <td id='stefan-natchev'>
44
+ <a href='https://github.com/snatchev'>
45
+ <img src='https://github.com/snatchev.png?size=140'>
46
46
  </a>
47
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
47
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
48
48
  </td>
49
- <td id='andrew-mcburney'>
50
- <a href='https://github.com/armcburney'>
51
- <img src='https://github.com/armcburney.png?size=140'>
49
+ <td id='daniel-jankowski'>
50
+ <a href='https://github.com/mollyIV'>
51
+ <img src='https://github.com/mollyIV.png?size=140'>
52
52
  </a>
53
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
53
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
54
54
  </td>
55
- <td id='jan-piotrowski'>
56
- <a href='https://github.com/janpio'>
57
- <img src='https://github.com/janpio.png?size=140'>
55
+ <td id='jorge-revuelta-h'>
56
+ <a href='https://github.com/minuscorp'>
57
+ <img src='https://github.com/minuscorp.png?size=140'>
58
58
  </a>
59
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
59
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
60
60
  </td>
61
- <td id='olivier-halligon'>
62
- <a href='https://github.com/AliSoftware'>
63
- <img src='https://github.com/AliSoftware.png?size=140'>
61
+ <td id='joshua-liebowitz'>
62
+ <a href='https://github.com/taquitos'>
63
+ <img src='https://github.com/taquitos.png?size=140'>
64
64
  </a>
65
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
65
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
66
66
  </td>
67
67
  </tr>
68
68
  <tr>
69
- <td id='matthew-ellis'>
70
- <a href='https://github.com/matthewellis'>
71
- <img src='https://github.com/matthewellis.png?size=140'>
69
+ <td id='josh-holtz'>
70
+ <a href='https://github.com/joshdholtz'>
71
+ <img src='https://github.com/joshdholtz.png?size=140'>
72
72
  </a>
73
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
73
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
74
74
  </td>
75
- <td id='stefan-natchev'>
76
- <a href='https://github.com/snatchev'>
77
- <img src='https://github.com/snatchev.png?size=140'>
75
+ <td id='jimmy-dee'>
76
+ <a href='https://github.com/jdee'>
77
+ <img src='https://github.com/jdee.png?size=140'>
78
78
  </a>
79
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
79
+ <h4 align='center'>Jimmy Dee</h4>
80
80
  </td>
81
81
  <td id='helmut-januschka'>
82
82
  <a href='https://github.com/hjanuschka'>
@@ -84,95 +84,95 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
84
84
  </a>
85
85
  <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
86
86
  </td>
87
- <td id='josh-holtz'>
88
- <a href='https://github.com/joshdholtz'>
89
- <img src='https://github.com/joshdholtz.png?size=140'>
87
+ <td id='olivier-halligon'>
88
+ <a href='https://github.com/AliSoftware'>
89
+ <img src='https://github.com/AliSoftware.png?size=140'>
90
90
  </a>
91
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
91
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
92
92
  </td>
93
- <td id='jérôme-lacoste'>
94
- <a href='https://github.com/lacostej'>
95
- <img src='https://github.com/lacostej.png?size=140'>
93
+ <td id='maksym-grebenets'>
94
+ <a href='https://github.com/mgrebenets'>
95
+ <img src='https://github.com/mgrebenets.png?size=140'>
96
96
  </a>
97
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
97
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
98
98
  </td>
99
99
  </tr>
100
100
  <tr>
101
- <td id='kohki-miki'>
102
- <a href='https://github.com/giginet'>
103
- <img src='https://github.com/giginet.png?size=140'>
101
+ <td id='jérôme-lacoste'>
102
+ <a href='https://github.com/lacostej'>
103
+ <img src='https://github.com/lacostej.png?size=140'>
104
104
  </a>
105
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
105
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
106
106
  </td>
107
- <td id='aaron-brager'>
108
- <a href='https://github.com/getaaron'>
109
- <img src='https://github.com/getaaron.png?size=140'>
107
+ <td id='iulian-onofrei'>
108
+ <a href='https://github.com/revolter'>
109
+ <img src='https://github.com/revolter.png?size=140'>
110
110
  </a>
111
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
111
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
112
112
  </td>
113
- <td id='luka-mirosevic'>
114
- <a href='https://github.com/lmirosevic'>
115
- <img src='https://github.com/lmirosevic.png?size=140'>
113
+ <td id='danielle-tomlinson'>
114
+ <a href='https://github.com/endocrimes'>
115
+ <img src='https://github.com/endocrimes.png?size=140'>
116
116
  </a>
117
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
117
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
118
118
  </td>
119
- <td id='joshua-liebowitz'>
120
- <a href='https://github.com/taquitos'>
121
- <img src='https://github.com/taquitos.png?size=140'>
119
+ <td id='fumiya-nakamura'>
120
+ <a href='https://github.com/nafu'>
121
+ <img src='https://github.com/nafu.png?size=140'>
122
122
  </a>
123
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
123
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
124
124
  </td>
125
- <td id='manu-wallner'>
126
- <a href='https://github.com/milch'>
127
- <img src='https://github.com/milch.png?size=140'>
125
+ <td id='andrew-mcburney'>
126
+ <a href='https://github.com/armcburney'>
127
+ <img src='https://github.com/armcburney.png?size=140'>
128
128
  </a>
129
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
129
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
130
130
  </td>
131
131
  </tr>
132
132
  <tr>
133
- <td id='danielle-tomlinson'>
134
- <a href='https://github.com/endocrimes'>
135
- <img src='https://github.com/endocrimes.png?size=140'>
133
+ <td id='max-ott'>
134
+ <a href='https://github.com/max-ott'>
135
+ <img src='https://github.com/max-ott.png?size=140'>
136
136
  </a>
137
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
137
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
138
138
  </td>
139
- <td id='jorge-revuelta-h'>
140
- <a href='https://github.com/minuscorp'>
141
- <img src='https://github.com/minuscorp.png?size=140'>
139
+ <td id='felix-krause'>
140
+ <a href='https://github.com/KrauseFx'>
141
+ <img src='https://github.com/KrauseFx.png?size=140'>
142
142
  </a>
143
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
143
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
144
144
  </td>
145
- <td id='iulian-onofrei'>
146
- <a href='https://github.com/revolter'>
147
- <img src='https://github.com/revolter.png?size=140'>
145
+ <td id='aaron-brager'>
146
+ <a href='https://github.com/getaaron'>
147
+ <img src='https://github.com/getaaron.png?size=140'>
148
148
  </a>
149
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
149
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
150
150
  </td>
151
- <td id='daniel-jankowski'>
152
- <a href='https://github.com/mollyIV'>
153
- <img src='https://github.com/mollyIV.png?size=140'>
151
+ <td id='kohki-miki'>
152
+ <a href='https://github.com/giginet'>
153
+ <img src='https://github.com/giginet.png?size=140'>
154
154
  </a>
155
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
155
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
156
156
  </td>
157
- <td id='max-ott'>
158
- <a href='https://github.com/max-ott'>
159
- <img src='https://github.com/max-ott.png?size=140'>
157
+ <td id='manu-wallner'>
158
+ <a href='https://github.com/milch'>
159
+ <img src='https://github.com/milch.png?size=140'>
160
160
  </a>
161
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
161
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
162
162
  </td>
163
163
  </tr>
164
164
  <tr>
165
- <td id='maksym-grebenets'>
166
- <a href='https://github.com/mgrebenets'>
167
- <img src='https://github.com/mgrebenets.png?size=140'>
165
+ <td id='jan-piotrowski'>
166
+ <a href='https://github.com/janpio'>
167
+ <img src='https://github.com/janpio.png?size=140'>
168
168
  </a>
169
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
169
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
170
170
  </td>
171
- <td id='fumiya-nakamura'>
172
- <a href='https://github.com/nafu'>
173
- <img src='https://github.com/nafu.png?size=140'>
171
+ <td id='matthew-ellis'>
172
+ <a href='https://github.com/matthewellis'>
173
+ <img src='https://github.com/matthewellis.png?size=140'>
174
174
  </a>
175
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
175
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
176
176
  </td>
177
177
  </table>
178
178
 
@@ -1,3 +1,5 @@
1
1
  All built-in integrations are available in this directory. Use the `fastlane new_action` command to create a new action.
2
2
 
3
3
  _fastlane_ will automatically detect the files in this folder
4
+
5
+ All available actions are listed and documented on https://docs.fastlane.tools/actions/. Documentation for individual actions is available on https://docs.fastlane.tools/actions/%action_name%, e.g. https://docs.fastlane.tools/actions/copy_artifacts/.
@@ -1,14 +1,18 @@
1
+ require 'ostruct'
2
+
1
3
  module Fastlane
2
4
  module Actions
3
5
  module SharedValues
4
6
  LATEST_BUILD_NUMBER = :LATEST_BUILD_NUMBER
7
+ LATEST_VERSION = :LATEST_VERSION
5
8
  end
6
9
 
7
10
  class AppStoreBuildNumberAction < Action
8
11
  def self.run(params)
9
12
  require 'spaceship'
10
13
 
11
- build_nr = get_build_number(params)
14
+ result = get_build_number(params)
15
+ build_nr = result.build_nr
12
16
 
13
17
  # Convert build_nr to int (for legacy use) if no "." in string
14
18
  if build_nr.kind_of?(String) && !build_nr.include?(".")
@@ -16,6 +20,9 @@ module Fastlane
16
20
  end
17
21
 
18
22
  Actions.lane_context[SharedValues::LATEST_BUILD_NUMBER] = build_nr
23
+ Actions.lane_context[SharedValues::LATEST_VERSION] = result.build_v
24
+
25
+ return build_nr
19
26
  end
20
27
 
21
28
  def self.get_build_number(params)
@@ -33,7 +40,7 @@ module Fastlane
33
40
 
34
41
  UI.message("Latest upload for live-version #{app.live_version.version} is build: #{build_nr}")
35
42
 
36
- return build_nr
43
+ return OpenStruct.new({ build_nr: build_nr, build_v: app.live_version.version })
37
44
  else
38
45
  version_number = params[:version]
39
46
  platform = params[:platform]
@@ -61,7 +68,7 @@ module Fastlane
61
68
  if build
62
69
  build_nr = build.version
63
70
  UI.message("Latest upload for version #{build.app_version} on #{platform_message} is build: #{build_nr}")
64
- return build_nr
71
+ return OpenStruct.new({ build_nr: build_nr, build_v: build.app_version })
65
72
  end
66
73
 
67
74
  # Let user know that build couldn't be found
@@ -72,7 +79,7 @@ module Fastlane
72
79
  else
73
80
  build_nr = params[:initial_build_number]
74
81
  UI.message("Using initial build number of #{build_nr}")
75
- return build_nr
82
+ return OpenStruct.new({ build_nr: build_nr, build_v: version_number })
76
83
  end
77
84
  end
78
85
  end
@@ -159,7 +166,8 @@ module Fastlane
159
166
 
160
167
  def self.output
161
168
  [
162
- ['LATEST_BUILD_NUMBER', 'The latest build number of either live or testflight version']
169
+ ['LATEST_BUILD_NUMBER', 'The latest build number of either live or testflight version'],
170
+ ['LATEST_VERSION', 'The version of the latest build number']
163
171
  ]
164
172
  end
165
173
 
@@ -19,7 +19,7 @@ module Fastlane
19
19
 
20
20
  cmd << '--no-clean' unless params[:clean]
21
21
  cmd << '--no-integrate' unless params[:integrate]
22
- cmd << '--clean-install' if params[:clean_install] && pod_version.to_f >= 1.7
22
+ cmd << '--clean-install' if params[:clean_install] && pod_version(params).to_f >= 1.7
23
23
  cmd << '--repo-update' if params[:repo_update]
24
24
  cmd << '--silent' if params[:silent]
25
25
  cmd << '--verbose' if params[:verbose]
@@ -42,7 +42,7 @@ module Fastlane
42
42
  params[:use_bundle_exec] && shell_out_should_use_bundle_exec?
43
43
  end
44
44
 
45
- def self.pod_version
45
+ def self.pod_version(params)
46
46
  use_bundle_exec?(params) ? `bundle exec pod --version` : `pod --version`
47
47
  end
48
48
 
@@ -34,7 +34,7 @@ module Fastlane
34
34
  [
35
35
  FastlaneCore::ConfigItem.new(key: :branch,
36
36
  env_name: "FL_ENSURE_GIT_BRANCH_NAME",
37
- description: "The branch that should be checked for. String that can be either the full name of the branch or a regex to match",
37
+ description: "The branch that should be checked for. String that can be either the full name of the branch or a regex e.g. `^feature\/.*$` to match",
38
38
  is_string: true,
39
39
  default_value: 'master')
40
40
  ]
@@ -4,6 +4,7 @@ module Fastlane
4
4
  def self.run(params)
5
5
  Actions.verify_gem!('xcode-install')
6
6
  required_version = params[:version]
7
+ strict = params[:strict]
7
8
 
8
9
  if required_version.to_s.length == 0
9
10
  # The user didn't provide an Xcode version, let's see
@@ -30,16 +31,38 @@ module Fastlane
30
31
  UI.user_error!("Invalid version number provided, make sure it's valid: #{ex}")
31
32
  end
32
33
 
33
- if selected_version == required_version
34
- UI.success("Selected Xcode version is correct: #{selected_version}")
34
+ if strict == true
35
+ if selected_version == required_version
36
+ success(selected_version)
37
+ else
38
+ error(selected_version, required_version)
39
+ end
35
40
  else
36
- UI.message("Selected Xcode version is not correct: #{selected_version}. You expected #{required_version}.")
37
- UI.message("To correct this, use: `xcode_select(version: #{required_version})`.")
41
+ required_version_numbers = required_version.to_s.split(".")
42
+ selected_version_numbers = selected_version.to_s.split(".")
43
+
44
+ required_version_numbers.each_with_index do |required_version_number, index|
45
+ selected_version_number = selected_version_numbers[index]
46
+ next unless required_version_number != selected_version_number
47
+ error(selected_version, required_version)
48
+ break
49
+ end
38
50
 
39
- UI.user_error!("Selected Xcode version doesn't match your requirement.\nExpected: Xcode #{required_version}\nActual: Xcode #{selected_version}\n")
51
+ success(selected_version)
40
52
  end
41
53
  end
42
54
 
55
+ def self.success(selected_version)
56
+ UI.success("Selected Xcode version is correct: #{selected_version}")
57
+ end
58
+
59
+ def self.error(selected_version, required_version)
60
+ UI.message("Selected Xcode version is not correct: #{selected_version}. You expected #{required_version}.")
61
+ UI.message("To correct this, use: `xcode_select(version: #{required_version})`.")
62
+
63
+ UI.user_error!("Selected Xcode version doesn't match your requirement.\nExpected: Xcode #{required_version}\nActual: Xcode #{selected_version}\n")
64
+ end
65
+
43
66
  #####################################################
44
67
  # @!group Documentation
45
68
  #####################################################
@@ -52,7 +75,8 @@ module Fastlane
52
75
  [
53
76
  "If building your app requires a specific version of Xcode, you can invoke this command before using gym.",
54
77
  "For example, to ensure that a beta version of Xcode is not accidentally selected to build, which would make uploading to TestFlight fail.",
55
- "You can either manually provide a specific version using `version: ` or you make use of the `.xcode-version` file."
78
+ "You can either manually provide a specific version using `version: ` or you make use of the `.xcode-version` file.",
79
+ "Using the `strict` parameter, you can either verify the full set of version numbers strictly (i.e. `11.3.1`) or only a subset of them (i.e. `11.3` or `11`)."
56
80
  ].join("\n")
57
81
  end
58
82
 
@@ -62,7 +86,11 @@ module Fastlane
62
86
  env_name: "FL_ENSURE_XCODE_VERSION",
63
87
  description: "Xcode version to verify that is selected",
64
88
  is_string: true,
65
- optional: true)
89
+ optional: true),
90
+ FastlaneCore::ConfigItem.new(key: :strict,
91
+ description: "Should the version be verified strictly (all 3 version numbers), or matching only the given version numbers (i.e. `11.3` == `11.3.x`)",
92
+ type: Boolean,
93
+ default_value: true)
66
94
  ]
67
95
  end
68
96
 
@@ -129,6 +129,9 @@ module Fastlane
129
129
  FastlaneCore::ConfigItem.new(key: :api_token,
130
130
  env_name: "FL_GITHUB_RELEASE_API_TOKEN",
131
131
  sensitive: true,
132
+ code_gen_sensitive: true,
133
+ default_value: ENV["GITHUB_API_TOKEN"],
134
+ default_value_dynamic: true,
132
135
  description: "GitHub Personal Token (required for private repositories)",
133
136
  optional: true)
134
137
  ]
@@ -4,12 +4,17 @@ module Fastlane
4
4
  module Actions
5
5
  module SharedValues
6
6
  LATEST_TESTFLIGHT_BUILD_NUMBER = :LATEST_TESTFLIGHT_BUILD_NUMBER
7
+ LATEST_TESTFLIGHT_VERSION = :LATEST_TESTFLIGHT_VERSION
7
8
  end
8
9
 
9
10
  class LatestTestflightBuildNumberAction < Action
10
11
  def self.run(params)
11
- build_number = AppStoreBuildNumberAction.run(params)
12
- Actions.lane_context[SharedValues::LATEST_TESTFLIGHT_BUILD_NUMBER] = build_number
12
+ AppStoreBuildNumberAction.run(params)
13
+ build_nr = Actions.lane_context[SharedValues::LATEST_BUILD_NUMBER]
14
+ build_v = Actions.lane_context[SharedValues::LATEST_VERSION]
15
+ Actions.lane_context[SharedValues::LATEST_TESTFLIGHT_BUILD_NUMBER] = build_nr
16
+ Actions.lane_context[SharedValues::LATEST_TESTFLIGHT_VERSION] = build_v
17
+ return build_nr
13
18
  end
14
19
 
15
20
  #####################################################
@@ -93,7 +98,8 @@ module Fastlane
93
98
 
94
99
  def self.output
95
100
  [
96
- ['LATEST_TESTFLIGHT_BUILD_NUMBER', 'The latest build number of the latest version of the app uploaded to TestFlight']
101
+ ['LATEST_TESTFLIGHT_BUILD_NUMBER', 'The latest build number of the latest version of the app uploaded to TestFlight'],
102
+ ['LATEST_TESTFLIGHT_VERSION', 'The version of the latest build number']
97
103
  ]
98
104
  end
99
105