fastlane 2.166.0 → 2.167.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +78 -78
  3. data/deliver/lib/deliver/app_screenshot.rb +6 -2
  4. data/fastlane/lib/fastlane/actions/add_git_tag.rb +9 -2
  5. data/fastlane/lib/fastlane/actions/spm.rb +6 -0
  6. data/fastlane/lib/fastlane/actions/update_fastlane.rb +5 -0
  7. data/fastlane/lib/fastlane/cli_tools_distributor.rb +1 -1
  8. data/fastlane/lib/fastlane/features.rb +1 -1
  9. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -0
  10. data/fastlane/lib/fastlane/version.rb +1 -1
  11. data/fastlane/swift/Deliverfile.swift +1 -1
  12. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  13. data/fastlane/swift/Fastfile.swift +1 -1
  14. data/fastlane/swift/Fastlane.swift +6 -3
  15. data/fastlane/swift/Gymfile.swift +1 -1
  16. data/fastlane/swift/GymfileProtocol.swift +1 -1
  17. data/fastlane/swift/LaneFileProtocol.swift +2 -2
  18. data/fastlane/swift/MainProcess.swift +2 -0
  19. data/fastlane/swift/Matchfile.swift +1 -1
  20. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  21. data/fastlane/swift/Precheckfile.swift +1 -1
  22. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  23. data/fastlane/swift/Runner.swift +1 -1
  24. data/fastlane/swift/Scanfile.swift +1 -1
  25. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  26. data/fastlane/swift/Screengrabfile.swift +1 -1
  27. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  28. data/fastlane/swift/Snapshotfile.swift +1 -1
  29. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  30. data/fastlane/swift/SocketClient.swift +1 -1
  31. data/fastlane_core/lib/fastlane_core/cert_checker.rb +12 -7
  32. data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +3 -1
  33. data/fastlane_core/lib/fastlane_core/ui/disable_colors.rb +8 -0
  34. data/gym/lib/gym/code_signing_mapping.rb +1 -1
  35. data/match/lib/match/nuke.rb +9 -5
  36. data/pilot/lib/pilot/build_manager.rb +9 -3
  37. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +9 -0
  38. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +12 -0
  39. metadata +18 -20
  40. data/deliver/lib/deliver/.upload_screenshots.rb.swp +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a087d077b77ba7df4a5d383d8d607aeda9f3b67e
4
- data.tar.gz: 31a97905c7bf5685558efd65933780580b69f470
2
+ SHA256:
3
+ metadata.gz: 12fc2f2fba2826c89ba9d96fb23aaf99ff241513f980e97cc6bd911683b563d1
4
+ data.tar.gz: 189a71d8c59ce592ec3ef3c94c6cd4605ae3e6e130fb8dfd57a286aeffbffad4
5
5
  SHA512:
6
- metadata.gz: 155ad8ce03e385a45ebcd3ad1757fa6cc25ae2fda564819f01f61af4a2a871b78ee5a1b5510571516dd8e059482a8a53361aedf1ede90619fe64ce42dcde4cca
7
- data.tar.gz: cc279dfeae02d6b401761bbdc08e0763a8f10fc7b36c9f1a6c5d369502432e87b4ff9bac93a30997dc5709f282e93962942622c65c05c644494f844f3c875b4f
6
+ metadata.gz: 2ce1affc526767654afe6c01483ae298d0a99b09f433fdae244956ff01d46947fb785e3d934bfa052c16c3b1064659ff368eda6746181162964ffd139a46ff61
7
+ data.tar.gz: 7b33693ca6d648c49065a72152357491945a43f2936b245dde1eda2d91855eb319d23a4080315f9eb1c70bf2f90d6e4df845611acfd8674b9853a83e0dcded15
data/README.md CHANGED
@@ -34,17 +34,11 @@ 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='max-ott'>
38
- <a href='https://github.com/max-ott'>
39
- <img src='https://github.com/max-ott.png?size=140'>
40
- </a>
41
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
42
- </td>
43
- <td id='danielle-tomlinson'>
44
- <a href='https://github.com/endocrimes'>
45
- <img src='https://github.com/endocrimes.png?size=140'>
37
+ <td id='aaron-brager'>
38
+ <a href='https://github.com/getaaron'>
39
+ <img src='https://github.com/getaaron.png?size=140'>
46
40
  </a>
47
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
41
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
48
42
  </td>
49
43
  <td id='jimmy-dee'>
50
44
  <a href='https://github.com/jdee'>
@@ -52,11 +46,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
52
46
  </a>
53
47
  <h4 align='center'>Jimmy Dee</h4>
54
48
  </td>
55
- <td id='daniel-jankowski'>
56
- <a href='https://github.com/mollyIV'>
57
- <img src='https://github.com/mollyIV.png?size=140'>
49
+ <td id='max-ott'>
50
+ <a href='https://github.com/max-ott'>
51
+ <img src='https://github.com/max-ott.png?size=140'>
58
52
  </a>
59
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
53
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
60
54
  </td>
61
55
  <td id='jorge-revuelta-h'>
62
56
  <a href='https://github.com/minuscorp'>
@@ -64,89 +58,89 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
64
58
  </a>
65
59
  <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
66
60
  </td>
67
- </tr>
68
- <tr>
69
- <td id='fumiya-nakamura'>
70
- <a href='https://github.com/nafu'>
71
- <img src='https://github.com/nafu.png?size=140'>
72
- </a>
73
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
74
- </td>
75
61
  <td id='manu-wallner'>
76
62
  <a href='https://github.com/milch'>
77
63
  <img src='https://github.com/milch.png?size=140'>
78
64
  </a>
79
65
  <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
80
66
  </td>
81
- <td id='aaron-brager'>
82
- <a href='https://github.com/getaaron'>
83
- <img src='https://github.com/getaaron.png?size=140'>
67
+ </tr>
68
+ <tr>
69
+ <td id='jan-piotrowski'>
70
+ <a href='https://github.com/janpio'>
71
+ <img src='https://github.com/janpio.png?size=140'>
84
72
  </a>
85
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
73
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
86
74
  </td>
87
- <td id='kohki-miki'>
88
- <a href='https://github.com/giginet'>
89
- <img src='https://github.com/giginet.png?size=140'>
75
+ <td id='olivier-halligon'>
76
+ <a href='https://github.com/AliSoftware'>
77
+ <img src='https://github.com/AliSoftware.png?size=140'>
90
78
  </a>
91
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
79
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
92
80
  </td>
93
- <td id='helmut-januschka'>
94
- <a href='https://github.com/hjanuschka'>
95
- <img src='https://github.com/hjanuschka.png?size=140'>
81
+ <td id='jérôme-lacoste'>
82
+ <a href='https://github.com/lacostej'>
83
+ <img src='https://github.com/lacostej.png?size=140'>
96
84
  </a>
97
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
85
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
98
86
  </td>
99
- </tr>
100
- <tr>
101
- <td id='matthew-ellis'>
102
- <a href='https://github.com/matthewellis'>
103
- <img src='https://github.com/matthewellis.png?size=140'>
87
+ <td id='luka-mirosevic'>
88
+ <a href='https://github.com/lmirosevic'>
89
+ <img src='https://github.com/lmirosevic.png?size=140'>
104
90
  </a>
105
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
91
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
106
92
  </td>
93
+ <td id='stefan-natchev'>
94
+ <a href='https://github.com/snatchev'>
95
+ <img src='https://github.com/snatchev.png?size=140'>
96
+ </a>
97
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
98
+ </td>
99
+ </tr>
100
+ <tr>
107
101
  <td id='joshua-liebowitz'>
108
102
  <a href='https://github.com/taquitos'>
109
103
  <img src='https://github.com/taquitos.png?size=140'>
110
104
  </a>
111
105
  <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
112
106
  </td>
113
- <td id='jan-piotrowski'>
114
- <a href='https://github.com/janpio'>
115
- <img src='https://github.com/janpio.png?size=140'>
107
+ <td id='andrew-mcburney'>
108
+ <a href='https://github.com/armcburney'>
109
+ <img src='https://github.com/armcburney.png?size=140'>
116
110
  </a>
117
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
111
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
118
112
  </td>
119
- <td id='iulian-onofrei'>
120
- <a href='https://github.com/revolter'>
121
- <img src='https://github.com/revolter.png?size=140'>
113
+ <td id='matthew-ellis'>
114
+ <a href='https://github.com/matthewellis'>
115
+ <img src='https://github.com/matthewellis.png?size=140'>
122
116
  </a>
123
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
117
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
124
118
  </td>
125
- <td id='maksym-grebenets'>
126
- <a href='https://github.com/mgrebenets'>
127
- <img src='https://github.com/mgrebenets.png?size=140'>
119
+ <td id='kohki-miki'>
120
+ <a href='https://github.com/giginet'>
121
+ <img src='https://github.com/giginet.png?size=140'>
128
122
  </a>
129
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
123
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
130
124
  </td>
131
- </tr>
132
- <tr>
133
- <td id='josh-holtz'>
134
- <a href='https://github.com/joshdholtz'>
135
- <img src='https://github.com/joshdholtz.png?size=140'>
125
+ <td id='daniel-jankowski'>
126
+ <a href='https://github.com/mollyIV'>
127
+ <img src='https://github.com/mollyIV.png?size=140'>
136
128
  </a>
137
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
129
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
138
130
  </td>
139
- <td id='jérôme-lacoste'>
140
- <a href='https://github.com/lacostej'>
141
- <img src='https://github.com/lacostej.png?size=140'>
131
+ </tr>
132
+ <tr>
133
+ <td id='helmut-januschka'>
134
+ <a href='https://github.com/hjanuschka'>
135
+ <img src='https://github.com/hjanuschka.png?size=140'>
142
136
  </a>
143
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
137
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
144
138
  </td>
145
- <td id='andrew-mcburney'>
146
- <a href='https://github.com/armcburney'>
147
- <img src='https://github.com/armcburney.png?size=140'>
139
+ <td id='maksym-grebenets'>
140
+ <a href='https://github.com/mgrebenets'>
141
+ <img src='https://github.com/mgrebenets.png?size=140'>
148
142
  </a>
149
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
143
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
150
144
  </td>
151
145
  <td id='felix-krause'>
152
146
  <a href='https://github.com/KrauseFx'>
@@ -154,25 +148,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
154
148
  </a>
155
149
  <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
156
150
  </td>
157
- <td id='olivier-halligon'>
158
- <a href='https://github.com/AliSoftware'>
159
- <img src='https://github.com/AliSoftware.png?size=140'>
151
+ <td id='iulian-onofrei'>
152
+ <a href='https://github.com/revolter'>
153
+ <img src='https://github.com/revolter.png?size=140'>
160
154
  </a>
161
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
155
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
156
+ </td>
157
+ <td id='josh-holtz'>
158
+ <a href='https://github.com/joshdholtz'>
159
+ <img src='https://github.com/joshdholtz.png?size=140'>
160
+ </a>
161
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
162
162
  </td>
163
163
  </tr>
164
164
  <tr>
165
- <td id='stefan-natchev'>
166
- <a href='https://github.com/snatchev'>
167
- <img src='https://github.com/snatchev.png?size=140'>
165
+ <td id='danielle-tomlinson'>
166
+ <a href='https://github.com/endocrimes'>
167
+ <img src='https://github.com/endocrimes.png?size=140'>
168
168
  </a>
169
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
169
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
170
170
  </td>
171
- <td id='luka-mirosevic'>
172
- <a href='https://github.com/lmirosevic'>
173
- <img src='https://github.com/lmirosevic.png?size=140'>
171
+ <td id='fumiya-nakamura'>
172
+ <a href='https://github.com/nafu'>
173
+ <img src='https://github.com/nafu.png?size=140'>
174
174
  </a>
175
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
175
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
176
176
  </td>
177
177
  </table>
178
178
 
@@ -187,7 +187,9 @@ module Deliver
187
187
  return {
188
188
  ScreenSize::IOS_65_MESSAGES => [
189
189
  [1242, 2688],
190
- [2688, 1242]
190
+ [2688, 1242],
191
+ [1284, 2778],
192
+ [2778, 1284]
191
193
  ],
192
194
  ScreenSize::IOS_61_MESSAGES => [
193
195
  [828, 1792],
@@ -243,7 +245,9 @@ module Deliver
243
245
  return {
244
246
  ScreenSize::IOS_65 => [
245
247
  [1242, 2688],
246
- [2688, 1242]
248
+ [2688, 1242],
249
+ [1284, 2778],
250
+ [2778, 1284]
247
251
  ],
248
252
  ScreenSize::IOS_61 => [
249
253
  [828, 1792],
@@ -6,7 +6,13 @@ module Fastlane
6
6
  # lane name in lane_context could be nil because you can just call $fastlane add_git_tag which has no context
7
7
  lane_name = Actions.lane_context[Actions::SharedValues::LANE_NAME].to_s.delete(' ') # no spaces allowed
8
8
 
9
- tag = options[:tag] || "#{options[:grouping]}/#{lane_name}/#{options[:prefix]}#{options[:build_number]}#{options[:postfix]}"
9
+ if options[:tag]
10
+ tag = options[:tag]
11
+ elsif options[:build_number]
12
+ tag = "#{options[:grouping]}/#{lane_name}/#{options[:prefix]}#{options[:build_number]}#{options[:postfix]}"
13
+ else
14
+ UI.user_error!("No value found for 'tag' or 'build_number'. At least one of them must be provided. Note that if you do specify a tag, all other arguments are ignored.")
15
+ end
10
16
  message = options[:message] || "#{tag} (fastlane)"
11
17
 
12
18
  cmd = ['git tag']
@@ -64,7 +70,8 @@ module Fastlane
64
70
  description: "The build number. Defaults to the result of increment_build_number if you\'re using it",
65
71
  default_value: Actions.lane_context[Actions::SharedValues::BUILD_NUMBER],
66
72
  default_value_dynamic: true,
67
- is_string: false),
73
+ is_string: false,
74
+ optional: true),
68
75
  FastlaneCore::ConfigItem.new(key: :message,
69
76
  env_name: "FL_GIT_TAG_MESSAGE",
70
77
  description: "The tag message. Defaults to the tag's name",
@@ -11,6 +11,7 @@ module Fastlane
11
11
  cmd << "--disable-sandbox" if params[:disable_sandbox]
12
12
  cmd << "--verbose" if params[:verbose]
13
13
  cmd << params[:command] if package_commands.include?(params[:command])
14
+ cmd << "--enable-code-coverage" if params[:enable_code_coverage] && params[:command] == 'generate-xcodeproj'
14
15
  if params[:xcconfig]
15
16
  cmd << "--xcconfig-overrides #{params[:xcconfig]}"
16
17
  end
@@ -44,6 +45,11 @@ module Fastlane
44
45
  verify_block: proc do |value|
45
46
  UI.user_error!("Please pass a valid command. Use one of the following: #{available_commands.join(', ')}") unless available_commands.include?(value)
46
47
  end),
48
+ FastlaneCore::ConfigItem.new(key: :enable_code_coverage,
49
+ env_name: "FL_SPM_ENABLE_CODE_COVERAGE",
50
+ description: "Enables code coverage for the generated Xcode project when using the generate-xcodeproj command",
51
+ is_string: false,
52
+ optional: true),
47
53
  FastlaneCore::ConfigItem.new(key: :build_path,
48
54
  env_name: "FL_SPM_BUILD_PATH",
49
55
  description: "Specify build/cache directory [default: ./.build]",
@@ -71,6 +71,11 @@ module Fastlane
71
71
  cleaner.execute
72
72
  end
73
73
 
74
+ if FastlaneCore::FastlaneFolder.swift?
75
+ upgrader = SwiftRunnerUpgrader.new
76
+ upgrader.upgrade_if_needed!
77
+ end
78
+
74
79
  UI.message("fastlane.tools successfully updated! I will now restart myself... 😴")
75
80
 
76
81
  # Set no_update to true so we don't try to update again
@@ -123,7 +123,7 @@ module Fastlane
123
123
  end
124
124
 
125
125
  # Since loading dotenv should respect additional environments passed using
126
- # --env, we must extrat the arguments out of ARGV and process them before
126
+ # --env, we must extract the arguments out of ARGV and process them before
127
127
  # calling into commander. This is required since the ENV must be configured
128
128
  # before running any other commands in order to correctly respect variables
129
129
  # like FASTLANE_HIDE_CHANGELOG and FASTLANE_DISABLE_COLORS
@@ -1,4 +1,4 @@
1
- # Use this file as the place to register Feature switches for the fastlan_core project
1
+ # Use this file as the place to register Feature switches for the fastlane_core project
2
2
 
3
3
  # FastlaneCore::Feature.register(env_var: 'YOUR_FEATURE_SWITCH_ENV_VAR',
4
4
  # description: 'Describe what this feature switch controls')
@@ -41,6 +41,7 @@ Require/MissingRequireStatement:
41
41
  - "**/spec/**/*.rb"
42
42
  - "**/spec_helper.rb"
43
43
  - spaceship/lib/spaceship/babosa_fix.rb
44
+ - fastlane_core/lib/fastlane_core/ui/disable_colors.rb
44
45
  - "**/Fastfile"
45
46
  - "**/*.gemspec"
46
47
  - rakelib/**/*
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.166.0'.freeze
2
+ VERSION = '2.167.0'.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
@@ -17,4 +17,4 @@ public class Deliverfile: DeliverfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.166.0
20
+ // Generated with fastlane 2.167.0
@@ -256,4 +256,4 @@ public extension DeliverfileProtocol {
256
256
 
257
257
  // Please don't remove the lines below
258
258
  // They are used to detect outdated files
259
- // FastlaneRunnerAPIVersion [0.9.49]
259
+ // FastlaneRunnerAPIVersion [0.9.50]
@@ -5,7 +5,7 @@
5
5
 
6
6
  import Foundation
7
7
 
8
- open class Fastfile: LaneFile {
8
+ open class Fastfile: LaneFile {
9
9
  override public init() {
10
10
  super.init()
11
11
  }
@@ -76,7 +76,7 @@ public func addGitTag(tag: String? = nil,
76
76
  grouping: String = "builds",
77
77
  prefix: String = "",
78
78
  postfix: String = "",
79
- buildNumber: Any,
79
+ buildNumber: Any? = nil,
80
80
  message: String? = nil,
81
81
  commit: String? = nil,
82
82
  force: Bool = false,
@@ -7445,6 +7445,7 @@ public func splunkmint(dsym: String? = nil,
7445
7445
 
7446
7446
  - parameters:
7447
7447
  - command: The swift command (one of: build, test, clean, reset, update, resolve, generate-xcodeproj, init)
7448
+ - enableCodeCoverage: Enables code coverage for the generated Xcode project when using the generate-xcodeproj command
7448
7449
  - buildPath: Specify build/cache directory [default: ./.build]
7449
7450
  - packagePath: Change working directory before any other operation
7450
7451
  - xcconfig: Use xcconfig file to override swift package generate-xcodeproj defaults
@@ -7455,6 +7456,7 @@ public func splunkmint(dsym: String? = nil,
7455
7456
  - verbose: Increase verbosity of informational output
7456
7457
  */
7457
7458
  public func spm(command: String = "build",
7459
+ enableCodeCoverage: Any? = nil,
7458
7460
  buildPath: String? = nil,
7459
7461
  packagePath: String? = nil,
7460
7462
  xcconfig: String? = nil,
@@ -7465,6 +7467,7 @@ public func spm(command: String = "build",
7465
7467
  verbose: Bool = false)
7466
7468
  {
7467
7469
  let command = RubyCommand(commandID: "", methodName: "spm", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
7470
+ RubyCommand.Argument(name: "enable_code_coverage", value: enableCodeCoverage),
7468
7471
  RubyCommand.Argument(name: "build_path", value: buildPath),
7469
7472
  RubyCommand.Argument(name: "package_path", value: packagePath),
7470
7473
  RubyCommand.Argument(name: "xcconfig", value: xcconfig),
@@ -9259,7 +9262,7 @@ public func xcov(workspace: String? = nil,
9259
9262
  coverallsServiceJobId: String? = nil,
9260
9263
  coverallsRepoToken: String? = nil,
9261
9264
  xcconfig: String? = nil,
9262
- ideFoundationPath: String = "/Applications/Xcode-12.0.1.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
9265
+ ideFoundationPath: String = "/Applications/Xcode-11.7.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
9263
9266
  legacySupport: Bool = false)
9264
9267
  {
9265
9268
  let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
@@ -9405,4 +9408,4 @@ public let snapshotfile = Snapshotfile()
9405
9408
 
9406
9409
  // Please don't remove the lines below
9407
9410
  // They are used to detect outdated files
9408
- // FastlaneRunnerAPIVersion [0.9.102]
9411
+ // FastlaneRunnerAPIVersion [0.9.103]
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.166.0
20
+ // Generated with fastlane 2.167.0
@@ -184,4 +184,4 @@ public extension GymfileProtocol {
184
184
 
185
185
  // Please don't remove the lines below
186
186
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.52]
187
+ // FastlaneRunnerAPIVersion [0.9.53]
@@ -22,8 +22,8 @@ public protocol LaneFileProtocol: class {
22
22
 
23
23
  public extension LaneFileProtocol {
24
24
  var fastlaneVersion: String { return "" } // Defaults to "" because that means any is fine
25
- func beforeAll(with lane: String) {} // No-op by default
26
- func afterAll(with lane: String) {} // No-op by default
25
+ func beforeAll(with _: String) {} // No-op by default
26
+ func afterAll(with _: String) {} // No-op by default
27
27
  func onError(currentLane _: String, errorInfo _: String) {} // No-op by default
28
28
  func recordLaneDescriptions() {} // No-op by default
29
29
  }
@@ -56,6 +56,8 @@ class MainProcess {
56
56
  print(stdout)
57
57
  self.timeBetweenPrints = Int(self.lastPrintDate.timeIntervalSinceNow)
58
58
  }
59
+
60
+ // swiftformat:disable:next redundantSelf
59
61
  _ = Runner.waitWithPolling(self.timeBetweenPrints, toEventually: { $0 > 5 }, timeout: 10)
60
62
  thread.start()
61
63
  #endif
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.166.0
20
+ // Generated with fastlane 2.167.0
@@ -184,4 +184,4 @@ public extension MatchfileProtocol {
184
184
 
185
185
  // Please don't remove the lines below
186
186
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.46]
187
+ // FastlaneRunnerAPIVersion [0.9.47]
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.166.0
20
+ // Generated with fastlane 2.167.0
@@ -48,4 +48,4 @@ public extension PrecheckfileProtocol {
48
48
 
49
49
  // Please don't remove the lines below
50
50
  // They are used to detect outdated files
51
- // FastlaneRunnerAPIVersion [0.9.45]
51
+ // FastlaneRunnerAPIVersion [0.9.46]
@@ -37,7 +37,7 @@ class Runner {
37
37
  socketClient.send(rubyCommand: command)
38
38
 
39
39
  let secondsToWait = DispatchTimeInterval.seconds(SocketClient.defaultCommandTimeoutSeconds)
40
- // swiftlint:disable next
40
+ // swiftformat:disable:next redundantSelf
41
41
  let timeoutResult = Self.waitWithPolling(self.executeNext[command.id], toEventually: { $0 == true }, timeout: SocketClient.defaultCommandTimeoutSeconds)
42
42
  executeNext.removeValue(forKey: command.id)
43
43
  let failureMessage = "command didn't execute in: \(SocketClient.defaultCommandTimeoutSeconds) seconds"
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.166.0
20
+ // Generated with fastlane 2.167.0
@@ -264,4 +264,4 @@ public extension ScanfileProtocol {
264
264
 
265
265
  // Please don't remove the lines below
266
266
  // They are used to detect outdated files
267
- // FastlaneRunnerAPIVersion [0.9.57]
267
+ // FastlaneRunnerAPIVersion [0.9.58]
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.166.0
20
+ // Generated with fastlane 2.167.0
@@ -96,4 +96,4 @@ public extension ScreengrabfileProtocol {
96
96
 
97
97
  // Please don't remove the lines below
98
98
  // They are used to detect outdated files
99
- // FastlaneRunnerAPIVersion [0.9.47]
99
+ // FastlaneRunnerAPIVersion [0.9.48]
@@ -17,4 +17,4 @@ public class Snapshotfile: SnapshotfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.166.0
20
+ // Generated with fastlane 2.167.0
@@ -184,4 +184,4 @@ public extension SnapshotfileProtocol {
184
184
 
185
185
  // Please don't remove the lines below
186
186
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.41]
187
+ // FastlaneRunnerAPIVersion [0.9.42]
@@ -29,7 +29,7 @@ class SocketClient: NSObject {
29
29
  }
30
30
 
31
31
  static let connectTimeoutSeconds = 2
32
- static let defaultCommandTimeoutSeconds = 10_800 // 3 hours
32
+ static let defaultCommandTimeoutSeconds = 10800 // 3 hours
33
33
  static let doneToken = "done" // TODO: remove these
34
34
  static let cancelToken = "cancelFastlaneRun"
35
35
 
@@ -22,7 +22,7 @@ module FastlaneCore
22
22
  end
23
23
 
24
24
  def self.installed_identies(in_keychain: nil)
25
- install_wwdr_certificate unless wwdr_certificate_installed?
25
+ install_wwdr_certificates unless wwdr_certificates_installed?
26
26
 
27
27
  available = list_available_identities(in_keychain: in_keychain)
28
28
  # Match for this text against word boundaries to avoid edge cases around multiples of 10 identities!
@@ -81,16 +81,21 @@ module FastlaneCore
81
81
  `#{commands.join(' ')}`
82
82
  end
83
83
 
84
- def self.wwdr_certificate_installed?
84
+ def self.wwdr_certificates_installed?
85
85
  certificate_name = "Apple Worldwide Developer Relations Certification Authority"
86
86
  keychain = wwdr_keychain
87
- response = Helper.backticks("security find-certificate -c '#{certificate_name}' #{keychain.shellescape}", print: FastlaneCore::Globals.verbose?)
88
- return response.include?("attributes:")
87
+ response = Helper.backticks("security find-certificate -a -c '#{certificate_name}' #{keychain.shellescape}", print: FastlaneCore::Globals.verbose?)
88
+ certs = response.split("keychain: \"#{keychain}\"").drop(1)
89
+ certs.count == 2
89
90
  end
90
91
 
91
- def self.install_wwdr_certificate
92
- url = 'https://developer.apple.com/certificationauthority/AppleWWDRCA.cer'
93
- file = Tempfile.new('AppleWWDRCA')
92
+ def self.install_wwdr_certificates
93
+ install_wwdr_certificate('https://developer.apple.com/certificationauthority/AppleWWDRCA.cer')
94
+ install_wwdr_certificate('https://www.apple.com/certificateauthority/AppleWWDRCAG3.cer')
95
+ end
96
+
97
+ def self.install_wwdr_certificate(url)
98
+ file = Tempfile.new(File.basename(url))
94
99
  filename = file.path
95
100
  keychain = wwdr_keychain
96
101
  keychain = "-k #{keychain.shellescape}" unless keychain.empty?
@@ -47,7 +47,9 @@ module FastlaneCore
47
47
  def bundle_id(path, keychain_path = nil)
48
48
  profile = parse(path, keychain_path)
49
49
  app_id_prefix = profile["ApplicationIdentifierPrefix"].first
50
- bundle_id = profile["Entitlements"]["application-identifier"].gsub("#{app_id_prefix}.", "")
50
+ entitlements = profile["Entitlements"]
51
+ app_identifier = entitlements["application-identifier"] || entitlements["com.apple.application-identifier"]
52
+ bundle_id = app_identifier.gsub("#{app_id_prefix}.", "")
51
53
  bundle_id
52
54
  rescue
53
55
  UI.error("Unable to extract the Bundle Id from the provided provisioning profile '#{path}'.")
@@ -15,3 +15,11 @@ class String
15
15
  end
16
16
  end
17
17
  end
18
+
19
+ # If a plugin uses the colorize gem, we also want to disable that
20
+ begin
21
+ require 'colorize'
22
+ String.disable_colorization = true
23
+ rescue LoadError
24
+ # Colorize gem is not used by any plugin
25
+ end
@@ -142,7 +142,7 @@ module Gym
142
142
  next unless specified_configuration == build_configuration.name
143
143
 
144
144
  # Catalyst apps will have some build settings that will have a configuration
145
- # that is specfic for macos so going to do our best to capture those
145
+ # that is specific for macos so going to do our best to capture those
146
146
  #
147
147
  # There are other platform filters besides "[sdk=macosx*]" that we could use but
148
148
  # this is the default that Xcode will use so this will also be our default
@@ -252,11 +252,15 @@ module Match
252
252
 
253
253
  self.encryption.encrypt_files if self.encryption
254
254
 
255
- # Now we need to commit and push all this too
256
- message = ["[fastlane]", "Nuked", "files", "for", type.to_s].join(" ")
257
- self.storage.save_changes!(files_to_commit: [],
258
- files_to_delete: files_to_delete,
259
- custom_message: message)
255
+ if files_to_delete.count > 0
256
+ # Now we need to save all this to the storage too, if needed
257
+ message = ["[fastlane]", "Nuked", "files", "for", type.to_s].join(" ")
258
+ self.storage.save_changes!(files_to_commit: [],
259
+ files_to_delete: files_to_delete,
260
+ custom_message: message)
261
+ else
262
+ UI.message("Your storage had no files to be deleted. This happens when you run `nuke` with an empty storage. Nothing to be worried about!")
263
+ end
260
264
  end
261
265
 
262
266
  private
@@ -192,7 +192,7 @@ module Pilot
192
192
  [
193
193
  build.app_version,
194
194
  build.version,
195
- (build.beta_build_metrics || []).map(&:install_count).reduce(:+)
195
+ (build.beta_build_metrics || []).map(&:install_count).compact.reduce(:+)
196
196
  ]
197
197
  end
198
198
 
@@ -273,9 +273,15 @@ module Pilot
273
273
  changelog
274
274
  end
275
275
 
276
+ def self.emoji_regex
277
+ # EmojiRegex::RGIEmoji is now preferred over EmojiRegex::Regex which is deprecated as of 3.2.0
278
+ # https://github.com/ticky/ruby-emoji-regex/releases/tag/v3.2.0
279
+ return defined?(EmojiRegex::RGIEmoji) ? EmojiRegex::RGIEmoji : EmojiRegex::Regex
280
+ end
281
+
276
282
  def self.strip_emoji(changelog)
277
- if changelog && changelog =~ EmojiRegex::Regex
278
- changelog.gsub!(EmojiRegex::Regex, "")
283
+ if changelog && changelog =~ emoji_regex
284
+ changelog.gsub!(emoji_regex, "")
279
285
  UI.important("Emoji symbols have been removed from the changelog, since they're not allowed by Apple.")
280
286
  end
281
287
  changelog
@@ -36,6 +36,15 @@ module Spaceship
36
36
  def post_bulk_beta_tester_assignments(beta_testers: nil)
37
37
  return Spaceship::ConnectAPI.post_bulk_beta_tester_assignments(beta_group_id: id, beta_testers: beta_testers)
38
38
  end
39
+
40
+ def delete!
41
+ return Spaceship::ConnectAPI.delete_beta_group(group_id: id)
42
+ end
43
+
44
+ def fetch_builds
45
+ resps = Spaceship::ConnectAPI.get_builds_for_beta_group(group_id: id).all_pages
46
+ return resps.flat_map(&:to_models)
47
+ end
39
48
  end
40
49
  end
41
50
  end
@@ -214,6 +214,18 @@ module Spaceship
214
214
  test_flight_request_client.post("betaGroups", body)
215
215
  end
216
216
 
217
+ def delete_beta_group(group_id: nil)
218
+ raise "group_id is nil" if group_id.nil?
219
+
220
+ test_flight_request_client.delete("betaGroups/#{group_id}")
221
+ end
222
+
223
+ def get_builds_for_beta_group(group_id: nil)
224
+ raise "group_id is nil" if group_id.nil?
225
+
226
+ test_flight_request_client.get("betaGroups/#{group_id}/builds")
227
+ end
228
+
217
229
  #
218
230
  # betaTesters
219
231
  #
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.166.0
4
+ version: 2.167.0
5
5
  platform: ruby
6
6
  authors:
7
- - Andrew McBurney
8
- - Joshua Liebowitz
7
+ - Matthew Ellis
8
+ - Jorge Revuelta H
9
+ - Jérôme Lacoste
9
10
  - Max Ott
10
11
  - Josh Holtz
11
- - Jérôme Lacoste
12
- - Stefan Natchev
13
- - Olivier Halligon
14
- - Jorge Revuelta H
15
- - Jan Piotrowski
16
- - Helmut Januschka
17
- - Matthew Ellis
18
- - Manu Wallner
19
12
  - Aaron Brager
20
- - Jimmy Dee
21
- - Maksym Grebenets
13
+ - Andrew McBurney
22
14
  - Daniel Jankowski
23
- - Luka Mirosevic
24
- - Danielle Tomlinson
25
15
  - Fumiya Nakamura
16
+ - Jimmy Dee
17
+ - Kohki Miki
26
18
  - Iulian Onofrei
19
+ - Manu Wallner
20
+ - Stefan Natchev
27
21
  - Felix Krause
28
- - Kohki Miki
22
+ - Joshua Liebowitz
23
+ - Jan Piotrowski
24
+ - Olivier Halligon
25
+ - Luka Mirosevic
26
+ - Danielle Tomlinson
27
+ - Helmut Januschka
28
+ - Maksym Grebenets
29
29
  autorequire:
30
30
  bindir: bin
31
31
  cert_chain: []
32
- date: 2020-11-02 00:00:00.000000000 Z
32
+ date: 2020-11-13 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: slack-notifier
@@ -943,7 +943,6 @@ files:
943
943
  - deliver/lib/assets/ScreenshotsHelp
944
944
  - deliver/lib/assets/summary.html.erb
945
945
  - deliver/lib/deliver.rb
946
- - deliver/lib/deliver/.upload_screenshots.rb.swp
947
946
  - deliver/lib/deliver/app_screenshot.rb
948
947
  - deliver/lib/deliver/app_screenshot_iterator.rb
949
948
  - deliver/lib/deliver/commands_generator.rb
@@ -1830,8 +1829,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1830
1829
  - !ruby/object:Gem::Version
1831
1830
  version: '0'
1832
1831
  requirements: []
1833
- rubyforge_project:
1834
- rubygems_version: 2.6.14.4
1832
+ rubygems_version: 3.1.4
1835
1833
  signing_key:
1836
1834
  specification_version: 4
1837
1835
  summary: The easiest way to automate beta deployments and releases for your iOS and