fastlane 2.133.0 → 2.134.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f60586154ca46a8972940838fd1c842c4ea3d15710660ae67f6a1daa6e549725
4
- data.tar.gz: 796c700b97db4495e2f108eec428ccb03dd6b2112fa8df8dcca3650165a00484
3
+ metadata.gz: 137d18e3b1c51143869fab046abca316e329c07121b9fa8673c19bc3e64c4367
4
+ data.tar.gz: 230b49b8a849c8470d0868b1119cd5a9379a4df93e54f93bd94eebc1417e29b7
5
5
  SHA512:
6
- metadata.gz: 73fb7ed813d160104e2481a6923797d673dc12109f60ad1c24b743a2dd0477460e70e614da2701c386ae5d0912a1964f4dee49a4db8c32a8a0a9ddba0a45cb29
7
- data.tar.gz: e909f2a16fea9377e4fbf21466e38d64b5428b539db2751a1c28a83d3e6ae45aa27bce88960756c2d9056830c66660ccc3445317eeaa55156c58e699afd31e4d
6
+ metadata.gz: fbbfe027861bdbc7581ac00dbb19af06131513b759ccab42833c7d81f8a1f99833c4a2229438e3029d486906dd1ea42e83fb827e668c2dff7e9ea54b0a83fa60
7
+ data.tar.gz: e50c253223dd102a4777595e78ae6f3f77df92a2015345c73050398083557244481e0858581a4d60afa2d28bf00fb299d1a2f4083145489a640ba25baed3808c
data/README.md CHANGED
@@ -34,67 +34,67 @@ 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='olivier-halligon'>
38
- <a href='https://github.com/AliSoftware'>
39
- <img src='https://github.com/AliSoftware.png?size=140'>
37
+ <td id='felix-krause'>
38
+ <a href='https://github.com/KrauseFx'>
39
+ <img src='https://github.com/KrauseFx.png?size=140'>
40
40
  </a>
41
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
41
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</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='luka-mirosevic'>
44
+ <a href='https://github.com/lmirosevic'>
45
+ <img src='https://github.com/lmirosevic.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/lmirosevic'>Luka Mirosevic</a></h4>
48
48
  </td>
49
- <td id='jérôme-lacoste'>
50
- <a href='https://github.com/lacostej'>
51
- <img src='https://github.com/lacostej.png?size=140'>
49
+ <td id='aaron-brager'>
50
+ <a href='https://github.com/getaaron'>
51
+ <img src='https://github.com/getaaron.png?size=140'>
52
52
  </a>
53
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
53
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
54
54
  </td>
55
- <td id='josh-holtz'>
56
- <a href='https://github.com/joshdholtz'>
57
- <img src='https://github.com/joshdholtz.png?size=140'>
55
+ <td id='kohki-miki'>
56
+ <a href='https://github.com/giginet'>
57
+ <img src='https://github.com/giginet.png?size=140'>
58
58
  </a>
59
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
59
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
60
60
  </td>
61
- <td id='matthew-ellis'>
62
- <a href='https://github.com/matthewellis'>
63
- <img src='https://github.com/matthewellis.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/mellis1995'>Matthew Ellis</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='maksym-grebenets'>
70
- <a href='https://github.com/mgrebenets'>
71
- <img src='https://github.com/mgrebenets.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/mgrebenets'>Maksym Grebenets</a></h4>
73
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
74
74
  </td>
75
- <td id='jimmy-dee'>
76
- <a href='https://github.com/jdee'>
77
- <img src='https://github.com/jdee.png?size=140'>
75
+ <td id='manu-wallner'>
76
+ <a href='https://github.com/milch'>
77
+ <img src='https://github.com/milch.png?size=140'>
78
78
  </a>
79
- <h4 align='center'>Jimmy Dee</h4>
79
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
80
80
  </td>
81
- <td id='danielle-tomlinson'>
82
- <a href='https://github.com/endocrimes'>
83
- <img src='https://github.com/endocrimes.png?size=140'>
81
+ <td id='helmut-januschka'>
82
+ <a href='https://github.com/hjanuschka'>
83
+ <img src='https://github.com/hjanuschka.png?size=140'>
84
84
  </a>
85
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
85
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
86
86
  </td>
87
- <td id='andrew-mcburney'>
88
- <a href='https://github.com/armcburney'>
89
- <img src='https://github.com/armcburney.png?size=140'>
87
+ <td id='jorge-revuelta-h'>
88
+ <a href='https://github.com/minuscorp'>
89
+ <img src='https://github.com/minuscorp.png?size=140'>
90
90
  </a>
91
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
91
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
92
92
  </td>
93
- <td id='luka-mirosevic'>
94
- <a href='https://github.com/lmirosevic'>
95
- <img src='https://github.com/lmirosevic.png?size=140'>
93
+ <td id='jan-piotrowski'>
94
+ <a href='https://github.com/janpio'>
95
+ <img src='https://github.com/janpio.png?size=140'>
96
96
  </a>
97
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
97
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
98
98
  </td>
99
99
  </tr>
100
100
  <tr>
@@ -104,61 +104,61 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
104
104
  </a>
105
105
  <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
106
106
  </td>
107
- <td id='stefan-natchev'>
108
- <a href='https://github.com/snatchev'>
109
- <img src='https://github.com/snatchev.png?size=140'>
107
+ <td id='fumiya-nakamura'>
108
+ <a href='https://github.com/nafu'>
109
+ <img src='https://github.com/nafu.png?size=140'>
110
110
  </a>
111
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
111
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
112
112
  </td>
113
- <td id='kohki-miki'>
114
- <a href='https://github.com/giginet'>
115
- <img src='https://github.com/giginet.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/giginet'>Kohki Miki</a></h4>
117
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
118
118
  </td>
119
- <td id='manu-wallner'>
120
- <a href='https://github.com/milch'>
121
- <img src='https://github.com/milch.png?size=140'>
119
+ <td id='iulian-onofrei'>
120
+ <a href='https://github.com/revolter'>
121
+ <img src='https://github.com/revolter.png?size=140'>
122
122
  </a>
123
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
123
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
124
124
  </td>
125
- <td id='fumiya-nakamura'>
126
- <a href='https://github.com/nafu'>
127
- <img src='https://github.com/nafu.png?size=140'>
125
+ <td id='matthew-ellis'>
126
+ <a href='https://github.com/matthewellis'>
127
+ <img src='https://github.com/matthewellis.png?size=140'>
128
128
  </a>
129
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
129
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
130
130
  </td>
131
131
  </tr>
132
132
  <tr>
133
- <td id='jan-piotrowski'>
134
- <a href='https://github.com/janpio'>
135
- <img src='https://github.com/janpio.png?size=140'>
133
+ <td id='andrew-mcburney'>
134
+ <a href='https://github.com/armcburney'>
135
+ <img src='https://github.com/armcburney.png?size=140'>
136
136
  </a>
137
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
137
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
138
138
  </td>
139
- <td id='felix-krause'>
140
- <a href='https://github.com/KrauseFx'>
141
- <img src='https://github.com/KrauseFx.png?size=140'>
139
+ <td id='stefan-natchev'>
140
+ <a href='https://github.com/snatchev'>
141
+ <img src='https://github.com/snatchev.png?size=140'>
142
142
  </a>
143
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
143
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
144
144
  </td>
145
- <td id='jorge-revuelta-h'>
146
- <a href='https://github.com/minuscorp'>
147
- <img src='https://github.com/minuscorp.png?size=140'>
145
+ <td id='jimmy-dee'>
146
+ <a href='https://github.com/jdee'>
147
+ <img src='https://github.com/jdee.png?size=140'>
148
148
  </a>
149
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
149
+ <h4 align='center'>Jimmy Dee</h4>
150
150
  </td>
151
- <td id='aaron-brager'>
152
- <a href='https://github.com/getaaron'>
153
- <img src='https://github.com/getaaron.png?size=140'>
151
+ <td id='jérôme-lacoste'>
152
+ <a href='https://github.com/lacostej'>
153
+ <img src='https://github.com/lacostej.png?size=140'>
154
154
  </a>
155
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
155
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
156
156
  </td>
157
- <td id='iulian-onofrei'>
158
- <a href='https://github.com/revolter'>
159
- <img src='https://github.com/revolter.png?size=140'>
157
+ <td id='maksym-grebenets'>
158
+ <a href='https://github.com/mgrebenets'>
159
+ <img src='https://github.com/mgrebenets.png?size=140'>
160
160
  </a>
161
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
161
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
162
162
  </td>
163
163
  </tr>
164
164
  </table>
@@ -21,6 +21,7 @@ module Fastlane
21
21
  cmd << "--use-ssh" if params[:use_ssh]
22
22
  cmd << "--use-submodules" if params[:use_submodules]
23
23
  cmd << "--no-use-binaries" if params[:use_binaries] == false
24
+ cmd << "--no-checkout" if params[:no_checkout] == true
24
25
  cmd << "--no-build" if params[:no_build] == true
25
26
  cmd << "--no-skip-current" if params[:no_skip_current] == true
26
27
  cmd << "--verbose" if params[:verbose] == true
@@ -94,6 +95,12 @@ module Fastlane
94
95
  is_string: false,
95
96
  type: Boolean,
96
97
  optional: true),
98
+ FastlaneCore::ConfigItem.new(key: :no_checkout,
99
+ env_name: "FL_CARTHAGE_NO_CHECKOUT",
100
+ description: "When bootstrapping Carthage do not checkout",
101
+ is_string: false,
102
+ type: Boolean,
103
+ optional: true),
97
104
  FastlaneCore::ConfigItem.new(key: :no_build,
98
105
  env_name: "FL_CARTHAGE_NO_BUILD",
99
106
  description: "When bootstrapping Carthage do not build",
@@ -14,15 +14,17 @@ module Fastlane
14
14
  cmd << ["cd '#{podfile_folder}' &&"]
15
15
  end
16
16
 
17
- cmd << ['bundle exec'] if params[:use_bundle_exec] && shell_out_should_use_bundle_exec?
17
+ cmd << ['bundle exec'] if use_bundle_exec?(params)
18
18
  cmd << ['pod install']
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
23
  cmd << '--repo-update' if params[:repo_update]
23
24
  cmd << '--silent' if params[:silent]
24
25
  cmd << '--verbose' if params[:verbose]
25
26
  cmd << '--no-ansi' unless params[:ansi]
27
+ cmd << '--deployment' if params[:deployment]
26
28
 
27
29
  Actions.sh(cmd.join(' '), error_callback: lambda { |result|
28
30
  if !params[:repo_update] && params[:try_repo_update_on_error]
@@ -36,6 +38,14 @@ module Fastlane
36
38
  })
37
39
  end
38
40
 
41
+ def self.use_bundle_exec?(params)
42
+ params[:use_bundle_exec] && shell_out_should_use_bundle_exec?
43
+ end
44
+
45
+ def self.pod_version
46
+ use_bundle_exec?(params) ? `bundle exec pod --version` : `pod --version`
47
+ end
48
+
39
49
  def self.call_error_callback(params, result)
40
50
  if params[:error_callback]
41
51
  Dir.chdir(FastlaneCore::FastlaneFolder.path) do
@@ -57,6 +67,11 @@ module Fastlane
57
67
  description: "Add `--repo-update` flag to `pod install` command",
58
68
  is_string: false,
59
69
  default_value: false),
70
+ FastlaneCore::ConfigItem.new(key: :clean_install,
71
+ env_name: "FL_COCOAPODS_CLEAN_INSTALL",
72
+ description: "Execute a full pod installation ignoring the content of the project cache",
73
+ is_string: false,
74
+ default_value: false),
60
75
  FastlaneCore::ConfigItem.new(key: :silent,
61
76
  env_name: "FL_COCOAPODS_SILENT",
62
77
  description: "Execute command without logging output",
@@ -98,11 +113,18 @@ module Fastlane
98
113
  is_string: false,
99
114
  default_value: false,
100
115
  type: Boolean),
116
+ FastlaneCore::ConfigItem.new(key: :deployment,
117
+ env_name: "FL_COCOAPODS_DEPLOYMENT",
118
+ description: 'Disallow any changes to the Podfile or the Podfile.lock during installation',
119
+ optional: true,
120
+ is_string: false,
121
+ default_value: false,
122
+ type: Boolean),
101
123
 
102
124
  # Deprecated
103
125
  FastlaneCore::ConfigItem.new(key: :clean,
104
126
  env_name: "FL_COCOAPODS_CLEAN",
105
- description: "(Option removed from cocoapods) Remove SCM directories",
127
+ description: "(Option renamed as clean_install) Remove SCM directories",
106
128
  deprecated: true,
107
129
  is_string: false,
108
130
  default_value: true),
@@ -33,7 +33,7 @@ module Fastlane
33
33
  options[:disable_notify] = 'yes' if options[:disable_notify]
34
34
 
35
35
  connection.post("/api/users/#{user_name}/apps", options)
36
- rescue Faraday::Error::TimeoutError
36
+ rescue Faraday::TimeoutError
37
37
  UI.crash!("Timed out while uploading build. Check https://deploygate.com/ to see if the upload was completed.")
38
38
  end
39
39
 
@@ -26,6 +26,7 @@ module Fastlane
26
26
  platform = params[:platform]
27
27
  output_directory = params[:output_directory]
28
28
  wait_for_dsym_processing = params[:wait_for_dsym_processing]
29
+ wait_timeout = params[:wait_timeout]
29
30
  min_version = Gem::Version.new(params[:min_version]) if params[:min_version]
30
31
 
31
32
  # Set version if it is latest
@@ -45,6 +46,20 @@ module Fastlane
45
46
  version = latest_candidate_build.train_version
46
47
  build_number = latest_candidate_build.build_version
47
48
  end
49
+ elsif version == 'live'
50
+ UI.message("Looking for live version...")
51
+ live_version = app.live_version(platform: platform)
52
+
53
+ UI.user_error!("Could not find live version for your app, please try setting 'latest' or a specific version") if live_version.nil?
54
+
55
+ # No need to search for candidates, because released App Store version should only have one build
56
+ version = live_version.version
57
+ build_number = live_version.build_version
58
+ end
59
+
60
+ # Remove leading zeros from version string (eg. 1.02 -> 1.2)
61
+ if version
62
+ version = version.split(".").map(&:to_i).join(".")
48
63
  end
49
64
 
50
65
  # Make sure output_directory has a slash on the end
@@ -101,7 +116,7 @@ module Fastlane
101
116
  end
102
117
 
103
118
  unless download_url
104
- if !wait_for_dsym_processing || (Time.now - start) > (60 * 5)
119
+ if !wait_for_dsym_processing || (Time.now - start) > wait_timeout
105
120
  # In some cases, AppStoreConnect does not process the dSYMs, thus no error should be thrown.
106
121
  UI.message("Could not find any dSYM for #{build.build_version} (#{train.version_string})")
107
122
  else
@@ -231,7 +246,7 @@ module Fastlane
231
246
  FastlaneCore::ConfigItem.new(key: :version,
232
247
  short_option: "-v",
233
248
  env_name: "DOWNLOAD_DSYMS_VERSION",
234
- description: "The app version for dSYMs you wish to download, pass in 'latest' to download only the latest build's dSYMs",
249
+ description: "The app version for dSYMs you wish to download, pass in 'latest' to download only the latest build's dSYMs or 'live' to download only the live verion dSYMs",
235
250
  optional: true),
236
251
  FastlaneCore::ConfigItem.new(key: :build_number,
237
252
  short_option: "-b",
@@ -254,7 +269,14 @@ module Fastlane
254
269
  description: "Wait for dSYMs to process",
255
270
  optional: true,
256
271
  default_value: false,
257
- type: Boolean)
272
+ type: Boolean),
273
+ FastlaneCore::ConfigItem.new(key: :wait_timeout,
274
+ short_option: "-t",
275
+ env_name: "DOWNLOAD_DSYMS_WAIT_TIMEOUT",
276
+ description: "Number of seconds to wait for dSYMs to process",
277
+ optional: true,
278
+ default_value: 300,
279
+ type: Integer)
258
280
  ]
259
281
  end
260
282
 
@@ -280,6 +302,7 @@ module Fastlane
280
302
  [
281
303
  'download_dsyms',
282
304
  'download_dsyms(version: "1.0.0", build_number: "345")',
305
+ 'download_dsyms(version: "live")',
283
306
  'download_dsyms(min_version: "1.2.3")'
284
307
  ]
285
308
  end
@@ -18,12 +18,18 @@ module Fastlane
18
18
  plist_file = get_plist!(folder, target, configuration)
19
19
  version_number = get_version_number_from_plist!(plist_file)
20
20
 
21
- # Get from build settings if needed (ex: $(MARKETING_VERSION) is default in Xcode 11)
21
+ # Get from build settings (or project settings) if needed (ex: $(MARKETING_VERSION) is default in Xcode 11)
22
22
  if version_number =~ /\$\(([\w\-]+)\)/
23
- version_number = get_version_number_from_build_settings!(target, $1, configuration)
23
+ version_number = get_version_number_from_build_settings!(target, $1, configuration) || get_version_number_from_build_settings!(project, $1, configuration)
24
+
24
25
  # ${MARKETING_VERSION} also works
25
26
  elsif version_number =~ /\$\{([\w\-]+)\}/
26
- version_number = get_version_number_from_build_settings!(target, $1, configuration)
27
+ version_number = get_version_number_from_build_settings!(target, $1, configuration) || get_version_number_from_build_settings!(project, $1, configuration)
28
+ end
29
+
30
+ # Error out if version_number is not set
31
+ if version_number.nil?
32
+ UI.user_error!("Unable to find Xcode build setting: #{$1}")
27
33
  end
28
34
 
29
35
  # Store the number in the shared hash
@@ -81,7 +87,7 @@ module Fastlane
81
87
  end
82
88
  end
83
89
 
84
- UI.user_error!("Unable to find Xcode build setting: #{variable}")
90
+ return nil
85
91
  end
86
92
 
87
93
  def self.get_plist!(folder, target, configuration = nil)
@@ -20,10 +20,12 @@ module Fastlane
20
20
  sonar_scanner_args << "-Dsonar.sourceEncoding=\"#{params[:source_encoding]}\"" if params[:source_encoding]
21
21
  sonar_scanner_args << "-Dsonar.login=\"#{params[:sonar_login]}\"" if params[:sonar_login]
22
22
  sonar_scanner_args << "-Dsonar.host.url=\"#{params[:sonar_url]}\"" if params[:sonar_url]
23
+ sonar_scanner_args << "-Dsonar.organization=\"#{params[:sonar_organization]}\"" if params[:sonar_organization]
23
24
  sonar_scanner_args << "-Dsonar.branch.name=\"#{params[:branch_name]}\"" if params[:branch_name]
24
25
  sonar_scanner_args << "-Dsonar.pullrequest.branch=\"#{params[:pull_request_branch]}\"" if params[:pull_request_branch]
25
26
  sonar_scanner_args << "-Dsonar.pullrequest.base=\"#{params[:pull_request_base]}\"" if params[:pull_request_base]
26
27
  sonar_scanner_args << "-Dsonar.pullrequest.key=\"#{params[:pull_request_key]}\"" if params[:pull_request_key]
28
+
27
29
  sonar_scanner_args << params[:sonar_runner_args] if params[:sonar_runner_args]
28
30
 
29
31
  command = [
@@ -102,6 +104,11 @@ module Fastlane
102
104
  description: "Pass the url of the Sonar server",
103
105
  optional: true,
104
106
  is_string: true),
107
+ FastlaneCore::ConfigItem.new(key: :sonar_organization,
108
+ env_name: "FL_SONAR_ORGANIZATION",
109
+ description: "Key of the organization on SonarCloud",
110
+ optional: true,
111
+ is_string: true),
105
112
  FastlaneCore::ConfigItem.new(key: :branch_name,
106
113
  env_name: "FL_SONAR_RUNNER_BRANCH_NAME",
107
114
  description: "Pass the branch name which is getting scanned",
@@ -144,6 +151,15 @@ module Fastlane
144
151
  project_version: "1.0",
145
152
  project_name: "iOS - AwesomeApp",
146
153
  sources_path: File.expand_path("../AwesomeApp")
154
+ )',
155
+ 'sonar(
156
+ project_key: "name.gretzki.awesomeApp",
157
+ project_version: "1.0",
158
+ project_name: "iOS - AwesomeApp",
159
+ sources_path: File.expand_path("../AwesomeApp"),
160
+ sonar_organization: "myOrg",
161
+ sonar_login: "123456abcdef",
162
+ sonar_url: "https://sonarcloud.io"
147
163
  )'
148
164
  ]
149
165
  end
@@ -33,7 +33,7 @@ module Fastlane
33
33
  req.url("/api/upload/")
34
34
  req.body = options
35
35
  end
36
- rescue Faraday::Error::TimeoutError
36
+ rescue Faraday::TimeoutError
37
37
  UI.crash!("Uploading build to TestFairy timed out ⏳")
38
38
  end
39
39
  end
@@ -10,18 +10,10 @@ module Fastlane
10
10
  def self.run(options)
11
11
  return if options[:no_update] # this is used to update itself
12
12
 
13
- tools_to_update = options[:tools].split(',') unless options[:tools].nil?
14
- tools_to_update ||= all_installed_tools
15
-
16
- if tools_to_update.count == 0
17
- UI.error("No tools specified or couldn't find any installed fastlane.tools")
18
- return
19
- end
20
-
13
+ tools_to_update = ALL_TOOLS
21
14
  UI.message("Looking for updates for #{tools_to_update.join(', ')}...")
22
15
 
23
16
  updater = Gem::CommandManager.instance[:update]
24
- updater.options[:prerelease] = true if options[:nightly]
25
17
  cleaner = Gem::CommandManager.instance[:cleanup]
26
18
 
27
19
  gem_dir = ENV['GEM_HOME'] || Gem.dir
@@ -49,7 +41,6 @@ module Fastlane
49
41
 
50
42
  if update_needed.count == 0
51
43
  UI.success("Nothing to update ✅")
52
- show_information_about_nightly_builds unless options[:nightly]
53
44
  return
54
45
  end
55
46
 
@@ -58,18 +49,13 @@ module Fastlane
58
49
 
59
50
  update_needed.each do |tool_info|
60
51
  tool = tool_info[0]
61
- gem_version = tool_info[1]
62
52
  local_version = Gem::Version.new(highest_versions[tool].version)
63
53
  latest_official_version = FastlaneCore::UpdateChecker.fetch_latest(tool)
64
54
 
65
- if options[:nightly]
66
- UI.message("Updating #{tool} from #{local_version.to_s.yellow} to nightly build #{gem_version.to_s.yellow}... (last official release #{latest_official_version.to_s.yellow}) 🚀")
67
- else
68
- UI.message("Updating #{tool} from #{local_version.to_s.yellow} to #{latest_official_version.to_s.yellow}... 🚀")
69
- end
55
+ UI.message("Updating #{tool} from #{local_version.to_s.yellow} to #{latest_official_version.to_s.yellow}... 🚀")
70
56
 
71
57
  # Approximate_recommendation will create a string like "~> 0.10" from a version 0.10.0, e.g. one that is valid for versions >= 0.10 and <1.0
72
- requirement_version = options[:nightly] ? gem_version : local_version.approximate_recommendation
58
+ requirement_version = local_version.approximate_recommendation
73
59
  updater.update_gem(tool, Gem::Requirement.new(requirement_version))
74
60
 
75
61
  UI.success("Finished updating #{tool}")
@@ -79,34 +65,12 @@ module Fastlane
79
65
  cleaner.options[:args] = tools_to_update
80
66
  cleaner.execute
81
67
 
82
- if options[:nightly]
83
- UI.success("Thanks for using fastlane's nightly builds! This makes it easier for everyone to detect regressions earlier.")
84
- UI.success("Please submit an issue on GitHub if anything behaves differently than it should 🍪")
85
- else
86
- show_information_about_nightly_builds
87
- end
88
-
89
68
  UI.message("fastlane.tools successfully updated! I will now restart myself... 😴")
90
69
 
91
70
  # Set no_update to true so we don't try to update again
92
71
  exec("FL_NO_UPDATE=true #{$PROGRAM_NAME} #{ARGV.join(' ')}")
93
72
  end
94
73
 
95
- def self.show_information_about_nightly_builds
96
- UI.message("")
97
- UI.message("Please help us test early releases of fastlane by opting into nightly builds 🌃")
98
- UI.message("Just replace your `update_fastlane` call with")
99
- UI.message("")
100
- UI.command_output("update_fastlane(nightly: true)")
101
- UI.message("")
102
- UI.message("Nightly builds are reviewed and tested just like the public releases 🚂")
103
- UI.message("")
104
- end
105
-
106
- def self.all_installed_tools
107
- Gem::Specification.select { |s| ALL_TOOLS.include?(s.name) }.map(&:name).uniq
108
- end
109
-
110
74
  def self.description
111
75
  "Makes sure fastlane-tools are up-to-date when running fastlane"
112
76
  end
@@ -134,21 +98,17 @@ module Fastlane
134
98
 
135
99
  def self.available_options
136
100
  [
137
- FastlaneCore::ConfigItem.new(key: :nightly,
138
- env_name: "FL_UPDATE_FASTLANE_NIGHTLY",
139
- description: "Opt-in to install and use nightly fastlane builds",
140
- is_string: false,
141
- default_value: false),
142
101
  FastlaneCore::ConfigItem.new(key: :no_update,
143
102
  env_name: "FL_NO_UPDATE",
144
103
  description: "Don't update during this run. This is used internally",
145
104
  is_string: false,
146
105
  default_value: false),
147
- FastlaneCore::ConfigItem.new(key: :tools,
148
- env_name: "FL_TOOLS_TO_UPDATE",
149
- description: "Comma separated list of fastlane tools to update (e.g. `fastlane,deliver,sigh`)",
150
- deprecated: true,
151
- optional: true)
106
+ FastlaneCore::ConfigItem.new(key: :nightly,
107
+ env_name: "FL_UPDATE_FASTLANE_NIGHTLY",
108
+ description: "Opt-in to install and use nightly fastlane builds",
109
+ is_string: false,
110
+ default_value: false,
111
+ deprecated: "Nightly builds are no longer being made available")
152
112
  ]
153
113
  end
154
114
 
@@ -0,0 +1,94 @@
1
+ module Fastlane
2
+ module Actions
3
+ module SharedValues
4
+ KEYCHAIN_ACCESS_GROUPS = :KEYCHAIN_ACCESS_GROUPS
5
+ end
6
+
7
+ class UpdateKeychainAccessGroupsAction < Action
8
+ require 'plist'
9
+
10
+ def self.run(params)
11
+ UI.message("Entitlements File: #{params[:entitlements_file]}")
12
+ UI.message("New keychain access groups: #{params[:identifiers]}")
13
+
14
+ entitlements_file = params[:entitlements_file]
15
+ UI.user_error!("Could not find entitlements file at path '#{entitlements_file}'") unless File.exist?(entitlements_file)
16
+
17
+ # parse entitlements
18
+ result = Plist.parse_xml(entitlements_file)
19
+ UI.user_error!("Entitlements file at '#{entitlements_file}' cannot be parsed.") unless result
20
+
21
+ # keychain access groups key
22
+ keychain_access_groups_key = 'keychain-access-groups'
23
+
24
+ # get keychain access groups
25
+ keychain_access_groups_field = result[keychain_access_groups_key]
26
+ UI.user_error!("No existing keychain access groups field specified. Please specify an keychain access groups in the entitlements file.") unless keychain_access_groups_field
27
+
28
+ # set new keychain access groups
29
+ UI.message("Old keychain access groups: #{keychain_access_groups_field}")
30
+ result[keychain_access_groups_key] = params[:identifiers]
31
+
32
+ # save entitlements file
33
+ result.save_plist(entitlements_file)
34
+ UI.message("New keychain access groups: #{result[keychain_access_groups_key]}")
35
+
36
+ Actions.lane_context[SharedValues::KEYCHAIN_ACCESS_GROUPS] = result[keychain_access_groups_key]
37
+ end
38
+
39
+ def self.description
40
+ "This action changes the keychain access groups in the entitlements file"
41
+ end
42
+
43
+ def self.details
44
+ "Updates the Keychain Group Access Groups in the given Entitlements file, so you can have keychain access groups for the app store build and keychain access groups for an enterprise build."
45
+ end
46
+
47
+ def self.available_options
48
+ [
49
+ FastlaneCore::ConfigItem.new(key: :entitlements_file,
50
+ env_name: "FL_UPDATE_KEYCHAIN_ACCESS_GROUPS_ENTITLEMENTS_FILE_PATH", # The name of the environment variable
51
+ description: "The path to the entitlement file which contains the keychain access groups", # a short description of this parameter
52
+ verify_block: proc do |value|
53
+ UI.user_error!("Please pass a path to an entitlements file. ") unless value.include?(".entitlements")
54
+ UI.user_error!("Could not find entitlements file") if !File.exist?(value) && !Helper.test?
55
+ end),
56
+ FastlaneCore::ConfigItem.new(key: :identifiers,
57
+ env_name: "FL_UPDATE_KEYCHAIN_ACCESS_GROUPS_IDENTIFIERS",
58
+ description: "An Array of unique identifiers for the keychain access groups. Eg. ['your.keychain.access.groups.identifiers']",
59
+ is_string: false,
60
+ verify_block: proc do |value|
61
+ UI.user_error!("The parameter identifiers need to be an Array.") unless value.kind_of?(Array)
62
+ end)
63
+ ]
64
+ end
65
+
66
+ def self.output
67
+ [
68
+ ['KEYCHAIN_ACCESS_GROUPS', 'The new Keychain Access Groups']
69
+ ]
70
+ end
71
+
72
+ def self.authors
73
+ ["yutae"]
74
+ end
75
+
76
+ def self.is_supported?(platform)
77
+ platform == :ios
78
+ end
79
+
80
+ def self.example_code
81
+ [
82
+ 'update_keychain_access_groups(
83
+ entitlements_file: "/path/to/entitlements_file.entitlements",
84
+ identifiers: ["your.keychain.access.groups.identifiers"]
85
+ )'
86
+ ]
87
+ end
88
+
89
+ def self.category
90
+ :project
91
+ end
92
+ end
93
+ end
94
+ end
@@ -211,7 +211,7 @@ module Fastlane
211
211
  "OS" => os_version,
212
212
  "Ruby" => RUBY_VERSION,
213
213
  "Bundler?" => Helper.bundler?,
214
- "Git" => `git --version`.strip.split("\n").first,
214
+ "Git" => git_version,
215
215
  "Installation Source" => anonymized_path($PROGRAM_NAME),
216
216
  "Host" => "#{product} #{version} (#{build})",
217
217
  "Ruby Lib Dir" => anonymized_path(RbConfig::CONFIG['libdir']),
@@ -293,5 +293,11 @@ module Fastlane
293
293
  require 'open3'
294
294
  Open3.popen3('pbcopy') { |input, _, _| input << string }
295
295
  end
296
+
297
+ def self.git_version
298
+ return `git --version`.strip.split("\n").first
299
+ rescue
300
+ return "not found"
301
+ end
296
302
  end
297
303
  end
@@ -195,6 +195,7 @@ module Fastlane
195
195
  # sh("ls")
196
196
  # sh("ls", log: false)
197
197
  # sh(command: "ls")
198
+ # sh(command: "ls", step_name: "listing the files")
198
199
  # sh(command: "ls", log: false)
199
200
  def sh(*args, &b)
200
201
  # First accepts hash (or named keywords) like other actions
@@ -212,8 +213,8 @@ module Fastlane
212
213
  end
213
214
  end
214
215
 
215
- def self.sh(*command, log: true, error_callback: nil, &b)
216
- command_header = log ? Actions.shell_command_from_args(*command) : "shell command"
216
+ def self.sh(*command, step_name: nil, log: true, error_callback: nil, &b)
217
+ command_header = log ? step_name || Actions.shell_command_from_args(*command) : "shell command"
217
218
  Actions.execute_action(command_header) do
218
219
  Actions.sh_no_action(*command, log: log, error_callback: error_callback, &b)
219
220
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.133.0'.freeze
2
+ VERSION = '2.134.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
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.133.0
21
+ // Generated with fastlane 2.134.0
@@ -1487,6 +1487,7 @@ func captureScreenshots(workspace: String? = nil,
1487
1487
  - useSsh: Use SSH for downloading GitHub repositories
1488
1488
  - useSubmodules: Add dependencies as Git submodules
1489
1489
  - useBinaries: Check out dependency repositories even when prebuilt frameworks exist
1490
+ - noCheckout: When bootstrapping Carthage do not checkout
1490
1491
  - noBuild: When bootstrapping Carthage do not build
1491
1492
  - noSkipCurrent: Don't skip building the Carthage project (in addition to its dependencies)
1492
1493
  - derivedData: Use derived data folder at path
@@ -1507,6 +1508,7 @@ func carthage(command: String = "bootstrap",
1507
1508
  useSsh: Bool? = nil,
1508
1509
  useSubmodules: Bool? = nil,
1509
1510
  useBinaries: Bool? = nil,
1511
+ noCheckout: Bool? = nil,
1510
1512
  noBuild: Bool? = nil,
1511
1513
  noSkipCurrent: Bool? = nil,
1512
1514
  derivedData: String? = nil,
@@ -1526,6 +1528,7 @@ func carthage(command: String = "bootstrap",
1526
1528
  RubyCommand.Argument(name: "use_ssh", value: useSsh),
1527
1529
  RubyCommand.Argument(name: "use_submodules", value: useSubmodules),
1528
1530
  RubyCommand.Argument(name: "use_binaries", value: useBinaries),
1531
+ RubyCommand.Argument(name: "no_checkout", value: noCheckout),
1529
1532
  RubyCommand.Argument(name: "no_build", value: noBuild),
1530
1533
  RubyCommand.Argument(name: "no_skip_current", value: noSkipCurrent),
1531
1534
  RubyCommand.Argument(name: "derived_data", value: derivedData),
@@ -1799,6 +1802,7 @@ func clubmate() {
1799
1802
 
1800
1803
  - parameters:
1801
1804
  - repoUpdate: Add `--repo-update` flag to `pod install` command
1805
+ - cleanInstall: Execute a full pod installation ignoring the content of the project cache
1802
1806
  - silent: Execute command without logging output
1803
1807
  - verbose: Show more debugging information
1804
1808
  - ansi: Show output with ANSI codes
@@ -1806,12 +1810,14 @@ func clubmate() {
1806
1810
  - podfile: Explicitly specify the path to the Cocoapods' Podfile. You can either set it to the Podfile's path or to the folder containing the Podfile file
1807
1811
  - errorCallback: A callback invoked with the command output if there is a non-zero exit status
1808
1812
  - tryRepoUpdateOnError: Retry with --repo-update if action was finished with error
1809
- - clean: **DEPRECATED!** (Option removed from cocoapods) Remove SCM directories
1813
+ - deployment: Disallow any changes to the Podfile or the Podfile.lock during installation
1814
+ - clean: **DEPRECATED!** (Option renamed as clean_install) Remove SCM directories
1810
1815
  - integrate: **DEPRECATED!** (Option removed from cocoapods) Integrate the Pods libraries into the Xcode project(s)
1811
1816
 
1812
1817
  If you use [CocoaPods](http://cocoapods.org) you can use the `cocoapods` integration to run `pod install` before building your app.
1813
1818
  */
1814
1819
  func cocoapods(repoUpdate: Bool = false,
1820
+ cleanInstall: Bool = false,
1815
1821
  silent: Bool = false,
1816
1822
  verbose: Bool = false,
1817
1823
  ansi: Bool = true,
@@ -1819,9 +1825,11 @@ func cocoapods(repoUpdate: Bool = false,
1819
1825
  podfile: String? = nil,
1820
1826
  errorCallback: Any? = nil,
1821
1827
  tryRepoUpdateOnError: Bool = false,
1828
+ deployment: Bool = false,
1822
1829
  clean: Bool = true,
1823
1830
  integrate: Bool = true) {
1824
1831
  let command = RubyCommand(commandID: "", methodName: "cocoapods", className: nil, args: [RubyCommand.Argument(name: "repo_update", value: repoUpdate),
1832
+ RubyCommand.Argument(name: "clean_install", value: cleanInstall),
1825
1833
  RubyCommand.Argument(name: "silent", value: silent),
1826
1834
  RubyCommand.Argument(name: "verbose", value: verbose),
1827
1835
  RubyCommand.Argument(name: "ansi", value: ansi),
@@ -1829,6 +1837,7 @@ func cocoapods(repoUpdate: Bool = false,
1829
1837
  RubyCommand.Argument(name: "podfile", value: podfile),
1830
1838
  RubyCommand.Argument(name: "error_callback", value: errorCallback),
1831
1839
  RubyCommand.Argument(name: "try_repo_update_on_error", value: tryRepoUpdateOnError),
1840
+ RubyCommand.Argument(name: "deployment", value: deployment),
1832
1841
  RubyCommand.Argument(name: "clean", value: clean),
1833
1842
  RubyCommand.Argument(name: "integrate", value: integrate)])
1834
1843
  _ = runner.executeCommand(command)
@@ -2496,11 +2505,12 @@ func download(url: String) {
2496
2505
  - teamId: The ID of your App Store Connect team if you're in multiple teams
2497
2506
  - teamName: The name of your App Store Connect team if you're in multiple teams
2498
2507
  - platform: The app platform for dSYMs you wish to download (ios, appletvos)
2499
- - version: The app version for dSYMs you wish to download, pass in 'latest' to download only the latest build's dSYMs
2508
+ - version: The app version for dSYMs you wish to download, pass in 'latest' to download only the latest build's dSYMs or 'live' to download only the live verion dSYMs
2500
2509
  - buildNumber: The app build_number for dSYMs you wish to download
2501
2510
  - minVersion: The minimum app version for dSYMs you wish to download
2502
2511
  - outputDirectory: Where to save the download dSYMs, defaults to the current path
2503
2512
  - waitForDsymProcessing: Wait for dSYMs to process
2513
+ - waitTimeout: Number of seconds to wait for dSYMs to process
2504
2514
 
2505
2515
  This action downloads dSYM files from App Store Connect after the ipa gets re-compiled by Apple. Useful if you have Bitcode enabled.|
2506
2516
  |
@@ -2522,7 +2532,8 @@ func downloadDsyms(username: String,
2522
2532
  buildNumber: String? = nil,
2523
2533
  minVersion: String? = nil,
2524
2534
  outputDirectory: String? = nil,
2525
- waitForDsymProcessing: Bool = false) {
2535
+ waitForDsymProcessing: Bool = false,
2536
+ waitTimeout: Int = 300) {
2526
2537
  let command = RubyCommand(commandID: "", methodName: "download_dsyms", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
2527
2538
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
2528
2539
  RubyCommand.Argument(name: "team_id", value: teamId),
@@ -2532,7 +2543,8 @@ func downloadDsyms(username: String,
2532
2543
  RubyCommand.Argument(name: "build_number", value: buildNumber),
2533
2544
  RubyCommand.Argument(name: "min_version", value: minVersion),
2534
2545
  RubyCommand.Argument(name: "output_directory", value: outputDirectory),
2535
- RubyCommand.Argument(name: "wait_for_dsym_processing", value: waitForDsymProcessing)])
2546
+ RubyCommand.Argument(name: "wait_for_dsym_processing", value: waitForDsymProcessing),
2547
+ RubyCommand.Argument(name: "wait_timeout", value: waitTimeout)])
2536
2548
  _ = runner.executeCommand(command)
2537
2549
  }
2538
2550
 
@@ -6476,6 +6488,7 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
6476
6488
  - sonarRunnerArgs: Pass additional arguments to sonar-scanner. Be sure to provide the arguments with a leading `-D` e.g. FL_SONAR_RUNNER_ARGS="-Dsonar.verbose=true"
6477
6489
  - sonarLogin: Pass the Sonar Login token (e.g: xxxxxxprivate_token_XXXXbXX7e)
6478
6490
  - sonarUrl: Pass the url of the Sonar server
6491
+ - sonarOrganization: Key of the organization on SonarCloud
6479
6492
  - branchName: Pass the branch name which is getting scanned
6480
6493
  - pullRequestBranch: The name of the branch that contains the changes to be merged
6481
6494
  - pullRequestBase: The long-lived branch into which the PR will be merged
@@ -6496,6 +6509,7 @@ func sonar(projectConfigurationPath: String? = nil,
6496
6509
  sonarRunnerArgs: String? = nil,
6497
6510
  sonarLogin: String? = nil,
6498
6511
  sonarUrl: String? = nil,
6512
+ sonarOrganization: String? = nil,
6499
6513
  branchName: String? = nil,
6500
6514
  pullRequestBranch: String? = nil,
6501
6515
  pullRequestBase: String? = nil,
@@ -6510,6 +6524,7 @@ func sonar(projectConfigurationPath: String? = nil,
6510
6524
  RubyCommand.Argument(name: "sonar_runner_args", value: sonarRunnerArgs),
6511
6525
  RubyCommand.Argument(name: "sonar_login", value: sonarLogin),
6512
6526
  RubyCommand.Argument(name: "sonar_url", value: sonarUrl),
6527
+ RubyCommand.Argument(name: "sonar_organization", value: sonarOrganization),
6513
6528
  RubyCommand.Argument(name: "branch_name", value: branchName),
6514
6529
  RubyCommand.Argument(name: "pull_request_branch", value: pullRequestBranch),
6515
6530
  RubyCommand.Argument(name: "pull_request_base", value: pullRequestBase),
@@ -7164,9 +7179,8 @@ func updateAppIdentifier(xcodeproj: String,
7164
7179
  Makes sure fastlane-tools are up-to-date when running fastlane
7165
7180
 
7166
7181
  - parameters:
7167
- - nightly: Opt-in to install and use nightly fastlane builds
7168
7182
  - noUpdate: Don't update during this run. This is used internally
7169
- - tools: **DEPRECATED!** Comma separated list of fastlane tools to update (e.g. `fastlane,deliver,sigh`)
7183
+ - nightly: **DEPRECATED!** Nightly builds are no longer being made available - Opt-in to install and use nightly fastlane builds
7170
7184
 
7171
7185
  This action will update fastlane to the most recent version - major version updates will not be performed automatically, as they might include breaking changes. If an update was performed, fastlane will be restarted before the run continues.
7172
7186
 
@@ -7183,12 +7197,10 @@ func updateAppIdentifier(xcodeproj: String,
7183
7197
 
7184
7198
  Recommended usage of the `update_fastlane` action is at the top inside of the `before_all` block, before running any other action.
7185
7199
  */
7186
- func updateFastlane(nightly: Bool = false,
7187
- noUpdate: Bool = false,
7188
- tools: String? = nil) {
7189
- let command = RubyCommand(commandID: "", methodName: "update_fastlane", className: nil, args: [RubyCommand.Argument(name: "nightly", value: nightly),
7190
- RubyCommand.Argument(name: "no_update", value: noUpdate),
7191
- RubyCommand.Argument(name: "tools", value: tools)])
7200
+ func updateFastlane(noUpdate: Bool = false,
7201
+ nightly: Bool = false) {
7202
+ let command = RubyCommand(commandID: "", methodName: "update_fastlane", className: nil, args: [RubyCommand.Argument(name: "no_update", value: noUpdate),
7203
+ RubyCommand.Argument(name: "nightly", value: nightly)])
7192
7204
  _ = runner.executeCommand(command)
7193
7205
  }
7194
7206
 
@@ -7236,6 +7248,22 @@ func updateInfoPlist(xcodeproj: String? = nil,
7236
7248
  _ = runner.executeCommand(command)
7237
7249
  }
7238
7250
 
7251
+ /**
7252
+ This action changes the keychain access groups in the entitlements file
7253
+
7254
+ - parameters:
7255
+ - entitlementsFile: The path to the entitlement file which contains the keychain access groups
7256
+ - identifiers: An Array of unique identifiers for the keychain access groups. Eg. ['your.keychain.access.groups.identifiers']
7257
+
7258
+ Updates the Keychain Group Access Groups in the given Entitlements file, so you can have keychain access groups for the app store build and keychain access groups for an enterprise build.
7259
+ */
7260
+ func updateKeychainAccessGroups(entitlementsFile: String,
7261
+ identifiers: Any) {
7262
+ let command = RubyCommand(commandID: "", methodName: "update_keychain_access_groups", className: nil, args: [RubyCommand.Argument(name: "entitlements_file", value: entitlementsFile),
7263
+ RubyCommand.Argument(name: "identifiers", value: identifiers)])
7264
+ _ = runner.executeCommand(command)
7265
+ }
7266
+
7239
7267
  /**
7240
7268
  Update a plist file
7241
7269
 
@@ -8268,4 +8296,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
8268
8296
 
8269
8297
  // Please don't remove the lines below
8270
8298
  // They are used to detect outdated files
8271
- // FastlaneRunnerAPIVersion [0.9.60]
8299
+ // FastlaneRunnerAPIVersion [0.9.61]
@@ -18,4 +18,4 @@ class Gymfile: GymfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.133.0
21
+ // Generated with fastlane 2.134.0
@@ -18,4 +18,4 @@ class Matchfile: MatchfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.133.0
21
+ // Generated with fastlane 2.134.0
@@ -18,4 +18,4 @@ class Precheckfile: PrecheckfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.133.0
21
+ // Generated with fastlane 2.134.0
@@ -18,4 +18,4 @@ class Scanfile: ScanfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.133.0
21
+ // Generated with fastlane 2.134.0
@@ -18,4 +18,4 @@ class Screengrabfile: ScreengrabfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.133.0
21
+ // Generated with fastlane 2.134.0
@@ -18,4 +18,4 @@ class Snapshotfile: SnapshotfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.133.0
21
+ // Generated with fastlane 2.134.0
@@ -307,7 +307,7 @@ module FastlaneCore
307
307
  logarchive_dst = File.join(logs_destination_dir, "system_logs-#{log_identity}.logarchive").shellescape
308
308
  FileUtils.rm_rf(logarchive_dst)
309
309
  FileUtils.mkdir_p(File.expand_path("..", logarchive_dst))
310
- command = "xcrun simctl spawn #{device.udid} log collect --output #{logarchive_dst} 2>/dev/null"
310
+ command = "xcrun simctl spawn --standalone #{device.udid} log collect --output #{logarchive_dst} 2>/dev/null"
311
311
  FastlaneCore::CommandExecutor.execute(command: command, print_all: false, print_command: true)
312
312
  end
313
313
  end
@@ -17,7 +17,7 @@ module Match
17
17
  UI.user_error!("Certificate does not exist at path: #{cert_path}") unless File.exist?(cert_path)
18
18
  UI.user_error!("Private key does not exist at path: #{p12_path}") unless File.exist?(p12_path)
19
19
 
20
- # Base64 encrypt contents to find match from API to find a cert ID
20
+ # Base64 encode contents to find match from API to find a cert ID
21
21
  cert_contents_base_64 = Base64.strict_encode64(File.open(cert_path).read)
22
22
 
23
23
  # Storage
@@ -6,8 +6,13 @@ module Scan
6
6
  class << self
7
7
  # @param [String] The output of the errored build
8
8
  # This method should raise an exception in any case, as the return code indicated a failed build
9
- def handle_build_error(output)
10
- # The order of the handling below is import
9
+ def handle_build_error(output, log_path)
10
+ # The order of the handling below is important
11
+
12
+ instruction = 'See the log'
13
+ location = Scan.config[:suppress_xcode_output] ? "here: '#{log_path}'" : "above"
14
+ details = "#{instruction} #{location}."
15
+
11
16
  case output
12
17
  when /US\-ASCII/
13
18
  print("Your shell environment is not correctly configured")
@@ -23,7 +28,7 @@ module Scan
23
28
  print("For more information visit this stackoverflow answer:")
24
29
  print("https://stackoverflow.com/a/17031697/445598")
25
30
  when /Testing failed/
26
- UI.build_failure!("Error building the application - see the log above")
31
+ UI.build_failure!("Error building the application. #{details}")
27
32
  when /Executed/, /Failing tests:/
28
33
  # this is *really* important:
29
34
  # we don't want to raise an exception here
@@ -38,7 +43,7 @@ module Scan
38
43
  # followed by a list of tests that failed.
39
44
  return
40
45
  end
41
- UI.build_failure!("Error building/testing the application - see the log above")
46
+ UI.build_failure!("Error building/testing the application. #{details}")
42
47
  end
43
48
 
44
49
  private
@@ -67,7 +67,7 @@ module Scan
67
67
  error: proc do |error_output|
68
68
  begin
69
69
  exit_status = $?.exitstatus
70
- ErrorHandler.handle_build_error(error_output)
70
+ ErrorHandler.handle_build_error(error_output, @test_command_generator.xcodebuild_log_path)
71
71
  rescue => ex
72
72
  SlackPoster.new.run({
73
73
  build_errors: 1
@@ -619,8 +619,8 @@ module Spaceship
619
619
  def with_retry(tries = 5, &_block)
620
620
  return yield
621
621
  rescue \
622
- Faraday::Error::ConnectionFailed,
623
- Faraday::Error::TimeoutError, # New Faraday version: Faraday::TimeoutError => ex
622
+ Faraday::ConnectionFailed,
623
+ Faraday::TimeoutError,
624
624
  BadGatewayError,
625
625
  AppleTimeoutError,
626
626
  GatewayTimeoutError => ex
metadata CHANGED
@@ -1,33 +1,33 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.133.0
4
+ version: 2.134.0
5
5
  platform: ruby
6
6
  authors:
7
- - Danielle Tomlinson
8
- - Fumiya Nakamura
7
+ - Kohki Miki
9
8
  - Felix Krause
10
- - Maksym Grebenets
9
+ - Fumiya Nakamura
10
+ - Danielle Tomlinson
11
+ - Stefan Natchev
11
12
  - Helmut Januschka
13
+ - Maksym Grebenets
14
+ - Josh Holtz
15
+ - Manu Wallner
16
+ - Aaron Brager
17
+ - Matthew Ellis
18
+ - Jérôme Lacoste
19
+ - Iulian Onofrei
12
20
  - Jorge Revuelta H
13
- - Stefan Natchev
14
21
  - Andrew McBurney
15
- - Kohki Miki
16
- - Matthew Ellis
17
- - Luka Mirosevic
18
22
  - Jimmy Dee
19
- - Manu Wallner
20
23
  - Olivier Halligon
21
24
  - Joshua Liebowitz
25
+ - Luka Mirosevic
22
26
  - Jan Piotrowski
23
- - Josh Holtz
24
- - Iulian Onofrei
25
- - Jérôme Lacoste
26
- - Aaron Brager
27
27
  autorequire:
28
28
  bindir: bin
29
29
  cert_chain: []
30
- date: 2019-10-02 00:00:00.000000000 Z
30
+ date: 2019-10-14 00:00:00.000000000 Z
31
31
  dependencies:
32
32
  - !ruby/object:Gem::Dependency
33
33
  name: slack-notifier
@@ -340,47 +340,47 @@ dependencies:
340
340
  - !ruby/object:Gem::Version
341
341
  version: 1.0.0
342
342
  - !ruby/object:Gem::Dependency
343
- name: faraday
343
+ name: faraday-cookie_jar
344
344
  requirement: !ruby/object:Gem::Requirement
345
345
  requirements:
346
- - - "<"
346
+ - - "~>"
347
347
  - !ruby/object:Gem::Version
348
- version: 0.16.0
348
+ version: 0.0.6
349
349
  type: :runtime
350
350
  prerelease: false
351
351
  version_requirements: !ruby/object:Gem::Requirement
352
352
  requirements:
353
- - - "<"
353
+ - - "~>"
354
354
  - !ruby/object:Gem::Version
355
- version: 0.16.0
355
+ version: 0.0.6
356
356
  - !ruby/object:Gem::Dependency
357
- name: faraday_middleware
357
+ name: faraday
358
358
  requirement: !ruby/object:Gem::Requirement
359
359
  requirements:
360
- - - "<"
360
+ - - "~>"
361
361
  - !ruby/object:Gem::Version
362
- version: 0.16.0
362
+ version: '0.17'
363
363
  type: :runtime
364
364
  prerelease: false
365
365
  version_requirements: !ruby/object:Gem::Requirement
366
366
  requirements:
367
- - - "<"
367
+ - - "~>"
368
368
  - !ruby/object:Gem::Version
369
- version: 0.16.0
369
+ version: '0.17'
370
370
  - !ruby/object:Gem::Dependency
371
- name: faraday-cookie_jar
371
+ name: faraday_middleware
372
372
  requirement: !ruby/object:Gem::Requirement
373
373
  requirements:
374
374
  - - "~>"
375
375
  - !ruby/object:Gem::Version
376
- version: 0.0.6
376
+ version: 0.13.1
377
377
  type: :runtime
378
378
  prerelease: false
379
379
  version_requirements: !ruby/object:Gem::Requirement
380
380
  requirements:
381
381
  - - "~>"
382
382
  - !ruby/object:Gem::Version
383
- version: 0.0.6
383
+ version: 0.13.1
384
384
  - !ruby/object:Gem::Dependency
385
385
  name: fastimage
386
386
  requirement: !ruby/object:Gem::Requirement
@@ -986,6 +986,7 @@ files:
986
986
  - fastlane/lib/fastlane.rb
987
987
  - fastlane/lib/fastlane/action.rb
988
988
  - fastlane/lib/fastlane/action_collector.rb
989
+ - fastlane/lib/fastlane/actions/.download_dsyms.rb.swp
989
990
  - fastlane/lib/fastlane/actions/.hockey.rb.swp
990
991
  - fastlane/lib/fastlane/actions/.slack.rb.swp
991
992
  - fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp
@@ -1198,6 +1199,7 @@ files:
1198
1199
  - fastlane/lib/fastlane/actions/update_fastlane.rb
1199
1200
  - fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb
1200
1201
  - fastlane/lib/fastlane/actions/update_info_plist.rb
1202
+ - fastlane/lib/fastlane/actions/update_keychain_access_groups.rb
1201
1203
  - fastlane/lib/fastlane/actions/update_plist.rb
1202
1204
  - fastlane/lib/fastlane/actions/update_project_code_signing.rb
1203
1205
  - fastlane/lib/fastlane/actions/update_project_provisioning.rb
@@ -1423,7 +1425,6 @@ files:
1423
1425
  - gym/lib/assets/GymfileTemplate.swift
1424
1426
  - gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh
1425
1427
  - gym/lib/gym.rb
1426
- - gym/lib/gym/.runner.rb.swp
1427
1428
  - gym/lib/gym/code_signing_mapping.rb
1428
1429
  - gym/lib/gym/commands_generator.rb
1429
1430
  - gym/lib/gym/detect_values.rb
Binary file