fastlane 2.173.0 → 2.174.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +84 -84
  3. data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +1 -0
  4. data/fastlane/lib/fastlane/actions/appetize.rb +13 -1
  5. data/fastlane/lib/fastlane/actions/build_and_upload_to_appetize.rb +10 -2
  6. data/fastlane/lib/fastlane/actions/carthage.rb +22 -0
  7. data/fastlane/lib/fastlane/actions/cocoapods.rb +15 -1
  8. data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +1 -1
  9. data/fastlane/lib/fastlane/version.rb +1 -1
  10. data/fastlane/swift/Actions.swift +1 -1
  11. data/fastlane/swift/Appfile.swift +1 -1
  12. data/fastlane/swift/ArgumentProcessor.swift +1 -1
  13. data/fastlane/swift/ControlCommand.swift +1 -1
  14. data/fastlane/swift/Deliverfile.swift +1 -1
  15. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  16. data/fastlane/swift/Fastlane.swift +21 -6
  17. data/fastlane/swift/Gymfile.swift +1 -1
  18. data/fastlane/swift/GymfileProtocol.swift +1 -1
  19. data/fastlane/swift/LaneFileProtocol.swift +1 -1
  20. data/fastlane/swift/MainProcess.swift +1 -1
  21. data/fastlane/swift/Matchfile.swift +1 -1
  22. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  23. data/fastlane/swift/Plugins.swift +1 -1
  24. data/fastlane/swift/Precheckfile.swift +1 -1
  25. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  26. data/fastlane/swift/RubyCommand.swift +1 -1
  27. data/fastlane/swift/RubyCommandable.swift +1 -1
  28. data/fastlane/swift/Runner.swift +2 -2
  29. data/fastlane/swift/RunnerArgument.swift +1 -1
  30. data/fastlane/swift/Scanfile.swift +1 -1
  31. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  32. data/fastlane/swift/Screengrabfile.swift +1 -1
  33. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  34. data/fastlane/swift/Snapshotfile.swift +1 -1
  35. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  36. data/fastlane/swift/SocketClient.swift +1 -1
  37. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  38. data/fastlane/swift/SocketResponse.swift +1 -1
  39. data/fastlane/swift/formatting/Brewfile.lock.json +18 -14
  40. data/fastlane/swift/main.swift +1 -1
  41. data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +7 -1
  42. data/fastlane_core/lib/fastlane_core/project.rb +22 -8
  43. data/spaceship/lib/spaceship/connect_api/api_client.rb +16 -1
  44. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +24 -0
  45. data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +26 -4
  46. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +53 -0
  47. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +1 -1
  48. metadata +18 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 84a3a2b2d4fc8ec05b2b67244f2a41b643b7a3596b42eafcd76e409681d419a8
4
- data.tar.gz: 4843a267b0adad749d4a5670decd3d875285b387bbbd0df01c286b8ee5d64f9a
3
+ metadata.gz: 4661f027a61fae05c35c80827aedd5435cbf631579a1232061edd76bb9c8df61
4
+ data.tar.gz: 88f4f9a19d0136ba3acb5cc2dffe65308bb6437eefc56ae39692b78590a385f1
5
5
  SHA512:
6
- metadata.gz: b11081f274dfda7fb57b9de1940b7aeef425938b2f9811063b49306e82ddd274ac1f2c12f12ddfc6a750216438387d383da4c8a2ca504d768e9dff80c2b52bf1
7
- data.tar.gz: 13c125644f4d2b7e2a8678c327b65aaeb9569b36acef098b6a229d79808ca472b1887ad30a917e40452725cc20386fb073417d8201d43c674420562bad7818dd
6
+ metadata.gz: 84f565e3caea07cb1dbad2c4dbe47dec93414cc5fb104b989087ad79744fb3c41b8d31e369b39698dc89aa2688b74fc1ddf6617a115de6e4f5381b11ac7d410b
7
+ data.tar.gz: 693492a716a243e76e4a4a02452a4cfc83b0ee9d09092d7b8442151ab2b2370eabddbadddcd92d7e6b11a733f0bd7fe92f2bbfd7077c109abb1ff42602fe661d
data/README.md CHANGED
@@ -34,55 +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='daniel-jankowski'>
38
- <a href='https://github.com/mollyIV'>
39
- <img src='https://github.com/mollyIV.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'>
40
40
  </a>
41
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
41
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
42
42
  </td>
43
- <td id='helmut-januschka'>
44
- <a href='https://github.com/hjanuschka'>
45
- <img src='https://github.com/hjanuschka.png?size=140'>
43
+ <td id='jérôme-lacoste'>
44
+ <a href='https://github.com/lacostej'>
45
+ <img src='https://github.com/lacostej.png?size=140'>
46
46
  </a>
47
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
47
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
48
48
  </td>
49
- <td id='jan-piotrowski'>
50
- <a href='https://github.com/janpio'>
51
- <img src='https://github.com/janpio.png?size=140'>
49
+ <td id='danielle-tomlinson'>
50
+ <a href='https://github.com/endocrimes'>
51
+ <img src='https://github.com/endocrimes.png?size=140'>
52
52
  </a>
53
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
53
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
54
54
  </td>
55
- <td id='luka-mirosevic'>
56
- <a href='https://github.com/lmirosevic'>
57
- <img src='https://github.com/lmirosevic.png?size=140'>
55
+ <td id='iulian-onofrei'>
56
+ <a href='https://github.com/revolter'>
57
+ <img src='https://github.com/revolter.png?size=140'>
58
58
  </a>
59
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
59
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
60
60
  </td>
61
- <td id='felix-krause'>
62
- <a href='https://github.com/KrauseFx'>
63
- <img src='https://github.com/KrauseFx.png?size=140'>
61
+ <td id='olivier-halligon'>
62
+ <a href='https://github.com/AliSoftware'>
63
+ <img src='https://github.com/AliSoftware.png?size=140'>
64
64
  </a>
65
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
65
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
66
66
  </td>
67
67
  </tr>
68
68
  <tr>
69
- <td id='jimmy-dee'>
70
- <a href='https://github.com/jdee'>
71
- <img src='https://github.com/jdee.png?size=140'>
72
- </a>
73
- <h4 align='center'>Jimmy Dee</h4>
74
- </td>
75
- <td id='kohki-miki'>
76
- <a href='https://github.com/giginet'>
77
- <img src='https://github.com/giginet.png?size=140'>
69
+ <td id='luka-mirosevic'>
70
+ <a href='https://github.com/lmirosevic'>
71
+ <img src='https://github.com/lmirosevic.png?size=140'>
78
72
  </a>
79
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
73
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
80
74
  </td>
81
- <td id='joshua-liebowitz'>
82
- <a href='https://github.com/taquitos'>
83
- <img src='https://github.com/taquitos.png?size=140'>
75
+ <td id='max-ott'>
76
+ <a href='https://github.com/max-ott'>
77
+ <img src='https://github.com/max-ott.png?size=140'>
84
78
  </a>
85
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
79
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
86
80
  </td>
87
81
  <td id='fumiya-nakamura'>
88
82
  <a href='https://github.com/nafu'>
@@ -90,51 +84,63 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
90
84
  </a>
91
85
  <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
92
86
  </td>
93
- <td id='matthew-ellis'>
94
- <a href='https://github.com/matthewellis'>
95
- <img src='https://github.com/matthewellis.png?size=140'>
96
- </a>
97
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
98
- </td>
99
- </tr>
100
- <tr>
101
87
  <td id='maksym-grebenets'>
102
88
  <a href='https://github.com/mgrebenets'>
103
89
  <img src='https://github.com/mgrebenets.png?size=140'>
104
90
  </a>
105
91
  <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
106
92
  </td>
107
- <td id='andrew-mcburney'>
108
- <a href='https://github.com/armcburney'>
109
- <img src='https://github.com/armcburney.png?size=140'>
93
+ <td id='stefan-natchev'>
94
+ <a href='https://github.com/snatchev'>
95
+ <img src='https://github.com/snatchev.png?size=140'>
110
96
  </a>
111
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
97
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
112
98
  </td>
113
- <td id='max-ott'>
114
- <a href='https://github.com/max-ott'>
115
- <img src='https://github.com/max-ott.png?size=140'>
99
+ </tr>
100
+ <tr>
101
+ <td id='felix-krause'>
102
+ <a href='https://github.com/KrauseFx'>
103
+ <img src='https://github.com/KrauseFx.png?size=140'>
116
104
  </a>
117
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
105
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
118
106
  </td>
119
- <td id='olivier-halligon'>
120
- <a href='https://github.com/AliSoftware'>
121
- <img src='https://github.com/AliSoftware.png?size=140'>
107
+ <td id='jimmy-dee'>
108
+ <a href='https://github.com/jdee'>
109
+ <img src='https://github.com/jdee.png?size=140'>
122
110
  </a>
123
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
111
+ <h4 align='center'>Jimmy Dee</h4>
124
112
  </td>
125
- <td id='iulian-onofrei'>
126
- <a href='https://github.com/revolter'>
127
- <img src='https://github.com/revolter.png?size=140'>
113
+ <td id='daniel-jankowski'>
114
+ <a href='https://github.com/mollyIV'>
115
+ <img src='https://github.com/mollyIV.png?size=140'>
128
116
  </a>
129
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
117
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
118
+ </td>
119
+ <td id='josh-holtz'>
120
+ <a href='https://github.com/joshdholtz'>
121
+ <img src='https://github.com/joshdholtz.png?size=140'>
122
+ </a>
123
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
124
+ </td>
125
+ <td id='jan-piotrowski'>
126
+ <a href='https://github.com/janpio'>
127
+ <img src='https://github.com/janpio.png?size=140'>
128
+ </a>
129
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
130
130
  </td>
131
131
  </tr>
132
132
  <tr>
133
- <td id='aaron-brager'>
134
- <a href='https://github.com/getaaron'>
135
- <img src='https://github.com/getaaron.png?size=140'>
133
+ <td id='jorge-revuelta-h'>
134
+ <a href='https://github.com/minuscorp'>
135
+ <img src='https://github.com/minuscorp.png?size=140'>
136
136
  </a>
137
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
137
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
138
+ </td>
139
+ <td id='andrew-mcburney'>
140
+ <a href='https://github.com/armcburney'>
141
+ <img src='https://github.com/armcburney.png?size=140'>
142
+ </a>
143
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
138
144
  </td>
139
145
  <td id='manu-wallner'>
140
146
  <a href='https://github.com/milch'>
@@ -142,37 +148,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
142
148
  </a>
143
149
  <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
144
150
  </td>
145
- <td id='josh-holtz'>
146
- <a href='https://github.com/joshdholtz'>
147
- <img src='https://github.com/joshdholtz.png?size=140'>
148
- </a>
149
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
150
- </td>
151
- <td id='danielle-tomlinson'>
152
- <a href='https://github.com/endocrimes'>
153
- <img src='https://github.com/endocrimes.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/endocrimes'>Danielle Tomlinson</a></h4>
155
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
156
156
  </td>
157
- <td id='jérôme-lacoste'>
158
- <a href='https://github.com/lacostej'>
159
- <img src='https://github.com/lacostej.png?size=140'>
157
+ <td id='helmut-januschka'>
158
+ <a href='https://github.com/hjanuschka'>
159
+ <img src='https://github.com/hjanuschka.png?size=140'>
160
160
  </a>
161
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
161
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</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='matthew-ellis'>
166
+ <a href='https://github.com/matthewellis'>
167
+ <img src='https://github.com/matthewellis.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/mellis1995'>Matthew Ellis</a></h4>
170
170
  </td>
171
- <td id='jorge-revuelta-h'>
172
- <a href='https://github.com/minuscorp'>
173
- <img src='https://github.com/minuscorp.png?size=140'>
171
+ <td id='joshua-liebowitz'>
172
+ <a href='https://github.com/taquitos'>
173
+ <img src='https://github.com/taquitos.png?size=140'>
174
174
  </a>
175
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
175
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
176
176
  </td>
177
177
  </table>
178
178
 
@@ -75,6 +75,7 @@ module Fastlane
75
75
  env_name: "APP_STORE_CONNECT_API_KEY_DURATION",
76
76
  description: "The token session duration",
77
77
  optional: true,
78
+ default_value: Spaceship::ConnectAPI::Token::MAX_TOKEN_DURATION,
78
79
  type: Integer),
79
80
  FastlaneCore::ConfigItem.new(key: :in_house,
80
81
  env_name: "APP_STORE_CONNECT_API_KEY_IN_HOUSE",
@@ -31,6 +31,10 @@ module Fastlane
31
31
 
32
32
  params[:note] = options[:note] if options[:note].to_s.length > 0
33
33
 
34
+ if options[:timeout]
35
+ params[:timeout] = options[:timeout]
36
+ end
37
+
34
38
  uri = URI.parse(appetize_url(options))
35
39
  req = create_request(uri, params)
36
40
  req.basic_auth(options[:api_token], nil)
@@ -147,7 +151,15 @@ module Fastlane
147
151
  env_name: "APPETIZE_NOTE",
148
152
  description: "Notes you wish to add to the uploaded app",
149
153
  is_string: true,
150
- optional: true)
154
+ optional: true),
155
+ FastlaneCore::ConfigItem.new(key: :timeout,
156
+ env_name: "APPETIZE_TIMEOUT",
157
+ description: "The number of seconds to wait until automatically ending the session due to user inactivity. Must be 30, 60, 90, 120, 180, 300, 600, 1800, 3600 or 7200. Default is 120",
158
+ type: Integer,
159
+ optional: true,
160
+ verify_block: proc do |value|
161
+ UI.user_error!("The value provided doesn't match any of the supported options.") unless [30, 60, 90, 120, 180, 300, 600, 1800, 3600, 7200].include?(value)
162
+ end)
151
163
  ]
152
164
  end
153
165
 
@@ -21,7 +21,8 @@ module Fastlane
21
21
  other_action.appetize(path: zipped_bundle,
22
22
  api_token: params[:api_token],
23
23
  public_key: params[:public_key],
24
- note: params[:note])
24
+ note: params[:note],
25
+ timeout: params[:timeout])
25
26
 
26
27
  public_key = Actions.lane_context[SharedValues::APPETIZE_PUBLIC_KEY]
27
28
  UI.success("Generated Public Key: #{Actions.lane_context[SharedValues::APPETIZE_PUBLIC_KEY]}")
@@ -76,7 +77,14 @@ module Fastlane
76
77
  FastlaneCore::ConfigItem.new(key: :note,
77
78
  description: "Notes you wish to add to the uploaded app",
78
79
  is_string: true,
79
- optional: true)
80
+ optional: true),
81
+ FastlaneCore::ConfigItem.new(key: :timeout,
82
+ description: "The number of seconds to wait until automatically ending the session due to user inactivity. Must be 30, 60, 90, 120, 180, 300, 600, 1800, 3600 or 7200. Default is 120",
83
+ type: Integer,
84
+ optional: true,
85
+ verify_block: proc do |value|
86
+ UI.user_error!("The value provided doesn't match any of the supported options.") unless [30, 60, 90, 120, 180, 300, 600, 1800, 3600, 7200].include?(value)
87
+ end)
80
88
  ]
81
89
  end
82
90
 
@@ -33,6 +33,8 @@ module Fastlane
33
33
  cmd << "--cache-builds" if params[:cache_builds]
34
34
  cmd << "--new-resolver" if params[:new_resolver]
35
35
  cmd << "--log-path #{params[:log_path]}" if params[:log_path]
36
+ cmd << "--use-xcframeworks" if params[:use_xcframeworks]
37
+ cmd << "--archive" if params[:archive]
36
38
 
37
39
  Actions.sh(cmd.join(' '))
38
40
  end
@@ -50,6 +52,14 @@ module Fastlane
50
52
  if params[:log_path] && !%w(build bootstrap update).include?(command_name)
51
53
  UI.user_error!("Log path option is available only for 'build', 'bootstrap', and 'update' command.")
52
54
  end
55
+
56
+ if params[:use_xcframeworks] && !%w(build bootstrap update).include?(command_name)
57
+ UI.user_error!("Use XCFrameworks option is available only for 'build', 'bootstrap', and 'update' command.")
58
+ end
59
+
60
+ if command_name != "build" && params[:archive]
61
+ UI.user_error!("Archive option is available only for 'build' command.")
62
+ end
53
63
  end
54
64
 
55
65
  def self.description
@@ -183,6 +193,18 @@ module Fastlane
183
193
  env_name: "FL_CARTHAGE_LOG_PATH",
184
194
  description: "Path to the xcode build output",
185
195
  optional: true),
196
+ FastlaneCore::ConfigItem.new(key: :use_xcframeworks,
197
+ env_name: "FL_CARTHAGE_USE_XCFRAMEWORKS",
198
+ description: "Create xcframework bundles instead of one framework per platform (requires Xcode 12+)",
199
+ type: Boolean,
200
+ is_string: false,
201
+ default_value: false),
202
+ FastlaneCore::ConfigItem.new(key: :archive,
203
+ env_name: "FL_CARTHAGE_ARCHIVE",
204
+ description: "Archive built frameworks from the current project",
205
+ is_string: false,
206
+ type: Boolean,
207
+ default_value: false),
186
208
  FastlaneCore::ConfigItem.new(key: :executable,
187
209
  env_name: "FL_CARTHAGE_EXECUTABLE",
188
210
  description: "Path to the `carthage` executable on your machine",
@@ -1,6 +1,7 @@
1
1
  module Fastlane
2
2
  module Actions
3
3
  class CocoapodsAction < Action
4
+ # rubocop:disable Metrics/PerceivedComplexity
4
5
  def self.run(params)
5
6
  Actions.verify_gem!('cocoapods')
6
7
  cmd = []
@@ -19,7 +20,8 @@ module Fastlane
19
20
 
20
21
  cmd << '--no-clean' unless params[:clean]
21
22
  cmd << '--no-integrate' unless params[:integrate]
22
- cmd << '--clean-install' if params[:clean_install] && pod_version(params).to_f >= 1.7
23
+ cmd << '--clean-install' if params[:clean_install] && pod_version_at_least("1.7", params)
24
+ cmd << '--allow-root' if params[:allow_root] && pod_version_at_least("1.10", params)
23
25
  cmd << '--repo-update' if params[:repo_update]
24
26
  cmd << '--silent' if params[:silent]
25
27
  cmd << '--verbose' if params[:verbose]
@@ -46,6 +48,11 @@ module Fastlane
46
48
  use_bundle_exec?(params) ? `bundle exec pod --version` : `pod --version`
47
49
  end
48
50
 
51
+ def self.pod_version_at_least(at_least_version, params)
52
+ version = pod_version(params)
53
+ return Gem::Version.new(version) >= Gem::Version.new(at_least_version)
54
+ end
55
+
49
56
  def self.call_error_callback(params, result)
50
57
  if params[:error_callback]
51
58
  Dir.chdir(FastlaneCore::FastlaneFolder.path) do
@@ -120,6 +127,13 @@ module Fastlane
120
127
  is_string: false,
121
128
  default_value: false,
122
129
  type: Boolean),
130
+ FastlaneCore::ConfigItem.new(key: :allow_root,
131
+ env_name: "FL_COCOAPODS_ALLOW_ROOT",
132
+ description: 'Allows CocoaPods to run as root',
133
+ optional: true,
134
+ is_string: false,
135
+ default_value: false,
136
+ type: Boolean),
123
137
 
124
138
  # Deprecated
125
139
  FastlaneCore::ConfigItem.new(key: :clean,
@@ -33,7 +33,7 @@ module Fastlane
33
33
  command << '--set-upstream' if params[:set_upstream]
34
34
 
35
35
  # optionally add the --push_options components
36
- params[:push_options].each { |push_option| command << "--push-option=#{push_option}" }
36
+ params[:push_options].each { |push_option| command << "--push-option=#{push_option}" } if params[:push_options]
37
37
 
38
38
  # execute our command
39
39
  Actions.sh('pwd')
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.173.0'.freeze
2
+ VERSION = '2.174.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
@@ -1,5 +1,5 @@
1
1
  // Actions.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  // This autogenerated file will be overwritten or replaced when running "fastlane generate_swift"
5
5
  //
@@ -1,5 +1,5 @@
1
1
  // Appfile.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  var appIdentifier: String { return "" } // The bundle identifier of your app
5
5
  var appleID: String { return "" } // Your Apple email address
@@ -1,5 +1,5 @@
1
1
  // ArgumentProcessor.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // ControlCommand.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -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.173.0
20
+ // Generated with fastlane 2.174.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.56]
259
+ // FastlaneRunnerAPIVersion [0.9.57]
@@ -158,7 +158,7 @@ public func appStoreConnectApiKey(keyId: String,
158
158
  keyFilepath: String? = nil,
159
159
  keyContent: String? = nil,
160
160
  isKeyContentBase64: Bool = false,
161
- duration: Int? = nil,
161
+ duration: Int = 1200,
162
162
  inHouse: Bool? = nil)
163
163
  {
164
164
  let command = RubyCommand(commandID: "", methodName: "app_store_connect_api_key", className: nil, args: [RubyCommand.Argument(name: "key_id", value: keyId),
@@ -219,6 +219,7 @@ public func appaloosa(binary: String,
219
219
  - path: Path to zipped build on the local filesystem. Either this or `url` must be specified
220
220
  - publicKey: If not provided, a new app will be created. If provided, the existing build will be overwritten
221
221
  - note: Notes you wish to add to the uploaded app
222
+ - timeout: The number of seconds to wait until automatically ending the session due to user inactivity. Must be 30, 60, 90, 120, 180, 300, 600, 1800, 3600 or 7200. Default is 120
222
223
 
223
224
  If you provide a `public_key`, this will overwrite an existing application. If you want to have this build as a new app version, you shouldn't provide this value.
224
225
 
@@ -230,7 +231,8 @@ public func appetize(apiHost: String = "api.appetize.io",
230
231
  platform: String = "ios",
231
232
  path: String? = nil,
232
233
  publicKey: String? = nil,
233
- note: String? = nil)
234
+ note: String? = nil,
235
+ timeout: Int? = nil)
234
236
  {
235
237
  let command = RubyCommand(commandID: "", methodName: "appetize", className: nil, args: [RubyCommand.Argument(name: "api_host", value: apiHost),
236
238
  RubyCommand.Argument(name: "api_token", value: apiToken),
@@ -238,7 +240,8 @@ public func appetize(apiHost: String = "api.appetize.io",
238
240
  RubyCommand.Argument(name: "platform", value: platform),
239
241
  RubyCommand.Argument(name: "path", value: path),
240
242
  RubyCommand.Argument(name: "public_key", value: publicKey),
241
- RubyCommand.Argument(name: "note", value: note)])
243
+ RubyCommand.Argument(name: "note", value: note),
244
+ RubyCommand.Argument(name: "timeout", value: timeout)])
242
245
  _ = runner.executeCommand(command)
243
246
  }
244
247
 
@@ -874,6 +877,7 @@ public func badge(dark: Any? = nil,
874
877
  - apiToken: Appetize.io API Token
875
878
  - publicKey: If not provided, a new app will be created. If provided, the existing build will be overwritten
876
879
  - note: Notes you wish to add to the uploaded app
880
+ - timeout: The number of seconds to wait until automatically ending the session due to user inactivity. Must be 30, 60, 90, 120, 180, 300, 600, 1800, 3600 or 7200. Default is 120
877
881
 
878
882
  This should be called from danger.
879
883
  More information in the [device_grid guide](https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/device_grid/README.md).
@@ -882,13 +886,15 @@ public func buildAndUploadToAppetize(xcodebuild: [String: Any] = [:],
882
886
  scheme: String? = nil,
883
887
  apiToken: String,
884
888
  publicKey: String? = nil,
885
- note: String? = nil)
889
+ note: String? = nil,
890
+ timeout: Int? = nil)
886
891
  {
887
892
  let command = RubyCommand(commandID: "", methodName: "build_and_upload_to_appetize", className: nil, args: [RubyCommand.Argument(name: "xcodebuild", value: xcodebuild),
888
893
  RubyCommand.Argument(name: "scheme", value: scheme),
889
894
  RubyCommand.Argument(name: "api_token", value: apiToken),
890
895
  RubyCommand.Argument(name: "public_key", value: publicKey),
891
- RubyCommand.Argument(name: "note", value: note)])
896
+ RubyCommand.Argument(name: "note", value: note),
897
+ RubyCommand.Argument(name: "timeout", value: timeout)])
892
898
  _ = runner.executeCommand(command)
893
899
  }
894
900
 
@@ -1850,6 +1856,8 @@ public func captureScreenshots(workspace: String? = nil,
1850
1856
  - projectDirectory: Define the directory containing the Carthage project
1851
1857
  - newResolver: Use new resolver when resolving dependency graph
1852
1858
  - logPath: Path to the xcode build output
1859
+ - useXcframeworks: Create xcframework bundles instead of one framework per platform (requires Xcode 12+)
1860
+ - archive: Archive built frameworks from the current project
1853
1861
  - executable: Path to the `carthage` executable on your machine
1854
1862
  */
1855
1863
  public func carthage(command: String = "bootstrap",
@@ -1872,6 +1880,8 @@ public func carthage(command: String = "bootstrap",
1872
1880
  projectDirectory: String? = nil,
1873
1881
  newResolver: Bool? = nil,
1874
1882
  logPath: String? = nil,
1883
+ useXcframeworks: Bool = false,
1884
+ archive: Bool = false,
1875
1885
  executable: String = "carthage")
1876
1886
  {
1877
1887
  let command = RubyCommand(commandID: "", methodName: "carthage", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
@@ -1894,6 +1904,8 @@ public func carthage(command: String = "bootstrap",
1894
1904
  RubyCommand.Argument(name: "project_directory", value: projectDirectory),
1895
1905
  RubyCommand.Argument(name: "new_resolver", value: newResolver),
1896
1906
  RubyCommand.Argument(name: "log_path", value: logPath),
1907
+ RubyCommand.Argument(name: "use_xcframeworks", value: useXcframeworks),
1908
+ RubyCommand.Argument(name: "archive", value: archive),
1897
1909
  RubyCommand.Argument(name: "executable", value: executable)])
1898
1910
  _ = runner.executeCommand(command)
1899
1911
  }
@@ -2192,6 +2204,7 @@ public func clubmate() {
2192
2204
  - errorCallback: A callback invoked with the command output if there is a non-zero exit status
2193
2205
  - tryRepoUpdateOnError: Retry with --repo-update if action was finished with error
2194
2206
  - deployment: Disallow any changes to the Podfile or the Podfile.lock during installation
2207
+ - allowRoot: Allows CocoaPods to run as root
2195
2208
  - clean: **DEPRECATED!** (Option renamed as clean_install) Remove SCM directories
2196
2209
  - integrate: **DEPRECATED!** (Option removed from cocoapods) Integrate the Pods libraries into the Xcode project(s)
2197
2210
 
@@ -2207,6 +2220,7 @@ public func cocoapods(repoUpdate: Bool = false,
2207
2220
  errorCallback: ((String) -> Void)? = nil,
2208
2221
  tryRepoUpdateOnError: Bool = false,
2209
2222
  deployment: Bool = false,
2223
+ allowRoot: Bool = false,
2210
2224
  clean: Bool = true,
2211
2225
  integrate: Bool = true)
2212
2226
  {
@@ -2220,6 +2234,7 @@ public func cocoapods(repoUpdate: Bool = false,
2220
2234
  RubyCommand.Argument(name: "error_callback", value: errorCallback, type: .stringClosure),
2221
2235
  RubyCommand.Argument(name: "try_repo_update_on_error", value: tryRepoUpdateOnError),
2222
2236
  RubyCommand.Argument(name: "deployment", value: deployment),
2237
+ RubyCommand.Argument(name: "allow_root", value: allowRoot),
2223
2238
  RubyCommand.Argument(name: "clean", value: clean),
2224
2239
  RubyCommand.Argument(name: "integrate", value: integrate)])
2225
2240
  _ = runner.executeCommand(command)
@@ -9630,4 +9645,4 @@ public let snapshotfile = Snapshotfile()
9630
9645
 
9631
9646
  // Please don't remove the lines below
9632
9647
  // They are used to detect outdated files
9633
- // FastlaneRunnerAPIVersion [0.9.109]
9648
+ // FastlaneRunnerAPIVersion [0.9.110]
@@ -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.173.0
20
+ // Generated with fastlane 2.174.0
@@ -196,4 +196,4 @@ public extension GymfileProtocol {
196
196
 
197
197
  // Please don't remove the lines below
198
198
  // They are used to detect outdated files
199
- // FastlaneRunnerAPIVersion [0.9.59]
199
+ // FastlaneRunnerAPIVersion [0.9.60]
@@ -1,5 +1,5 @@
1
1
  // LaneFileProtocol.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // MainProcess.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -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.173.0
20
+ // Generated with fastlane 2.174.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.53]
187
+ // FastlaneRunnerAPIVersion [0.9.54]
@@ -1,5 +1,5 @@
1
1
  // Plugins.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  // This autogenerated file will be overwritten or replaced when installing/updating plugins or running "fastlane generate_swift"
5
5
  //
@@ -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.173.0
20
+ // Generated with fastlane 2.174.0
@@ -52,4 +52,4 @@ public extension PrecheckfileProtocol {
52
52
 
53
53
  // Please don't remove the lines below
54
54
  // They are used to detect outdated files
55
- // FastlaneRunnerAPIVersion [0.9.52]
55
+ // FastlaneRunnerAPIVersion [0.9.53]
@@ -1,5 +1,5 @@
1
1
  // RubyCommand.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // RubyCommandable.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // Runner.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -140,7 +140,7 @@ extension Runner {
140
140
  dispatchGroup.leave()
141
141
  }
142
142
 
143
- fileprivate func testDispatchTimeoutResult(_ timeoutResult: DispatchTimeoutResult, failureMessage: String, timeToWait _: DispatchTimeInterval) -> Bool {
143
+ private func testDispatchTimeoutResult(_ timeoutResult: DispatchTimeoutResult, failureMessage: String, timeToWait _: DispatchTimeInterval) -> Bool {
144
144
  switch timeoutResult {
145
145
  case .success:
146
146
  return true
@@ -1,5 +1,5 @@
1
1
  // RunnerArgument.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -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.173.0
20
+ // Generated with fastlane 2.174.0
@@ -280,4 +280,4 @@ public extension ScanfileProtocol {
280
280
 
281
281
  // Please don't remove the lines below
282
282
  // They are used to detect outdated files
283
- // FastlaneRunnerAPIVersion [0.9.64]
283
+ // FastlaneRunnerAPIVersion [0.9.65]
@@ -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.173.0
20
+ // Generated with fastlane 2.174.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.54]
99
+ // FastlaneRunnerAPIVersion [0.9.55]
@@ -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.173.0
20
+ // Generated with fastlane 2.174.0
@@ -196,4 +196,4 @@ public extension SnapshotfileProtocol {
196
196
 
197
197
  // Please don't remove the lines below
198
198
  // They are used to detect outdated files
199
- // FastlaneRunnerAPIVersion [0.9.48]
199
+ // FastlaneRunnerAPIVersion [0.9.49]
@@ -1,5 +1,5 @@
1
1
  // SocketClient.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // SocketClientDelegateProtocol.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // SocketResponse.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -2,22 +2,26 @@
2
2
  "entries": {
3
3
  "brew": {
4
4
  "swiftformat": {
5
- "version": "0.45.6",
5
+ "version": "0.47.11",
6
6
  "bottle": {
7
7
  "cellar": ":any_skip_relocation",
8
8
  "prefix": "/usr/local",
9
9
  "files": {
10
+ "arm64_big_sur": {
11
+ "url": "https://homebrew.bintray.com/bottles/swiftformat-0.47.11.arm64_big_sur.bottle.tar.gz",
12
+ "sha256": "65a20f75d4a9e2837dfc60318e312893b99f2a957a7f3a9a137b326c87dc29ff"
13
+ },
14
+ "big_sur": {
15
+ "url": "https://homebrew.bintray.com/bottles/swiftformat-0.47.11.big_sur.bottle.tar.gz",
16
+ "sha256": "0b4c55f9316fbf40c9eab826536df17eb0249484772c372a962a189e0d1a7fd2"
17
+ },
10
18
  "catalina": {
11
- "url": "https://homebrew.bintray.com/bottles/swiftformat-0.45.6.catalina.bottle.tar.gz",
12
- "sha256": "7f23ff740679b30e313c91533c2f3e6fa4210bb68f8e383c29e7f922f87d8f66"
19
+ "url": "https://homebrew.bintray.com/bottles/swiftformat-0.47.11.catalina.bottle.tar.gz",
20
+ "sha256": "3b7bc3e4e6f150ecdd298be109d13ef9e84a56a45c580113c7a6b151fe1615da"
13
21
  },
14
22
  "mojave": {
15
- "url": "https://homebrew.bintray.com/bottles/swiftformat-0.45.6.mojave.bottle.tar.gz",
16
- "sha256": "b5349b775ff60c73c284d5de8ad2c0fdfb35428cff92bb7a8e5fcc6536750b89"
17
- },
18
- "high_sierra": {
19
- "url": "https://homebrew.bintray.com/bottles/swiftformat-0.45.6.high_sierra.bottle.tar.gz",
20
- "sha256": "34d900217ca12736a112c31e54a5f4f7e64c1fe224f6e4ea76ad1d25b149f647"
23
+ "url": "https://homebrew.bintray.com/bottles/swiftformat-0.47.11.mojave.bottle.tar.gz",
24
+ "sha256": "24bdfac40c16c1e40bbe970eedb9450cd3099890188b8d6bdd0fe2447d54ce48"
21
25
  }
22
26
  }
23
27
  }
@@ -27,12 +31,12 @@
27
31
  "system": {
28
32
  "macos": {
29
33
  "catalina": {
30
- "HOMEBREW_VERSION": "2.4.9-133-g0fdf8f2",
34
+ "HOMEBREW_VERSION": "3.0.0-57-g59dd425",
31
35
  "HOMEBREW_PREFIX": "/usr/local",
32
- "Homebrew/homebrew-core": "7141f37f3af0e6702f6dab2263852ddefbbbf8ed",
33
- "CLT": "11.0.28.3",
34
- "Xcode": "11.6",
35
- "macOS": "10.15.4"
36
+ "Homebrew/homebrew-core": "637196b33ecd885dc057c16fc5cb652a4561f632",
37
+ "CLT": "11.0.33.12",
38
+ "Xcode": "12.2",
39
+ "macOS": "10.15.7"
36
40
  },
37
41
  "big_sur": {
38
42
  "HOMEBREW_VERSION": "2.4.13-249-g6454504",
@@ -1,5 +1,5 @@
1
1
  // main.swift
2
- // Copyright (c) 2020 FastlaneTools
2
+ // Copyright (c) 2021 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -243,11 +243,17 @@ module FastlaneCore
243
243
  while value.nil?
244
244
  UI.important("To not be asked about this value, you can specify it using '#{option.key}'") if ENV["FASTLANE_ONBOARDING_IN_PROCESS"].to_s.length == 0
245
245
  value = option.sensitive ? UI.password("#{option.description}: ") : UI.input("#{option.description}: ")
246
+
247
+ # ConfigItem allows to specify a type for the item but UI.password and
248
+ # UI.input return String values. Try to convert the String input to
249
+ # the option's type before passing it along.
250
+ value = option.auto_convert_value(value)
251
+
246
252
  # Also store this value to use it from now on
247
253
  begin
248
254
  set(key, value)
249
255
  rescue => ex
250
- puts(ex)
256
+ UI.error(ex)
251
257
  value = nil
252
258
  end
253
259
  end
@@ -1,5 +1,6 @@
1
1
  require_relative 'helper'
2
2
  require 'xcodeproj'
3
+ require_relative './configuration/configuration'
3
4
  require 'fastlane_core/command_executor'
4
5
 
5
6
  module FastlaneCore
@@ -67,9 +68,6 @@ module FastlaneCore
67
68
  # Is this project a workspace?
68
69
  attr_accessor :is_workspace
69
70
 
70
- # The config object containing the scheme, configuration, etc.
71
- attr_accessor :options
72
-
73
71
  # Should the output of xcodebuild commands be silenced?
74
72
  attr_accessor :xcodebuild_list_silent
75
73
 
@@ -77,18 +75,34 @@ module FastlaneCore
77
75
  # Gets rid of annoying plugin info warnings.
78
76
  attr_accessor :xcodebuild_suppress_stderr
79
77
 
78
+ # @param options [FastlaneCore::Configuration|Hash] a set of configuration to run xcodebuild to work out build settings
79
+ # @param xcodebuild_list_silent [Boolean] a flag to silent xcodebuild command's output
80
+ # @param xcodebuild_suppress_stderr [Boolean] a flag to supress output to stderr from xcodebuild
80
81
  def initialize(options, xcodebuild_list_silent: false, xcodebuild_suppress_stderr: false)
81
- self.options = options
82
- self.path = File.expand_path(options[:workspace] || options[:project])
83
- self.is_workspace = (options[:workspace].to_s.length > 0)
84
- self.xcodebuild_list_silent = xcodebuild_list_silent
85
- self.xcodebuild_suppress_stderr = xcodebuild_suppress_stderr
82
+ @options = options
83
+ @path = File.expand_path(self.options[:workspace] || self.options[:project])
84
+ @is_workspace = (self.options[:workspace].to_s.length > 0)
85
+ @xcodebuild_list_silent = xcodebuild_list_silent
86
+ @xcodebuild_suppress_stderr = xcodebuild_suppress_stderr
86
87
 
87
88
  if !path || !File.directory?(path)
88
89
  UI.user_error!("Could not find project at path '#{path}'")
89
90
  end
90
91
  end
91
92
 
93
+ # @return [Hash] a hash object containing project, workspace, scheme, any configuration related to xcodebuild, or etc...
94
+ def options
95
+ # To keep compatibility with actions using this class from outside of `fastlane` gem; i.e. `xcov`,
96
+ # converts `options` to a plain Hash. Otherwise, it might crash when a new option's key is added
97
+ # due to `FastlaneCore::Configuration` to validate valid keys defined.
98
+ @options.kind_of?(FastlaneCore::Configuration) ? @options.values : @options
99
+ end
100
+
101
+ def options=(new_value)
102
+ UI.deprecated('Update `options` is not worth doing since it can change behavior of this object entirely. Consider re-creating FastlaneCore::Project.')
103
+ @options = new_value
104
+ end
105
+
92
106
  def workspace?
93
107
  self.is_workspace
94
108
  end
@@ -247,8 +247,23 @@ module Spaceship
247
247
  # ]
248
248
  # }
249
249
 
250
+ # Detail is missing in this response making debugging super hard
251
+ # {"errors" =>
252
+ # [
253
+ # {
254
+ # "id"=>"80ea6cff-0043-4543-9cd1-3e26b0fce383",
255
+ # "status"=>"409",
256
+ # "code"=>"ENTITY_ERROR.RELATIONSHIP.INVALID",
257
+ # "title"=>"The provided entity includes a relationship with an invalid value",
258
+ # "source"=>{
259
+ # "pointer"=>"/data/relationships/primarySubcategoryOne"
260
+ # }
261
+ # }
262
+ # ]
263
+ # }
264
+
250
265
  return response.body['errors'].map do |error|
251
- messages = [[error['title'], error['detail']].compact.join(" - ")]
266
+ messages = [[error['title'], error['detail'], error.dig("source", "pointer")].compact.join(" - ")]
252
267
 
253
268
  meta = error["meta"] || {}
254
269
  associated_errors = meta["associatedErrors"] || {}
@@ -56,6 +56,30 @@ module Spaceship
56
56
  client ||= Spaceship::ConnectAPI
57
57
  return client.get_bundle_id(bundle_id_id: bundle_id_id, includes: includes).first
58
58
  end
59
+
60
+ def self.create(client: nil, name: nil, platform: nil, identifier: nil, seed_id: nil)
61
+ client ||= Spaceship::ConnectAPI
62
+ resp = client.post_bundle_id(name: name, platform: platform, identifier: identifier, seed_id: seed_id)
63
+ return resp.to_models.first
64
+ end
65
+
66
+ #
67
+ # BundleIdsCapabilities
68
+ #
69
+
70
+ def get_capabilities(client: nil, includes: nil)
71
+ client ||= Spaceship::ConnectAPI
72
+ resp = client.get_bundle_id_capabilities(bundle_id_id: id, includes: includes)
73
+ return resp.to_models
74
+ end
75
+
76
+ def create_capability(capability_type, settings: [], client: nil)
77
+ raise "capability_type is required " if capability_type.nil?
78
+
79
+ client ||= Spaceship::ConnectAPI
80
+ resp = client.post_bundle_id_capability(bundle_id_id: id, capability_type: capability_type, settings: settings)
81
+ return resp.to_models.first
82
+ end
59
83
  end
60
84
  end
61
85
  end
@@ -41,6 +41,21 @@ module Spaceship
41
41
  MARZIPAN = "MARZIPAN" # Catalyst
42
42
  end
43
43
 
44
+ module Settings
45
+ ICLOUD_VERSION = "ICLOUD_VERSION"
46
+ DATA_PROTECTION_PERMISSION_LEVEL = "DATA_PROTECTION_PERMISSION_LEVEL"
47
+ APPLE_ID_AUTH_APP_CONSENT = "APPLE_ID_AUTH_APP_CONSENT"
48
+ end
49
+
50
+ module Options
51
+ XCODE_5 = "XCODE_5"
52
+ XCODE_6 = "XCODE_6"
53
+ COMPLETE_PROTECTION = "COMPLETE_PROTECTION"
54
+ PROTECTED_UNLESS_OPEN = "PROTECTED_UNLESS_OPEN"
55
+ PROTECTED_UNTIL_FIRST_USER_AUTH = "PROTECTED_UNTIL_FIRST_USER_AUTH"
56
+ PRIMARY_APP_CONSENT = "PRIMARY_APP_CONSENT"
57
+ end
58
+
44
59
  def self.type
45
60
  return "bundleIdCapabilities"
46
61
  end
@@ -59,14 +74,21 @@ module Spaceship
59
74
  # API
60
75
  #
61
76
 
62
- def self.all(client: nil, filter: {}, includes: nil, limit: nil, sort: nil)
77
+ def self.all(client: nil, bundle_id_id:, limit: nil)
78
+ client ||= Spaceship::ConnectAPI
79
+ resp = client.get_bundle_id_capabilities(bundle_id_id: bundle_id_id, limit: limit).all_pages
80
+ return resp.flat_map(&:to_models)
81
+ end
82
+
83
+ def self.create(client: nil, bundle_id_id:, capability_type:, settings: [])
63
84
  client ||= Spaceship::ConnectAPI
64
- return client.get_users(filter: filter, includes: includes)
85
+ resp = client.post_bundle_id_capability(bundle_id_id: bundle_id_id, capability_type: capability_type, settings: settings)
86
+ return resp.to_models.first
65
87
  end
66
88
 
67
- def self.find(client: nil, email: nil, includes: nil)
89
+ def delete!(client: nil, filter: {}, includes: nil, limit: nil, sort: nil)
68
90
  client ||= Spaceship::ConnectAPI
69
- return all(client: client, filter: { email: email }, includes: includes)
91
+ client.delete_bundle_id_capability(bundle_id_capability_id: id)
70
92
  end
71
93
  end
72
94
  end
@@ -27,6 +27,59 @@ module Spaceship
27
27
  provisioning_request_client.get("bundleIds/#{bundle_id_id}", params)
28
28
  end
29
29
 
30
+ def post_bundle_id(name:, platform:, identifier:, seed_id:)
31
+ attributes = {
32
+ name: name,
33
+ platform: platform,
34
+ identifier: identifier,
35
+ seedId: seed_id
36
+ }
37
+
38
+ body = {
39
+ data: {
40
+ attributes: attributes,
41
+ type: "bundleIds"
42
+ }
43
+ }
44
+
45
+ provisioning_request_client.post("bundleIds", body)
46
+ end
47
+
48
+ #
49
+ # bundleIdCapability
50
+ #
51
+
52
+ def get_bundle_id_capabilities(bundle_id_id:, includes: nil, limit: nil, sort: nil)
53
+ params = provisioning_request_client.build_params(filter: nil, includes: includes, limit: limit, sort: sort)
54
+ provisioning_request_client.get("bundleIds/#{bundle_id_id}/bundleIdCapabilities", params)
55
+ end
56
+
57
+ def post_bundle_id_capability(bundle_id_id:, capability_type:, settings: [])
58
+ body = {
59
+ data: {
60
+ attributes: {
61
+ capabilityType: capability_type,
62
+ settings: settings
63
+ },
64
+ type: "bundleIdCapabilities",
65
+ relationships: {
66
+ bundleId: {
67
+ data: {
68
+ type: "bundleIds",
69
+ id: bundle_id_id
70
+ }
71
+ }
72
+ }
73
+ }
74
+ }
75
+
76
+ provisioning_request_client.post("bundleIdCapabilities", body)
77
+ end
78
+
79
+ def delete_bundle_id_capability(bundle_id_capability_id:)
80
+ provisioning_request_client.delete("bundleIdCapabilities/#{bundle_id_capability_id}")
81
+ end
82
+
30
83
  #
31
84
  # certificates
32
85
  #
@@ -4,7 +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
+ raise "2FA can only be performed in interactive mode" if ENV["SPACESHIP_ONLY_ALLOW_INTERACTIVE_2FA"] == "true" && ENV["FASTLANE_IS_INTERACTIVE"] == "false"
8
8
  # extract `x-apple-id-session-id` and `scnt` from response, to be used by `update_request_headers`
9
9
  @x_apple_id_session_id = response["x-apple-id-session-id"]
10
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.173.0
4
+ version: 2.174.0
5
5
  platform: ruby
6
6
  authors:
7
- - Aaron Brager
8
- - Matthew Ellis
9
- - Jan Piotrowski
10
- - Maksym Grebenets
11
- - Fumiya Nakamura
7
+ - Felix Krause
8
+ - Stefan Natchev
12
9
  - Jorge Revuelta H
10
+ - Matthew Ellis
11
+ - Jimmy Dee
12
+ - Andrew McBurney
13
13
  - Jérôme Lacoste
14
- - Max Ott
15
- - Manu Wallner
16
- - Luka Mirosevic
17
- - Daniel Jankowski
14
+ - Kohki Miki
18
15
  - Helmut Januschka
16
+ - Jan Piotrowski
17
+ - Daniel Jankowski
18
+ - Danielle Tomlinson
19
+ - Max Ott
19
20
  - Josh Holtz
20
- - Joshua Liebowitz
21
- - Stefan Natchev
22
- - Jimmy Dee
23
21
  - Iulian Onofrei
24
- - Andrew McBurney
22
+ - Joshua Liebowitz
25
23
  - Olivier Halligon
26
- - Kohki Miki
27
- - Felix Krause
28
- - Danielle Tomlinson
24
+ - Fumiya Nakamura
25
+ - Maksym Grebenets
26
+ - Luka Mirosevic
27
+ - Manu Wallner
28
+ - Aaron Brager
29
29
  autorequire:
30
30
  bindir: bin
31
31
  cert_chain: []
32
- date: 2021-02-04 00:00:00.000000000 Z
32
+ date: 2021-02-10 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: slack-notifier