fastlane 2.141.0 → 2.142.0

Sign up to get free protection for your applications and to get access to all the features.
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