fastlane 2.153.1 → 2.154.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +76 -76
  3. data/deliver/lib/deliver/setup.rb +1 -3
  4. data/deliver/lib/deliver/upload_metadata.rb +21 -4
  5. data/fastlane/lib/fastlane/actions/carthage.rb +7 -0
  6. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +21 -2
  7. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +3 -3
  8. data/fastlane/lib/fastlane/actions/git_pull.rb +13 -2
  9. data/fastlane/lib/fastlane/version.rb +1 -1
  10. data/fastlane/swift/Deliverfile.swift +1 -1
  11. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  12. data/fastlane/swift/Fastlane.swift +29 -7
  13. data/fastlane/swift/Gymfile.swift +1 -1
  14. data/fastlane/swift/GymfileProtocol.swift +1 -1
  15. data/fastlane/swift/Matchfile.swift +1 -1
  16. data/fastlane/swift/MatchfileProtocol.swift +5 -1
  17. data/fastlane/swift/Precheckfile.swift +1 -1
  18. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  19. data/fastlane/swift/Scanfile.swift +1 -1
  20. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  21. data/fastlane/swift/Screengrabfile.swift +1 -1
  22. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  23. data/fastlane/swift/Snapshotfile.swift +1 -1
  24. data/fastlane/swift/SnapshotfileProtocol.swift +5 -1
  25. data/fastlane_core/lib/fastlane_core/device_manager.rb +7 -2
  26. data/frameit/lib/frameit/editor.rb +3 -1
  27. data/gym/lib/gym/module.rb +8 -0
  28. data/gym/lib/gym/runner.rb +16 -9
  29. data/match/lib/match/options.rb +9 -2
  30. data/match/lib/match/runner.rb +1 -0
  31. data/match/lib/match/storage/git_storage.rb +16 -2
  32. data/pilot/lib/pilot/build_manager.rb +9 -0
  33. data/pilot/lib/pilot/options.rb +1 -1
  34. data/snapshot/lib/snapshot/options.rb +5 -0
  35. data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
  36. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +5 -0
  37. data/spaceship/lib/spaceship/connect_api/client.rb +1 -1
  38. data/spaceship/lib/spaceship/connect_api/models/app.rb +19 -1
  39. metadata +17 -22
  40. data/deliver/lib/deliver/.upload_metadata.rb.swp +0 -0
  41. data/frameit/lib/frameit/.editor.rb.swp +0 -0
  42. data/spaceship/lib/spaceship/connect_api/.model.rb.swp +0 -0
  43. data/spaceship/lib/spaceship/connect_api/models/.app_store_review_detail.rb.swp +0 -0
  44. data/spaceship/lib/spaceship/connect_api/models/.app_store_version.rb.swp +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e8ded0a27a24b34693df005ae49f1866ecd96573336f2216b17e3e9a9f6a9c97
4
- data.tar.gz: 7958ef7f729f86faea27e7dd77a4c55e2aaeb6cc9f2e6e3fdc754d7100207e8a
3
+ metadata.gz: 70c5a33bcf7a92f427b7c09b26e1269a00807a2975f484c6be1159df830a0ffb
4
+ data.tar.gz: 36610a4cd508042f7a9632fe30088e84609b805bb6722f5b2752589a69cce12a
5
5
  SHA512:
6
- metadata.gz: dc3ab6b3872cd679542b4f8555e6ebae1ae7c55c6796d77cc26e1e881fd160b7f861c8fd0379eb1106b3bc59708b11db41125de07c331fd5be9f2956ecc69e41
7
- data.tar.gz: 485bcd979b5976d3de11ec02e8a5fcb3dbf24288e2c3222c140b2f468fd5539c6b09aeeb1a1f2185955aee6c001467256b1e0ef4dca5dcdf8c9e74a91dfdb27e
6
+ metadata.gz: 6195726b19d99f0d0b7b8980e2facb389f18189bbba530d09d7dabdc60c6959e1a00b7bc4c4f8c43a0b6bdfc4211d580909ef8e941a83fb061583bae1eec0cae
7
+ data.tar.gz: f0854bb26324cb229428f971159d2b7713fb137ef5c37dff1eee843bb52652afc3bf4621bf98aa0438b94fa476971bd064546ad4a5780108dba4475f438c74a8
data/README.md CHANGED
@@ -34,23 +34,29 @@ 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='stefan-natchev'>
38
- <a href='https://github.com/snatchev'>
39
- <img src='https://github.com/snatchev.png?size=140'>
37
+ <td id='jérôme-lacoste'>
38
+ <a href='https://github.com/lacostej'>
39
+ <img src='https://github.com/lacostej.png?size=140'>
40
40
  </a>
41
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
41
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
42
42
  </td>
43
- <td id='jorge-revuelta-h'>
44
- <a href='https://github.com/minuscorp'>
45
- <img src='https://github.com/minuscorp.png?size=140'>
43
+ <td id='kohki-miki'>
44
+ <a href='https://github.com/giginet'>
45
+ <img src='https://github.com/giginet.png?size=140'>
46
46
  </a>
47
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
47
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
48
48
  </td>
49
- <td id='manu-wallner'>
50
- <a href='https://github.com/milch'>
51
- <img src='https://github.com/milch.png?size=140'>
49
+ <td id='maksym-grebenets'>
50
+ <a href='https://github.com/mgrebenets'>
51
+ <img src='https://github.com/mgrebenets.png?size=140'>
52
52
  </a>
53
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
53
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
54
+ </td>
55
+ <td id='daniel-jankowski'>
56
+ <a href='https://github.com/mollyIV'>
57
+ <img src='https://github.com/mollyIV.png?size=140'>
58
+ </a>
59
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
54
60
  </td>
55
61
  <td id='olivier-halligon'>
56
62
  <a href='https://github.com/AliSoftware'>
@@ -58,31 +64,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
58
64
  </a>
59
65
  <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
60
66
  </td>
61
- <td id='aaron-brager'>
62
- <a href='https://github.com/getaaron'>
63
- <img src='https://github.com/getaaron.png?size=140'>
64
- </a>
65
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
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'>
69
+ <td id='stefan-natchev'>
70
+ <a href='https://github.com/snatchev'>
71
+ <img src='https://github.com/snatchev.png?size=140'>
72
72
  </a>
73
- <h4 align='center'>Jimmy Dee</h4>
73
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
74
74
  </td>
75
- <td id='max-ott'>
76
- <a href='https://github.com/max-ott'>
77
- <img src='https://github.com/max-ott.png?size=140'>
75
+ <td id='jan-piotrowski'>
76
+ <a href='https://github.com/janpio'>
77
+ <img src='https://github.com/janpio.png?size=140'>
78
78
  </a>
79
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
79
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
80
80
  </td>
81
- <td id='maksym-grebenets'>
82
- <a href='https://github.com/mgrebenets'>
83
- <img src='https://github.com/mgrebenets.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/mgrebenets'>Maksym Grebenets</a></h4>
85
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
86
86
  </td>
87
87
  <td id='fumiya-nakamura'>
88
88
  <a href='https://github.com/nafu'>
@@ -90,83 +90,83 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
90
90
  </a>
91
91
  <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
92
92
  </td>
93
- <td id='felix-krause'>
94
- <a href='https://github.com/KrauseFx'>
95
- <img src='https://github.com/KrauseFx.png?size=140'>
93
+ <td id='iulian-onofrei'>
94
+ <a href='https://github.com/revolter'>
95
+ <img src='https://github.com/revolter.png?size=140'>
96
96
  </a>
97
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
97
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
98
98
  </td>
99
99
  </tr>
100
100
  <tr>
101
+ <td id='danielle-tomlinson'>
102
+ <a href='https://github.com/endocrimes'>
103
+ <img src='https://github.com/endocrimes.png?size=140'>
104
+ </a>
105
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
106
+ </td>
101
107
  <td id='josh-holtz'>
102
108
  <a href='https://github.com/joshdholtz'>
103
109
  <img src='https://github.com/joshdholtz.png?size=140'>
104
110
  </a>
105
111
  <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
106
112
  </td>
107
- <td id='jérôme-lacoste'>
108
- <a href='https://github.com/lacostej'>
109
- <img src='https://github.com/lacostej.png?size=140'>
110
- </a>
111
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
112
- </td>
113
- <td id='helmut-januschka'>
114
- <a href='https://github.com/hjanuschka'>
115
- <img src='https://github.com/hjanuschka.png?size=140'>
113
+ <td id='jimmy-dee'>
114
+ <a href='https://github.com/jdee'>
115
+ <img src='https://github.com/jdee.png?size=140'>
116
116
  </a>
117
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
117
+ <h4 align='center'>Jimmy Dee</h4>
118
118
  </td>
119
- <td id='kohki-miki'>
120
- <a href='https://github.com/giginet'>
121
- <img src='https://github.com/giginet.png?size=140'>
119
+ <td id='joshua-liebowitz'>
120
+ <a href='https://github.com/taquitos'>
121
+ <img src='https://github.com/taquitos.png?size=140'>
122
122
  </a>
123
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
123
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
124
124
  </td>
125
- <td id='matthew-ellis'>
126
- <a href='https://github.com/matthewellis'>
127
- <img src='https://github.com/matthewellis.png?size=140'>
125
+ <td id='andrew-mcburney'>
126
+ <a href='https://github.com/armcburney'>
127
+ <img src='https://github.com/armcburney.png?size=140'>
128
128
  </a>
129
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
129
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
130
130
  </td>
131
131
  </tr>
132
132
  <tr>
133
- <td id='jan-piotrowski'>
134
- <a href='https://github.com/janpio'>
135
- <img src='https://github.com/janpio.png?size=140'>
133
+ <td id='manu-wallner'>
134
+ <a href='https://github.com/milch'>
135
+ <img src='https://github.com/milch.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/acrooow'>Manu Wallner</a></h4>
138
138
  </td>
139
- <td id='danielle-tomlinson'>
140
- <a href='https://github.com/endocrimes'>
141
- <img src='https://github.com/endocrimes.png?size=140'>
139
+ <td id='matthew-ellis'>
140
+ <a href='https://github.com/matthewellis'>
141
+ <img src='https://github.com/matthewellis.png?size=140'>
142
142
  </a>
143
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
143
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
144
144
  </td>
145
- <td id='daniel-jankowski'>
146
- <a href='https://github.com/mollyIV'>
147
- <img src='https://github.com/mollyIV.png?size=140'>
145
+ <td id='felix-krause'>
146
+ <a href='https://github.com/KrauseFx'>
147
+ <img src='https://github.com/KrauseFx.png?size=140'>
148
148
  </a>
149
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
149
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
150
150
  </td>
151
- <td id='joshua-liebowitz'>
152
- <a href='https://github.com/taquitos'>
153
- <img src='https://github.com/taquitos.png?size=140'>
151
+ <td id='jorge-revuelta-h'>
152
+ <a href='https://github.com/minuscorp'>
153
+ <img src='https://github.com/minuscorp.png?size=140'>
154
154
  </a>
155
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
155
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
156
156
  </td>
157
- <td id='andrew-mcburney'>
158
- <a href='https://github.com/armcburney'>
159
- <img src='https://github.com/armcburney.png?size=140'>
157
+ <td id='aaron-brager'>
158
+ <a href='https://github.com/getaaron'>
159
+ <img src='https://github.com/getaaron.png?size=140'>
160
160
  </a>
161
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
161
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
162
162
  </td>
163
163
  </tr>
164
164
  <tr>
165
- <td id='iulian-onofrei'>
166
- <a href='https://github.com/revolter'>
167
- <img src='https://github.com/revolter.png?size=140'>
165
+ <td id='max-ott'>
166
+ <a href='https://github.com/max-ott'>
167
+ <img src='https://github.com/max-ott.png?size=140'>
168
168
  </a>
169
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
169
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
170
170
  </td>
171
171
  <td id='luka-mirosevic'>
172
172
  <a href='https://github.com/lmirosevic'>
@@ -130,14 +130,12 @@ module Deliver
130
130
  end # errors if doesn't exist
131
131
  UploadMetadata::REVIEW_INFORMATION_VALUES.each do |file_key, attribute_name|
132
132
  if app_store_review_detail
133
- content = app_store_review_detail.send(attribute_name)
133
+ content = app_store_review_detail.send(attribute_name) || ""
134
134
  else
135
135
  content = ""
136
136
  end
137
137
  content += "\n"
138
138
 
139
- file_key = UploadMetadata::REVIEW_INFORMATION_VALUES_LEGACY.key(file_key)
140
-
141
139
  base_dir = File.join(path, UploadMetadata::REVIEW_INFORMATION_DIR)
142
140
  resulting_path = File.join(base_dir, "#{file_key}.txt")
143
141
  FileUtils.mkdir_p(File.expand_path('..', resulting_path))
@@ -507,13 +507,30 @@ module Deliver
507
507
  end
508
508
 
509
509
  # Load review information
510
- options[:app_review_information] ||= {}
511
- REVIEW_INFORMATION_VALUES.keys.each do |option_name|
510
+ # This is used to find the file path for both new and legacy review information filenames
511
+ resolve_review_info_path = lambda do |option_name|
512
512
  path = File.join(options[:metadata_path], REVIEW_INFORMATION_DIR, "#{option_name}.txt")
513
- next unless File.exist?(path)
514
- next if options[:app_review_information][option_name].to_s.length > 0
513
+ return nil unless File.exist?(path)
514
+ return nil if options[:app_review_information][option_name].to_s.length > 0
515
515
 
516
516
  UI.message("Loading '#{path}'...")
517
+ return path
518
+ end
519
+
520
+ # First try and load review information from legacy filenames
521
+ options[:app_review_information] ||= {}
522
+ REVIEW_INFORMATION_VALUES_LEGACY.each do |legacy_option_name, option_name|
523
+ path = resolve_review_info_path.call(legacy_option_name)
524
+ next if path.nil?
525
+ options[:app_review_information][option_name] ||= File.read(path)
526
+
527
+ UI.deprecated("Review rating option '#{legacy_option_name}' from iTunesConnect has been deprecated. Please replace with '#{option_name}'")
528
+ end
529
+
530
+ # Then load review information from new App Store Connect filenames
531
+ REVIEW_INFORMATION_VALUES.keys.each do |option_name|
532
+ path = resolve_review_info_path.call(option_name)
533
+ next if path.nil?
517
534
  options[:app_review_information][option_name] ||= File.read(path)
518
535
  end
519
536
  end
@@ -20,6 +20,7 @@ module Fastlane
20
20
  cmd << "--output #{params[:output]}" if params[:output]
21
21
  cmd << "--use-ssh" if params[:use_ssh]
22
22
  cmd << "--use-submodules" if params[:use_submodules]
23
+ cmd << "--use-netrc" if params[:use_netrc]
23
24
  cmd << "--no-use-binaries" if params[:use_binaries] == false
24
25
  cmd << "--no-checkout" if params[:no_checkout] == true
25
26
  cmd << "--no-build" if params[:no_build] == true
@@ -89,6 +90,12 @@ module Fastlane
89
90
  is_string: false,
90
91
  type: Boolean,
91
92
  optional: true),
93
+ FastlaneCore::ConfigItem.new(key: :use_netrc,
94
+ env_name: "FL_CARTHAGE_USE_NETRC",
95
+ description: "Use .netrc for downloading frameworks",
96
+ is_string: false,
97
+ type: Boolean,
98
+ optional: true),
92
99
  FastlaneCore::ConfigItem.new(key: :use_binaries,
93
100
  env_name: "FL_CARTHAGE_USE_BINARIES",
94
101
  description: "Check out dependency repositories even when prebuilt frameworks exist",
@@ -111,6 +111,25 @@ match
111
111
 
112
112
  You can find more information about GitHub basic authentication and personal token generation here: [https://developer.github.com/v3/auth/#basic-authentication](https://developer.github.com/v3/auth/#basic-authentication)
113
113
 
114
+ ##### Git Storage on GitHub - Deploy keys
115
+
116
+ If your machine does not have a private key set up for your certificates repository, you can give _match_ a path for one:
117
+
118
+ Using parameter:
119
+
120
+ ```
121
+ match(git_private_key: '<PATH TO YOUR KEY>')
122
+ ```
123
+
124
+ Using environment variable:
125
+
126
+ ```
127
+ ENV['MATCH_GIT_PRIVATE_KEY'] = '<PATH TO YOUR KEY>'
128
+ match
129
+ ```
130
+
131
+ You can find more information about GitHub basic authentication and personal token generation here: [https://developer.github.com/v3/auth/#basic-authentication](https://developer.github.com/v3/auth/#basic-authentication)
132
+
114
133
  ##### Git Storage on Azure Devops
115
134
 
116
135
  If you're running a pipeline on Azure Devops and using git storage in a another repository on the same project, you might want to use `bearer` token authentication.
@@ -488,14 +507,14 @@ _match_ stores the certificate (`.cer`) and the private key (`.p12`) files separ
488
507
  Decrypt your cert found in `certs/<type>/<unique-id>.cer` as a pem file:
489
508
 
490
509
  ```no-highlight
491
- openssl aes-256-cbc -k "<password>" -in "certs/<type>/<unique-id>.cer" -out "cert.der" -a -d
510
+ openssl aes-256-cbc -k "<password>" -in "certs/<type>/<unique-id>.cer" -out "cert.der" -a -d -md [md5|sha256]
492
511
  openssl x509 -inform der -in cert.der -out cert.pem
493
512
  ```
494
513
 
495
514
  Decrypt your private key found in `certs/<type>/<unique-id>.p12` as a pem file:
496
515
 
497
516
  ```no-highlight
498
- openssl aes-256-cbc -k "<password>" -in "certs/distribution/<unique-id>.p12" -out "key.pem" -a -d
517
+ openssl aes-256-cbc -k "<password>" -in "certs/distribution/<unique-id>.p12" -out "key.pem" -a -d -md [md5|sha256]
499
518
  ```
500
519
 
501
520
  Generate an encrypted p12 file with the same or new password:
@@ -485,10 +485,10 @@ Key | Editable While Live | Directory | Filename
485
485
 
486
486
  ### Review Information Metadata
487
487
 
488
- Key | Editable While Live | Directory | Filename
489
- ----|--------|--------|--------
488
+ Key | Editable While Live | Directory | Filename | Deprecated Filename
489
+ ----|--------|--------|--------|--------
490
490
  <%- Deliver::UploadMetadata::REVIEW_INFORMATION_VALUES_LEGACY.each do |key, value| -%>
491
- `<%= value %>` | Yes | `<metadata_path>/<%= Deliver::UploadMetadata::REVIEW_INFORMATION_DIR %>` | `<%= value %>.txt`
491
+ `<%= value %>` | Yes | `<metadata_path>/<%= Deliver::UploadMetadata::REVIEW_INFORMATION_DIR %>` | `<%= value %>.txt` | `<%= key %>.txt`
492
492
  <%- end %>
493
493
 
494
494
  ## Reference
@@ -5,7 +5,9 @@ module Fastlane
5
5
  commands = []
6
6
 
7
7
  unless params[:only_tags]
8
- commands += ["git pull &&"]
8
+ command = "git pull"
9
+ command << " --rebase" if params[:rebase]
10
+ commands += ["#{command} &&"]
9
11
  end
10
12
 
11
13
  commands += ["git fetch --tags"]
@@ -26,6 +28,14 @@ module Fastlane
26
28
  default_value: false,
27
29
  verify_block: proc do |value|
28
30
  UI.user_error!("Please pass a valid value for only_tags. Use one of the following: true, false") unless value.kind_of?(TrueClass) || value.kind_of?(FalseClass)
31
+ end),
32
+ FastlaneCore::ConfigItem.new(key: :rebase,
33
+ description: "Rebase on top of the remote branch instead of merge",
34
+ is_string: false,
35
+ optional: true,
36
+ default_value: false,
37
+ verify_block: proc do |value|
38
+ UI.user_error!("Please pass a valid value for rebase. Use one of the following: true, false") unless value.kind_of?(TrueClass) || value.kind_of?(FalseClass)
29
39
  end)
30
40
  ]
31
41
  end
@@ -41,7 +51,8 @@ module Fastlane
41
51
  def self.example_code
42
52
  [
43
53
  'git_pull',
44
- 'git_pull(only_tags: true) # only the tags, no commits'
54
+ 'git_pull(only_tags: true) # only the tags, no commits',
55
+ 'git_pull(rebase: true) # use --rebase with pull'
45
56
  ]
46
57
  end
47
58
 
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.153.1'.freeze
2
+ VERSION = '2.154.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
@@ -14,4 +14,4 @@ class Deliverfile: DeliverfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.153.1
17
+ // Generated with fastlane 2.154.0
@@ -245,4 +245,4 @@ extension DeliverfileProtocol {
245
245
 
246
246
  // Please don't remove the lines below
247
247
  // They are used to detect outdated files
248
- // FastlaneRunnerAPIVersion [0.9.27]
248
+ // FastlaneRunnerAPIVersion [0.9.28]
@@ -1442,6 +1442,7 @@ func captureAndroidScreenshots(androidHome: String? = nil,
1442
1442
  - clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running snapshot
1443
1443
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
1444
1444
  - eraseSimulator: Enabling this option will automatically erase the simulator before running the application
1445
+ - headless: Enabling this option will prevent displaying the simulator window
1445
1446
  - overrideStatusBar: Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
1446
1447
  - localizeSimulator: Enabling this option will configure the Simulator's system language
1447
1448
  - darkMode: Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark)
@@ -1485,6 +1486,7 @@ func captureIosScreenshots(workspace: String? = nil,
1485
1486
  clearPreviousScreenshots: Bool = false,
1486
1487
  reinstallApp: Bool = false,
1487
1488
  eraseSimulator: Bool = false,
1489
+ headless: Bool = true,
1488
1490
  overrideStatusBar: Bool = false,
1489
1491
  localizeSimulator: Bool = false,
1490
1492
  darkMode: Bool? = nil,
@@ -1527,6 +1529,7 @@ func captureIosScreenshots(workspace: String? = nil,
1527
1529
  RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots),
1528
1530
  RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
1529
1531
  RubyCommand.Argument(name: "erase_simulator", value: eraseSimulator),
1532
+ RubyCommand.Argument(name: "headless", value: headless),
1530
1533
  RubyCommand.Argument(name: "override_status_bar", value: overrideStatusBar),
1531
1534
  RubyCommand.Argument(name: "localize_simulator", value: localizeSimulator),
1532
1535
  RubyCommand.Argument(name: "dark_mode", value: darkMode),
@@ -1576,6 +1579,7 @@ func captureIosScreenshots(workspace: String? = nil,
1576
1579
  - clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running snapshot
1577
1580
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
1578
1581
  - eraseSimulator: Enabling this option will automatically erase the simulator before running the application
1582
+ - headless: Enabling this option will prevent displaying the simulator window
1579
1583
  - overrideStatusBar: Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
1580
1584
  - localizeSimulator: Enabling this option will configure the Simulator's system language
1581
1585
  - darkMode: Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark)
@@ -1619,6 +1623,7 @@ func captureScreenshots(workspace: String? = nil,
1619
1623
  clearPreviousScreenshots: Bool = false,
1620
1624
  reinstallApp: Bool = false,
1621
1625
  eraseSimulator: Bool = false,
1626
+ headless: Bool = true,
1622
1627
  overrideStatusBar: Bool = false,
1623
1628
  localizeSimulator: Bool = false,
1624
1629
  darkMode: Bool? = nil,
@@ -1661,6 +1666,7 @@ func captureScreenshots(workspace: String? = nil,
1661
1666
  RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots),
1662
1667
  RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
1663
1668
  RubyCommand.Argument(name: "erase_simulator", value: eraseSimulator),
1669
+ RubyCommand.Argument(name: "headless", value: headless),
1664
1670
  RubyCommand.Argument(name: "override_status_bar", value: overrideStatusBar),
1665
1671
  RubyCommand.Argument(name: "localize_simulator", value: localizeSimulator),
1666
1672
  RubyCommand.Argument(name: "dark_mode", value: darkMode),
@@ -1699,6 +1705,7 @@ func captureScreenshots(workspace: String? = nil,
1699
1705
  - dependencies: Carthage dependencies to update, build or bootstrap
1700
1706
  - useSsh: Use SSH for downloading GitHub repositories
1701
1707
  - useSubmodules: Add dependencies as Git submodules
1708
+ - useNetrc: Use .netrc for downloading frameworks
1702
1709
  - useBinaries: Check out dependency repositories even when prebuilt frameworks exist
1703
1710
  - noCheckout: When bootstrapping Carthage do not checkout
1704
1711
  - noBuild: When bootstrapping Carthage do not build
@@ -1720,6 +1727,7 @@ func carthage(command: String = "bootstrap",
1720
1727
  dependencies: [String] = [],
1721
1728
  useSsh: Bool? = nil,
1722
1729
  useSubmodules: Bool? = nil,
1730
+ useNetrc: Bool? = nil,
1723
1731
  useBinaries: Bool? = nil,
1724
1732
  noCheckout: Bool? = nil,
1725
1733
  noBuild: Bool? = nil,
@@ -1740,6 +1748,7 @@ func carthage(command: String = "bootstrap",
1740
1748
  RubyCommand.Argument(name: "dependencies", value: dependencies),
1741
1749
  RubyCommand.Argument(name: "use_ssh", value: useSsh),
1742
1750
  RubyCommand.Argument(name: "use_submodules", value: useSubmodules),
1751
+ RubyCommand.Argument(name: "use_netrc", value: useNetrc),
1743
1752
  RubyCommand.Argument(name: "use_binaries", value: useBinaries),
1744
1753
  RubyCommand.Argument(name: "no_checkout", value: noCheckout),
1745
1754
  RubyCommand.Argument(name: "no_build", value: noBuild),
@@ -3558,10 +3567,14 @@ func gitCommit(path: Any,
3558
3567
  /**
3559
3568
  Executes a simple git pull command
3560
3569
 
3561
- - parameter onlyTags: Simply pull the tags, and not bring new commits to the current branch from the remote
3570
+ - parameters:
3571
+ - onlyTags: Simply pull the tags, and not bring new commits to the current branch from the remote
3572
+ - rebase: Rebase on top of the remote branch instead of merge
3562
3573
  */
3563
- func gitPull(onlyTags: Bool = false) {
3564
- let command = RubyCommand(commandID: "", methodName: "git_pull", className: nil, args: [RubyCommand.Argument(name: "only_tags", value: onlyTags)])
3574
+ func gitPull(onlyTags: Bool = false,
3575
+ rebase: Bool = false) {
3576
+ let command = RubyCommand(commandID: "", methodName: "git_pull", className: nil, args: [RubyCommand.Argument(name: "only_tags", value: onlyTags),
3577
+ RubyCommand.Argument(name: "rebase", value: rebase)])
3565
3578
  _ = runner.executeCommand(command)
3566
3579
  }
3567
3580
 
@@ -4555,6 +4568,7 @@ func makeChangelogFromJenkins(fallbackChangelog: String = "",
4555
4568
  - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
4556
4569
  - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
4557
4570
  - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
4571
+ - gitPrivateKey: Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
4558
4572
  - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
4559
4573
  - googleCloudKeysFile: Path to the gc_keys.json file
4560
4574
  - googleCloudProjectId: ID of the Google Cloud project to use for authentication
@@ -4596,6 +4610,7 @@ func match(type: Any = matchfile.type,
4596
4610
  cloneBranchDirectly: Bool = matchfile.cloneBranchDirectly,
4597
4611
  gitBasicAuthorization: Any? = matchfile.gitBasicAuthorization,
4598
4612
  gitBearerAuthorization: Any? = matchfile.gitBearerAuthorization,
4613
+ gitPrivateKey: Any? = matchfile.gitPrivateKey,
4599
4614
  googleCloudBucketName: Any? = matchfile.googleCloudBucketName,
4600
4615
  googleCloudKeysFile: Any? = matchfile.googleCloudKeysFile,
4601
4616
  googleCloudProjectId: Any? = matchfile.googleCloudProjectId,
@@ -4634,6 +4649,7 @@ func match(type: Any = matchfile.type,
4634
4649
  RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly),
4635
4650
  RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization),
4636
4651
  RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization),
4652
+ RubyCommand.Argument(name: "git_private_key", value: gitPrivateKey),
4637
4653
  RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
4638
4654
  RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
4639
4655
  RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
@@ -5038,7 +5054,7 @@ func pem(development: Bool = false,
5038
5054
  - betaAppDescription: Provide the 'Beta App Description' when uploading a new build
5039
5055
  - betaAppFeedbackEmail: Provide the beta app email when uploading a new build
5040
5056
  - localizedBuildInfo: Localized beta app test info for what's new
5041
- - changelog: Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog
5057
+ - changelog: Provide the 'What to Test' text when uploading a new build
5042
5058
  - skipSubmission: Skip the distributing action of pilot and only upload the ipa file
5043
5059
  - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
5044
5060
  - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
@@ -6870,6 +6886,7 @@ func slather(buildDirectory: String? = nil,
6870
6886
  - clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running snapshot
6871
6887
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
6872
6888
  - eraseSimulator: Enabling this option will automatically erase the simulator before running the application
6889
+ - headless: Enabling this option will prevent displaying the simulator window
6873
6890
  - overrideStatusBar: Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
6874
6891
  - localizeSimulator: Enabling this option will configure the Simulator's system language
6875
6892
  - darkMode: Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark)
@@ -6913,6 +6930,7 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
6913
6930
  clearPreviousScreenshots: Bool = snapshotfile.clearPreviousScreenshots,
6914
6931
  reinstallApp: Bool = snapshotfile.reinstallApp,
6915
6932
  eraseSimulator: Bool = snapshotfile.eraseSimulator,
6933
+ headless: Bool = snapshotfile.headless,
6916
6934
  overrideStatusBar: Bool = snapshotfile.overrideStatusBar,
6917
6935
  localizeSimulator: Bool = snapshotfile.localizeSimulator,
6918
6936
  darkMode: Bool? = snapshotfile.darkMode,
@@ -6955,6 +6973,7 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
6955
6973
  RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots),
6956
6974
  RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
6957
6975
  RubyCommand.Argument(name: "erase_simulator", value: eraseSimulator),
6976
+ RubyCommand.Argument(name: "headless", value: headless),
6958
6977
  RubyCommand.Argument(name: "override_status_bar", value: overrideStatusBar),
6959
6978
  RubyCommand.Argument(name: "localize_simulator", value: localizeSimulator),
6960
6979
  RubyCommand.Argument(name: "dark_mode", value: darkMode),
@@ -7353,6 +7372,7 @@ func swiftlint(mode: Any = "lint",
7353
7372
  - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
7354
7373
  - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
7355
7374
  - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
7375
+ - gitPrivateKey: Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
7356
7376
  - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
7357
7377
  - googleCloudKeysFile: Path to the gc_keys.json file
7358
7378
  - googleCloudProjectId: ID of the Google Cloud project to use for authentication
@@ -7394,6 +7414,7 @@ func syncCodeSigning(type: String = "development",
7394
7414
  cloneBranchDirectly: Bool = false,
7395
7415
  gitBasicAuthorization: String? = nil,
7396
7416
  gitBearerAuthorization: String? = nil,
7417
+ gitPrivateKey: String? = nil,
7397
7418
  googleCloudBucketName: String? = nil,
7398
7419
  googleCloudKeysFile: String? = nil,
7399
7420
  googleCloudProjectId: String? = nil,
@@ -7432,6 +7453,7 @@ func syncCodeSigning(type: String = "development",
7432
7453
  RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly),
7433
7454
  RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization),
7434
7455
  RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization),
7456
+ RubyCommand.Argument(name: "git_private_key", value: gitPrivateKey),
7435
7457
  RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
7436
7458
  RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
7437
7459
  RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
@@ -7535,7 +7557,7 @@ func testfairy(apiKey: String,
7535
7557
  - betaAppDescription: Provide the 'Beta App Description' when uploading a new build
7536
7558
  - betaAppFeedbackEmail: Provide the beta app email when uploading a new build
7537
7559
  - localizedBuildInfo: Localized beta app test info for what's new
7538
- - changelog: Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog
7560
+ - changelog: Provide the 'What to Test' text when uploading a new build
7539
7561
  - skipSubmission: Skip the distributing action of pilot and only upload the ipa file
7540
7562
  - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
7541
7563
  - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
@@ -8453,7 +8475,7 @@ func uploadToPlayStoreInternalAppSharing(packageName: String,
8453
8475
  - betaAppDescription: Provide the 'Beta App Description' when uploading a new build
8454
8476
  - betaAppFeedbackEmail: Provide the beta app email when uploading a new build
8455
8477
  - localizedBuildInfo: Localized beta app test info for what's new
8456
- - changelog: Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog
8478
+ - changelog: Provide the 'What to Test' text when uploading a new build
8457
8479
  - skipSubmission: Skip the distributing action of pilot and only upload the ipa file
8458
8480
  - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
8459
8481
  - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
@@ -8989,4 +9011,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
8989
9011
 
8990
9012
  // Please don't remove the lines below
8991
9013
  // They are used to detect outdated files
8992
- // FastlaneRunnerAPIVersion [0.9.80]
9014
+ // FastlaneRunnerAPIVersion [0.9.81]
@@ -14,4 +14,4 @@ class Gymfile: GymfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.153.1
17
+ // Generated with fastlane 2.154.0
@@ -181,4 +181,4 @@ extension GymfileProtocol {
181
181
 
182
182
  // Please don't remove the lines below
183
183
  // They are used to detect outdated files
184
- // FastlaneRunnerAPIVersion [0.9.30]
184
+ // FastlaneRunnerAPIVersion [0.9.31]
@@ -14,4 +14,4 @@ class Matchfile: MatchfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.153.1
17
+ // Generated with fastlane 2.154.0
@@ -53,6 +53,9 @@ protocol MatchfileProtocol: class {
53
53
  /// Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
54
54
  var gitBearerAuthorization: String? { get }
55
55
 
56
+ /// Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
57
+ var gitPrivateKey: String? { get }
58
+
56
59
  /// Name of the Google Cloud Storage bucket to use
57
60
  var googleCloudBucketName: String? { get }
58
61
 
@@ -133,6 +136,7 @@ extension MatchfileProtocol {
133
136
  var cloneBranchDirectly: Bool { return false }
134
137
  var gitBasicAuthorization: String? { return nil }
135
138
  var gitBearerAuthorization: String? { return nil }
139
+ var gitPrivateKey: String? { return nil }
136
140
  var googleCloudBucketName: String? { return nil }
137
141
  var googleCloudKeysFile: String? { return nil }
138
142
  var googleCloudProjectId: String? { return nil }
@@ -157,4 +161,4 @@ extension MatchfileProtocol {
157
161
 
158
162
  // Please don't remove the lines below
159
163
  // They are used to detect outdated files
160
- // FastlaneRunnerAPIVersion [0.9.24]
164
+ // FastlaneRunnerAPIVersion [0.9.25]
@@ -14,4 +14,4 @@ class Precheckfile: PrecheckfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.153.1
17
+ // Generated with fastlane 2.154.0
@@ -33,4 +33,4 @@ extension PrecheckfileProtocol {
33
33
 
34
34
  // Please don't remove the lines below
35
35
  // They are used to detect outdated files
36
- // FastlaneRunnerAPIVersion [0.9.23]
36
+ // FastlaneRunnerAPIVersion [0.9.24]
@@ -14,4 +14,4 @@ class Scanfile: ScanfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.153.1
17
+ // Generated with fastlane 2.154.0
@@ -257,4 +257,4 @@ extension ScanfileProtocol {
257
257
 
258
258
  // Please don't remove the lines below
259
259
  // They are used to detect outdated files
260
- // FastlaneRunnerAPIVersion [0.9.35]
260
+ // FastlaneRunnerAPIVersion [0.9.36]
@@ -14,4 +14,4 @@ class Screengrabfile: ScreengrabfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.153.1
17
+ // Generated with fastlane 2.154.0
@@ -93,4 +93,4 @@ extension ScreengrabfileProtocol {
93
93
 
94
94
  // Please don't remove the lines below
95
95
  // They are used to detect outdated files
96
- // FastlaneRunnerAPIVersion [0.9.25]
96
+ // FastlaneRunnerAPIVersion [0.9.26]
@@ -14,4 +14,4 @@ class Snapshotfile: SnapshotfileProtocol {
14
14
  // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
- // Generated with fastlane 2.153.1
17
+ // Generated with fastlane 2.154.0
@@ -44,6 +44,9 @@ protocol SnapshotfileProtocol: class {
44
44
  /// Enabling this option will automatically erase the simulator before running the application
45
45
  var eraseSimulator: Bool { get }
46
46
 
47
+ /// Enabling this option will prevent displaying the simulator window
48
+ var headless: Bool { get }
49
+
47
50
  /// Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
48
51
  var overrideStatusBar: Bool { get }
49
52
 
@@ -142,6 +145,7 @@ extension SnapshotfileProtocol {
142
145
  var clearPreviousScreenshots: Bool { return false }
143
146
  var reinstallApp: Bool { return false }
144
147
  var eraseSimulator: Bool { return false }
148
+ var headless: Bool { return true }
145
149
  var overrideStatusBar: Bool { return false }
146
150
  var localizeSimulator: Bool { return false }
147
151
  var darkMode: Bool? { return nil }
@@ -173,4 +177,4 @@ extension SnapshotfileProtocol {
173
177
 
174
178
  // Please don't remove the lines below
175
179
  // They are used to detect outdated files
176
- // FastlaneRunnerAPIVersion [0.9.19]
180
+ // FastlaneRunnerAPIVersion [0.9.20]
@@ -202,17 +202,22 @@ module FastlaneCore
202
202
  def boot
203
203
  return unless is_simulator
204
204
  return unless os_type == "iOS"
205
+ return if self.state == 'Booted'
205
206
 
206
207
  UI.message("Booting #{self}")
207
- `xcrun simctl boot #{self.udid}` unless self.state == "Booted"
208
+
209
+ `xcrun simctl boot #{self.udid} 2>/dev/null`
210
+ self.state = 'Booted'
208
211
  end
209
212
 
210
213
  def shutdown
211
214
  return unless is_simulator
212
215
  return unless os_type == "iOS"
216
+ return if self.state != 'Booted'
213
217
 
214
218
  UI.message("Shutting down #{self.udid}")
215
- `xcrun simctl shutdown #{self.udid}` if self.state == "Booted"
219
+ `xcrun simctl shutdown #{self.udid} 2>/dev/null`
220
+ self.state = 'Shutdown'
216
221
  end
217
222
 
218
223
  def reset
@@ -500,7 +500,9 @@ module Frameit
500
500
  UI.user_error!("Valid parameters :keyword, :title") unless [:keyword, :title].include?(type)
501
501
 
502
502
  # Try to get it from a keyword.strings or title.strings file
503
- strings_path = File.join(File.expand_path("..", screenshot.path), "#{type}.strings")
503
+ strings_path = File.join(File.expand_path("../", screenshot.path), "#{type}.strings")
504
+ strings_path = File.join(File.expand_path("../../", screenshot.path), "#{type}.strings") unless File.exist?(strings_path)
505
+ strings_path = File.join(File.expand_path("../../../", screenshot.path), "#{type}.strings") unless File.exist?(strings_path)
504
506
  if File.exist?(strings_path)
505
507
  parsed = StringsParser.parse(strings_path)
506
508
  text_array = parsed.find { |k, v| screenshot.path.upcase.include?(k.upcase) }
@@ -32,6 +32,14 @@ module Gym
32
32
  def building_mac_catalyst_for_mac?
33
33
  Gym.project.supports_mac_catalyst? && Gym.config[:catalyst_platform] == "macos"
34
34
  end
35
+
36
+ def export_destination_upload?
37
+ config_path = Gym.cache[:config_path]
38
+ return false if config_path.nil?
39
+
40
+ result = CFPropertyList.native_types(CFPropertyList::List.new(file: config_path).value)
41
+ return result["destination"] == "upload"
42
+ end
35
43
  end
36
44
 
37
45
  Helper = FastlaneCore::Helper # you gotta love Ruby: Helper.* should use the Helper class contained in FastlaneCore
@@ -13,6 +13,7 @@ require_relative 'error_handler'
13
13
  module Gym
14
14
  class Runner
15
15
  # @return (String) The path to the resulting ipa
16
+ # rubocop:disable Metrics/PerceivedComplexity
16
17
  def run
17
18
  unless Gym.config[:skip_build_archive]
18
19
  build_app
@@ -34,13 +35,16 @@ module Gym
34
35
 
35
36
  package_app
36
37
  compress_and_move_dsym
37
- path = move_ipa
38
- move_manifest
39
- move_app_thinning
40
- move_app_thinning_size_report
41
- move_apps_folder
42
- move_asset_packs
43
- move_appstore_info
38
+
39
+ unless Gym.export_destination_upload?
40
+ path = move_ipa
41
+ move_manifest
42
+ move_app_thinning
43
+ move_app_thinning_size_report
44
+ move_apps_folder
45
+ move_asset_packs
46
+ move_appstore_info
47
+ end
44
48
  elsif is_mac
45
49
  path = File.expand_path(Gym.config[:output_directory])
46
50
  compress_and_move_dsym
@@ -49,14 +53,17 @@ module Gym
49
53
  return path if Gym.config[:skip_package_pkg]
50
54
 
51
55
  package_app
52
- path = move_pkg
53
- move_appstore_info
56
+ unless Gym.export_destination_upload?
57
+ path = move_pkg
58
+ move_appstore_info
59
+ end
54
60
  return path
55
61
  end
56
62
  copy_files_from_path(File.join(BuildCommandGenerator.archive_path, "Products/usr/local/bin/*")) if Gym.project.command_line_tool?
57
63
  end
58
64
  return path
59
65
  end
66
+ # rubocop:enable Metrics/PerceivedComplexity
60
67
 
61
68
  #####################################################
62
69
  # @!group Printing out things
@@ -141,14 +141,21 @@ module Match
141
141
  env_name: "MATCH_GIT_BASIC_AUTHORIZATION",
142
142
  sensitive: true,
143
143
  description: "Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64",
144
- conflicting_options: [:git_bearer_authorization],
144
+ conflicting_options: [:git_bearer_authorization, :git_private_key],
145
145
  optional: true,
146
146
  default_value: nil),
147
147
  FastlaneCore::ConfigItem.new(key: :git_bearer_authorization,
148
148
  env_name: "MATCH_GIT_BEARER_AUTHORIZATION",
149
149
  sensitive: true,
150
150
  description: "Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64",
151
- conflicting_options: [:git_basic_authorization],
151
+ conflicting_options: [:git_basic_authorization, :git_private_key],
152
+ optional: true,
153
+ default_value: nil),
154
+ FastlaneCore::ConfigItem.new(key: :git_private_key,
155
+ env_name: "MATCH_GIT_PRIVATE_KEY",
156
+ sensitive: true,
157
+ description: "Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof",
158
+ conflicting_options: [:git_basic_authorization, :git_bearer_authorization],
152
159
  optional: true,
153
160
  default_value: nil),
154
161
 
@@ -40,6 +40,7 @@ module Match
40
40
  clone_branch_directly: params[:clone_branch_directly],
41
41
  git_basic_authorization: params[:git_basic_authorization],
42
42
  git_bearer_authorization: params[:git_bearer_authorization],
43
+ git_private_key: params[:git_private_key],
43
44
  type: params[:type].to_s,
44
45
  generate_apple_certs: params[:generate_apple_certs],
45
46
  platform: params[:platform].to_s,
@@ -19,6 +19,7 @@ module Match
19
19
  attr_accessor :platform
20
20
  attr_accessor :git_basic_authorization
21
21
  attr_accessor :git_bearer_authorization
22
+ attr_accessor :git_private_key
22
23
 
23
24
  def self.configure(params)
24
25
  return self.new(
@@ -32,7 +33,8 @@ module Match
32
33
  git_user_email: params[:git_user_email],
33
34
  clone_branch_directly: params[:clone_branch_directly],
34
35
  git_basic_authorization: params[:git_basic_authorization],
35
- git_bearer_authorization: params[:git_bearer_authorization]
36
+ git_bearer_authorization: params[:git_bearer_authorization],
37
+ git_private_key: params[:git_private_key]
36
38
  )
37
39
  end
38
40
 
@@ -46,7 +48,8 @@ module Match
46
48
  git_user_email: nil,
47
49
  clone_branch_directly: false,
48
50
  git_basic_authorization: nil,
49
- git_bearer_authorization: nil)
51
+ git_bearer_authorization: nil,
52
+ git_private_key: nil)
50
53
  self.git_url = git_url
51
54
  self.shallow_clone = shallow_clone
52
55
  self.skip_docs = skip_docs
@@ -56,6 +59,7 @@ module Match
56
59
  self.clone_branch_directly = clone_branch_directly
57
60
  self.git_basic_authorization = git_basic_authorization
58
61
  self.git_bearer_authorization = git_bearer_authorization
62
+ self.git_private_key = git_private_key
59
63
 
60
64
  self.type = type if type
61
65
  self.platform = platform if platform
@@ -85,6 +89,16 @@ module Match
85
89
  command += " -b #{self.branch.shellescape} --single-branch"
86
90
  end
87
91
 
92
+ unless self.git_private_key.nil?
93
+ if File.file?(self.git_private_key)
94
+ ssh_add = File.expand_path(self.git_private_key).shellescape.to_s
95
+ else
96
+ UI.message("Private key file does not exist, will continue by using it as a raw key.")
97
+ ssh_add = "- <<< \"#{self.git_private_key}\""
98
+ end
99
+ command = "ssh-agent bash -c 'ssh-add #{ssh_add}; #{command}'"
100
+ end
101
+
88
102
  UI.message("Cloning remote git repo...")
89
103
  if self.branch && !self.clone_branch_directly
90
104
  UI.message("If cloning the repo takes too long, you can use the `clone_branch_directly` option in match.")
@@ -281,8 +281,17 @@ module Pilot
281
281
  changelog
282
282
  end
283
283
 
284
+ def self.strip_less_than_sign(changelog)
285
+ if changelog && changelog.include?("<")
286
+ changelog.delete!("<")
287
+ UI.important("Less than signs (<) have been removed from the changelog, since they're not allowed by Apple.")
288
+ end
289
+ changelog
290
+ end
291
+
284
292
  def self.sanitize_changelog(changelog)
285
293
  changelog = strip_emoji(changelog)
294
+ changelog = strip_less_than_sign(changelog)
286
295
  truncate_changelog(changelog)
287
296
  end
288
297
 
@@ -122,7 +122,7 @@ module Pilot
122
122
  short_option: "-w",
123
123
  optional: true,
124
124
  env_name: "PILOT_CHANGELOG",
125
- description: "Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog"),
125
+ description: "Provide the 'What to Test' text when uploading a new build"),
126
126
  FastlaneCore::ConfigItem.new(key: :skip_submission,
127
127
  short_option: "-s",
128
128
  env_name: "PILOT_SKIP_SUBMISSION",
@@ -116,6 +116,11 @@ module Snapshot
116
116
  description: "Enabling this option will automatically erase the simulator before running the application",
117
117
  default_value: false,
118
118
  is_string: false),
119
+ FastlaneCore::ConfigItem.new(key: :headless,
120
+ env_name: 'SNAPSHOT_HEADLESS',
121
+ description: "Enabling this option will prevent displaying the simulator window",
122
+ default_value: true,
123
+ type: Boolean),
119
124
  FastlaneCore::ConfigItem.new(key: :override_status_bar,
120
125
  env_name: 'SNAPSHOT_OVERRIDE_STATUS_BAR',
121
126
  description: "Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception",
@@ -7,6 +7,7 @@ module Snapshot
7
7
  attr_accessor :add_videos
8
8
  attr_accessor :clean
9
9
  attr_accessor :erase_simulator
10
+ attr_accessor :headless
10
11
  attr_accessor :localize_simulator
11
12
  attr_accessor :dark_mode
12
13
  attr_accessor :reinstall_app
@@ -34,6 +35,7 @@ module Snapshot
34
35
  @add_videos = snapshot_config[:add_videos]
35
36
  @clean = snapshot_config[:clean]
36
37
  @erase_simulator = snapshot_config[:erase_simulator]
38
+ @headless = snapshot_config[:headless]
37
39
  @localize_simulator = snapshot_config[:localize_simulator]
38
40
  @dark_mode = snapshot_config[:dark_mode]
39
41
  @reinstall_app = snapshot_config[:reinstall_app]
@@ -76,6 +76,11 @@ module Snapshot
76
76
  disable_slide_to_type(type)
77
77
  end
78
78
  end
79
+
80
+ unless launcher_config.headless
81
+ simulator_path = File.join(Helper.xcode_path, 'Applications', 'Simulator.app')
82
+ Helper.backticks("open -a #{simulator_path} -g", print: FastlaneCore::Globals.verbose?)
83
+ end
79
84
  end
80
85
 
81
86
  # pass an array of device types
@@ -129,7 +129,6 @@ module Spaceship
129
129
  tries = 1 if Object.const_defined?("SpecHelper")
130
130
  response = yield
131
131
 
132
- tries -= 1
133
132
  status = response.status if response
134
133
 
135
134
  if [500, 504].include?(status)
@@ -139,6 +138,7 @@ module Spaceship
139
138
 
140
139
  return response
141
140
  rescue => error
141
+ tries -= 1
142
142
  puts(error) if Spaceship::Globals.verbose?
143
143
  if tries.zero?
144
144
  return response
@@ -193,7 +193,7 @@ module Spaceship
193
193
  def get_live_app_store_version(platform: nil, includes: nil)
194
194
  platform ||= Spaceship::ConnectAPI::Platform::IOS
195
195
  filter = {
196
- appStoreState: [Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::READY_FOR_SALE].join(","),
196
+ appStoreState: Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::READY_FOR_SALE,
197
197
  platform: platform
198
198
  }
199
199
  return get_app_store_versions(filter: filter, includes: includes).first
@@ -219,6 +219,24 @@ module Spaceship
219
219
  .last
220
220
  end
221
221
 
222
+ def get_in_review_app_store_version(platform: nil, includes: nil)
223
+ platform ||= Spaceship::ConnectAPI::Platform::IOS
224
+ filter = {
225
+ appStoreState: Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::IN_REVIEW,
226
+ platform: platform
227
+ }
228
+ return get_app_store_versions(filter: filter, includes: includes).first
229
+ end
230
+
231
+ def get_pending_release_app_store_version(platform: nil, includes: nil)
232
+ platform ||= Spaceship::ConnectAPI::Platform::IOS
233
+ filter = {
234
+ appStoreState: Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::PENDING_DEVELOPER_RELEASE,
235
+ platform: platform
236
+ }
237
+ return get_app_store_versions(filter: filter, includes: includes).first
238
+ end
239
+
222
240
  def get_app_store_versions(filter: {}, includes: nil, limit: nil, sort: nil)
223
241
  resps = Spaceship::ConnectAPI.get_app_store_versions(app_id: id, filter: filter, includes: includes, limit: limit, sort: sort).all_pages
224
242
  return resps.flat_map(&:to_models)
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.153.1
4
+ version: 2.154.0
5
5
  platform: ruby
6
6
  authors:
7
- - Danielle Tomlinson
8
- - Fumiya Nakamura
9
- - Maksym Grebenets
10
- - Kohki Miki
11
- - Luka Mirosevic
12
- - Manu Wallner
13
7
  - Joshua Liebowitz
14
- - Olivier Halligon
15
- - Matthew Ellis
16
- - Max Ott
17
- - Josh Holtz
18
- - Helmut Januschka
19
- - Daniel Jankowski
20
8
  - Jorge Revuelta H
21
- - Jimmy Dee
22
- - Felix Krause
23
9
  - Aaron Brager
10
+ - Stefan Natchev
11
+ - Daniel Jankowski
12
+ - Kohki Miki
13
+ - Fumiya Nakamura
24
14
  - Iulian Onofrei
15
+ - Felix Krause
16
+ - Josh Holtz
17
+ - Jimmy Dee
18
+ - Olivier Halligon
19
+ - Helmut Januschka
25
20
  - Jan Piotrowski
26
- - Stefan Natchev
21
+ - Luka Mirosevic
22
+ - Manu Wallner
23
+ - Matthew Ellis
24
+ - Max Ott
27
25
  - Jérôme Lacoste
26
+ - Danielle Tomlinson
28
27
  - Andrew McBurney
28
+ - Maksym Grebenets
29
29
  autorequire:
30
30
  bindir: bin
31
31
  cert_chain: []
32
- date: 2020-07-24 00:00:00.000000000 Z
32
+ date: 2020-07-29 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: slack-notifier
@@ -943,7 +943,6 @@ files:
943
943
  - deliver/lib/assets/ScreenshotsHelp
944
944
  - deliver/lib/assets/summary.html.erb
945
945
  - deliver/lib/deliver.rb
946
- - deliver/lib/deliver/.upload_metadata.rb.swp
947
946
  - deliver/lib/deliver/app_screenshot.rb
948
947
  - deliver/lib/deliver/commands_generator.rb
949
948
  - deliver/lib/deliver/detect_values.rb
@@ -1407,7 +1406,6 @@ files:
1407
1406
  - frameit/README.md
1408
1407
  - frameit/lib/assets/empty.png
1409
1408
  - frameit/lib/frameit.rb
1410
- - frameit/lib/frameit/.editor.rb.swp
1411
1409
  - frameit/lib/frameit/commands_generator.rb
1412
1410
  - frameit/lib/frameit/config_parser.rb
1413
1411
  - frameit/lib/frameit/dependency_checker.rb
@@ -1610,12 +1608,9 @@ files:
1610
1608
  - spaceship/lib/spaceship/client.rb
1611
1609
  - spaceship/lib/spaceship/commands_generator.rb
1612
1610
  - spaceship/lib/spaceship/connect_api.rb
1613
- - spaceship/lib/spaceship/connect_api/.model.rb.swp
1614
1611
  - spaceship/lib/spaceship/connect_api/client.rb
1615
1612
  - spaceship/lib/spaceship/connect_api/file_uploader.rb
1616
1613
  - spaceship/lib/spaceship/connect_api/model.rb
1617
- - spaceship/lib/spaceship/connect_api/models/.app_store_review_detail.rb.swp
1618
- - spaceship/lib/spaceship/connect_api/models/.app_store_version.rb.swp
1619
1614
  - spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb
1620
1615
  - spaceship/lib/spaceship/connect_api/models/app.rb
1621
1616
  - spaceship/lib/spaceship/connect_api/models/app_category.rb