fastlane 2.198.0 → 2.201.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +88 -88
  4. data/deliver/lib/deliver/app_screenshot.rb +8 -0
  5. data/deliver/lib/deliver/app_screenshot_iterator.rb +1 -1
  6. data/fastlane/lib/.DS_Store +0 -0
  7. data/fastlane/lib/fastlane/.DS_Store +0 -0
  8. data/fastlane/lib/fastlane/actions/.DS_Store +0 -0
  9. data/fastlane/lib/fastlane/actions/download_dsyms.rb +26 -27
  10. data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +1 -1
  11. data/fastlane/lib/fastlane/actions/get_version_number.rb +1 -0
  12. data/fastlane/lib/fastlane/actions/trainer.rb +49 -0
  13. data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +18 -1
  14. data/fastlane/lib/fastlane/actions/xcversion.rb +18 -3
  15. data/fastlane/lib/fastlane/documentation/docs_generator.rb +17 -12
  16. data/fastlane/lib/fastlane/helper/xcodebuild_formatter_helper.rb +9 -0
  17. data/fastlane/lib/fastlane/tools.rb +2 -1
  18. data/fastlane/lib/fastlane/version.rb +1 -1
  19. data/fastlane/swift/Actions.swift +1 -1
  20. data/fastlane/swift/Appfile.swift +1 -1
  21. data/fastlane/swift/ArgumentProcessor.swift +1 -1
  22. data/fastlane/swift/ControlCommand.swift +1 -1
  23. data/fastlane/swift/Deliverfile.swift +2 -2
  24. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  25. data/fastlane/swift/Fastlane.swift +44 -15
  26. data/fastlane/swift/Gymfile.swift +2 -2
  27. data/fastlane/swift/GymfileProtocol.swift +6 -2
  28. data/fastlane/swift/LaneFileProtocol.swift +1 -1
  29. data/fastlane/swift/MainProcess.swift +1 -1
  30. data/fastlane/swift/Matchfile.swift +2 -2
  31. data/fastlane/swift/MatchfileProtocol.swift +2 -2
  32. data/fastlane/swift/OptionalConfigValue.swift +1 -1
  33. data/fastlane/swift/Plugins.swift +1 -1
  34. data/fastlane/swift/Precheckfile.swift +2 -2
  35. data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
  36. data/fastlane/swift/RubyCommand.swift +1 -1
  37. data/fastlane/swift/RubyCommandable.swift +1 -1
  38. data/fastlane/swift/Runner.swift +4 -8
  39. data/fastlane/swift/RunnerArgument.swift +1 -1
  40. data/fastlane/swift/Scanfile.swift +2 -2
  41. data/fastlane/swift/ScanfileProtocol.swift +4 -4
  42. data/fastlane/swift/Screengrabfile.swift +2 -2
  43. data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
  44. data/fastlane/swift/Snapshotfile.swift +2 -2
  45. data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
  46. data/fastlane/swift/SocketClient.swift +1 -1
  47. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  48. data/fastlane/swift/SocketResponse.swift +1 -1
  49. data/fastlane/swift/formatting/Brewfile.lock.json +14 -14
  50. data/fastlane/swift/main.swift +1 -1
  51. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +10 -5
  52. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +15 -5
  53. data/gym/lib/gym/generators/build_command_generator.rb +69 -23
  54. data/gym/lib/gym/options.rb +23 -5
  55. data/scan/lib/scan/options.rb +27 -7
  56. data/scan/lib/scan/runner.rb +58 -15
  57. data/scan/lib/scan/test_command_generator.rb +54 -5
  58. data/snapshot/lib/snapshot/options.rb +23 -7
  59. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +1 -1
  60. data/snapshot/lib/snapshot/test_command_generator.rb +37 -2
  61. data/spaceship/lib/spaceship/client.rb +35 -15
  62. data/spaceship/lib/spaceship/commands_generator.rb +1 -1
  63. data/spaceship/lib/spaceship/connect_api/models/app.rb +43 -0
  64. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +1 -0
  65. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +2 -0
  66. data/spaceship/lib/spaceship/connect_api/models/review_submission.rb +73 -0
  67. data/spaceship/lib/spaceship/connect_api/models/review_submission_item.rb +40 -0
  68. data/spaceship/lib/spaceship/connect_api/response.rb +13 -0
  69. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +83 -0
  70. data/spaceship/lib/spaceship/connect_api.rb +2 -0
  71. data/spaceship/lib/spaceship/globals.rb +9 -0
  72. data/spaceship/lib/spaceship/spaceauth_runner.rb +1 -1
  73. data/supply/lib/supply/options.rb +8 -0
  74. data/supply/lib/supply/uploader.rb +6 -2
  75. data/trainer/lib/.DS_Store +0 -0
  76. data/trainer/lib/assets/junit.xml.erb +20 -0
  77. data/trainer/lib/trainer/commands_generator.rb +51 -0
  78. data/trainer/lib/trainer/junit_generator.rb +31 -0
  79. data/trainer/lib/trainer/module.rb +10 -0
  80. data/trainer/lib/trainer/options.rb +55 -0
  81. data/trainer/lib/trainer/test_parser.rb +335 -0
  82. data/trainer/lib/trainer/xcresult.rb +403 -0
  83. data/trainer/lib/trainer.rb +7 -0
  84. metadata +38 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 34ffaaedeedaf54aea167114b6be61500026da48a419856dbf15de2453425e90
4
- data.tar.gz: 7ab613d2b2c4d94cdc1a49b092af2e15c6f9beb99edbdfa714a2f851704f46cf
3
+ metadata.gz: '0748d7414d5df9609fbffecf573937a1b74cbdebc81f9ee203e1197b58ecc5b1'
4
+ data.tar.gz: 6f07f231bb899663f8d4e46561b6c2fe982aad07cc531a9796ec285b0495d8bb
5
5
  SHA512:
6
- metadata.gz: b0ce3c761e4d9015ec19618bfe8cb0bf797a740ddbfbeed841b01f7c8a0100491b45308c62caf877f20360d969bf13605dfefed2d37a9b236ec029c8ffc3e107
7
- data.tar.gz: c567ba5dfc3fbff8f6eec14e0616d8b0c886f3f55873f6d762944bf088537b6cc78c2e2e2bb600af711d5adb19e68cfd46baf074ac32ac201234b1773163095d
6
+ metadata.gz: 79d8d561694712d172f2fcb925abfab4ce52a5be9d5af2e5645dd88813e0a65581e192c4ee21b792571685293a615d839442e156322f0cea7d6ef0303487747b
7
+ data.tar.gz: 8f5abd82eed5601477648a67bef8275c7ce4a48926550f409220f91fd54626ba375fef8827c5625ea6bf7d2ab833fbf8cdb49aa15ff9f02b51b93cde806cb144
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2021 The Fastlane Authors
3
+ Copyright (c) 2015-2022 The Fastlane Authors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -35,55 +35,61 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
35
35
  <!-- This table is regenerated and resorted on each release -->
36
36
  <table id='team'>
37
37
  <tr>
38
+ <td id='danielle-tomlinson'>
39
+ <a href='https://github.com/endocrimes'>
40
+ <img src='https://github.com/endocrimes.png' width='140px;'>
41
+ </a>
42
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
43
+ </td>
38
44
  <td id='satoshi-namai'>
39
45
  <a href='https://github.com/ainame'>
40
46
  <img src='https://github.com/ainame.png' width='140px;'>
41
47
  </a>
42
48
  <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
43
49
  </td>
44
- <td id='luka-mirosevic'>
45
- <a href='https://github.com/lmirosevic'>
46
- <img src='https://github.com/lmirosevic.png' width='140px;'>
47
- </a>
48
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
49
- </td>
50
- <td id='felix-krause'>
51
- <a href='https://github.com/KrauseFx'>
52
- <img src='https://github.com/KrauseFx.png' width='140px;'>
50
+ <td id='jorge-revuelta-h'>
51
+ <a href='https://github.com/minuscorp'>
52
+ <img src='https://github.com/minuscorp.png' width='140px;'>
53
53
  </a>
54
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
54
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
55
55
  </td>
56
- <td id='joshua-liebowitz'>
57
- <a href='https://github.com/taquitos'>
58
- <img src='https://github.com/taquitos.png' width='140px;'>
56
+ <td id='jérôme-lacoste'>
57
+ <a href='https://github.com/lacostej'>
58
+ <img src='https://github.com/lacostej.png' width='140px;'>
59
59
  </a>
60
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
60
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
61
61
  </td>
62
- <td id='stefan-natchev'>
63
- <a href='https://github.com/snatchev'>
64
- <img src='https://github.com/snatchev.png' width='140px;'>
62
+ <td id='jan-piotrowski'>
63
+ <a href='https://github.com/janpio'>
64
+ <img src='https://github.com/janpio.png' width='140px;'>
65
65
  </a>
66
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
66
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
67
67
  </td>
68
68
  </tr>
69
69
  <tr>
70
- <td id='daniel-jankowski'>
71
- <a href='https://github.com/mollyIV'>
72
- <img src='https://github.com/mollyIV.png' width='140px;'>
70
+ <td id='roger-oba'>
71
+ <a href='https://github.com/rogerluan'>
72
+ <img src='https://github.com/rogerluan.png' width='140px;'>
73
73
  </a>
74
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
74
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
75
75
  </td>
76
- <td id='andrew-mcburney'>
77
- <a href='https://github.com/armcburney'>
78
- <img src='https://github.com/armcburney.png' width='140px;'>
76
+ <td id='kohki-miki'>
77
+ <a href='https://github.com/giginet'>
78
+ <img src='https://github.com/giginet.png' width='140px;'>
79
79
  </a>
80
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
80
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
81
81
  </td>
82
- <td id='matthew-ellis'>
83
- <a href='https://github.com/matthewellis'>
84
- <img src='https://github.com/matthewellis.png' width='140px;'>
82
+ <td id='olivier-halligon'>
83
+ <a href='https://github.com/AliSoftware'>
84
+ <img src='https://github.com/AliSoftware.png' width='140px;'>
85
85
  </a>
86
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
86
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
87
+ </td>
88
+ <td id='helmut-januschka'>
89
+ <a href='https://github.com/hjanuschka'>
90
+ <img src='https://github.com/hjanuschka.png' width='140px;'>
91
+ </a>
92
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
87
93
  </td>
88
94
  <td id='manish-rathi'>
89
95
  <a href='https://github.com/crazymanish'>
@@ -91,19 +97,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
91
97
  </a>
92
98
  <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
93
99
  </td>
94
- <td id='max-ott'>
95
- <a href='https://github.com/max-ott'>
96
- <img src='https://github.com/max-ott.png' width='140px;'>
97
- </a>
98
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
99
- </td>
100
100
  </tr>
101
101
  <tr>
102
- <td id='olivier-halligon'>
103
- <a href='https://github.com/AliSoftware'>
104
- <img src='https://github.com/AliSoftware.png' width='140px;'>
102
+ <td id='matthew-ellis'>
103
+ <a href='https://github.com/matthewellis'>
104
+ <img src='https://github.com/matthewellis.png' width='140px;'>
105
105
  </a>
106
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
106
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
107
+ </td>
108
+ <td id='joshua-liebowitz'>
109
+ <a href='https://github.com/taquitos'>
110
+ <img src='https://github.com/taquitos.png' width='140px;'>
111
+ </a>
112
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
113
+ </td>
114
+ <td id='josh-holtz'>
115
+ <a href='https://github.com/joshdholtz'>
116
+ <img src='https://github.com/joshdholtz.png' width='140px;'>
117
+ </a>
118
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
107
119
  </td>
108
120
  <td id='aaron-brager'>
109
121
  <a href='https://github.com/getaaron'>
@@ -117,43 +129,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
117
129
  </a>
118
130
  <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
119
131
  </td>
120
- <td id='fumiya-nakamura'>
121
- <a href='https://github.com/nafu'>
122
- <img src='https://github.com/nafu.png' width='140px;'>
123
- </a>
124
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
125
- </td>
126
- <td id='jorge-revuelta-h'>
127
- <a href='https://github.com/minuscorp'>
128
- <img src='https://github.com/minuscorp.png' width='140px;'>
129
- </a>
130
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
131
- </td>
132
132
  </tr>
133
133
  <tr>
134
- <td id='kohki-miki'>
135
- <a href='https://github.com/giginet'>
136
- <img src='https://github.com/giginet.png' width='140px;'>
134
+ <td id='luka-mirosevic'>
135
+ <a href='https://github.com/lmirosevic'>
136
+ <img src='https://github.com/lmirosevic.png' width='140px;'>
137
137
  </a>
138
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
138
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
139
139
  </td>
140
- <td id='danielle-tomlinson'>
141
- <a href='https://github.com/endocrimes'>
142
- <img src='https://github.com/endocrimes.png' width='140px;'>
140
+ <td id='daniel-jankowski'>
141
+ <a href='https://github.com/mollyIV'>
142
+ <img src='https://github.com/mollyIV.png' width='140px;'>
143
143
  </a>
144
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
144
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
145
145
  </td>
146
- <td id='helmut-januschka'>
147
- <a href='https://github.com/hjanuschka'>
148
- <img src='https://github.com/hjanuschka.png' width='140px;'>
146
+ <td id='felix-krause'>
147
+ <a href='https://github.com/KrauseFx'>
148
+ <img src='https://github.com/KrauseFx.png' width='140px;'>
149
149
  </a>
150
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
150
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
151
151
  </td>
152
- <td id='jimmy-dee'>
153
- <a href='https://github.com/jdee'>
154
- <img src='https://github.com/jdee.png' width='140px;'>
152
+ <td id='stefan-natchev'>
153
+ <a href='https://github.com/snatchev'>
154
+ <img src='https://github.com/snatchev.png' width='140px;'>
155
155
  </a>
156
- <h4 align='center'>Jimmy Dee</h4>
156
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
157
157
  </td>
158
158
  <td id='iulian-onofrei'>
159
159
  <a href='https://github.com/revolter'>
@@ -163,35 +163,35 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
163
163
  </td>
164
164
  </tr>
165
165
  <tr>
166
- <td id='josh-holtz'>
167
- <a href='https://github.com/joshdholtz'>
168
- <img src='https://github.com/joshdholtz.png' width='140px;'>
166
+ <td id='andrew-mcburney'>
167
+ <a href='https://github.com/armcburney'>
168
+ <img src='https://github.com/armcburney.png' width='140px;'>
169
169
  </a>
170
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
170
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
171
171
  </td>
172
- <td id='jérôme-lacoste'>
173
- <a href='https://github.com/lacostej'>
174
- <img src='https://github.com/lacostej.png' width='140px;'>
172
+ <td id='max-ott'>
173
+ <a href='https://github.com/max-ott'>
174
+ <img src='https://github.com/max-ott.png' width='140px;'>
175
175
  </a>
176
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
176
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
177
177
  </td>
178
- <td id='maksym-grebenets'>
179
- <a href='https://github.com/mgrebenets'>
180
- <img src='https://github.com/mgrebenets.png' width='140px;'>
178
+ <td id='fumiya-nakamura'>
179
+ <a href='https://github.com/nafu'>
180
+ <img src='https://github.com/nafu.png' width='140px;'>
181
181
  </a>
182
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
182
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
183
183
  </td>
184
- <td id='roger-oba'>
185
- <a href='https://github.com/rogerluan'>
186
- <img src='https://github.com/rogerluan.png' width='140px;'>
184
+ <td id='jimmy-dee'>
185
+ <a href='https://github.com/jdee'>
186
+ <img src='https://github.com/jdee.png' width='140px;'>
187
187
  </a>
188
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
188
+ <h4 align='center'>Jimmy Dee</h4>
189
189
  </td>
190
- <td id='jan-piotrowski'>
191
- <a href='https://github.com/janpio'>
192
- <img src='https://github.com/janpio.png' width='140px;'>
190
+ <td id='maksym-grebenets'>
191
+ <a href='https://github.com/mgrebenets'>
192
+ <img src='https://github.com/mgrebenets.png' width='140px;'>
193
193
  </a>
194
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
194
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
195
195
  </td>
196
196
  </tr>
197
197
  </table>
@@ -63,6 +63,8 @@ module Deliver
63
63
  IOS_APPLE_WATCH = "iOS-Apple-Watch"
64
64
  # Apple Watch Series 4
65
65
  IOS_APPLE_WATCH_SERIES4 = "iOS-Apple-Watch-Series4"
66
+ # Apple Watch Series 7
67
+ IOS_APPLE_WATCH_SERIES7 = "iOS-Apple-Watch-Series7"
66
68
 
67
69
  # Apple TV
68
70
  APPLE_TV = "Apple-TV"
@@ -117,6 +119,7 @@ module Deliver
117
119
  ScreenSize::MAC => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_DESKTOP,
118
120
  ScreenSize::IOS_APPLE_WATCH => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_SERIES_3,
119
121
  ScreenSize::IOS_APPLE_WATCH_SERIES4 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_SERIES_4,
122
+ ScreenSize::IOS_APPLE_WATCH_SERIES7 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_SERIES_7,
120
123
  ScreenSize::APPLE_TV => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_APPLE_TV
121
124
  }
122
125
  return matching[self.screen_size]
@@ -151,6 +154,7 @@ module Deliver
151
154
  ScreenSize::MAC => "Mac",
152
155
  ScreenSize::IOS_APPLE_WATCH => "Watch",
153
156
  ScreenSize::IOS_APPLE_WATCH_SERIES4 => "Watch Series4",
157
+ ScreenSize::IOS_APPLE_WATCH_SERIES7 => "Watch Series7",
154
158
  ScreenSize::APPLE_TV => "Apple TV"
155
159
  }
156
160
  return matching[self.screen_size]
@@ -313,6 +317,9 @@ module Deliver
313
317
  ScreenSize::IOS_APPLE_WATCH_SERIES4 => [
314
318
  [368, 448]
315
319
  ],
320
+ ScreenSize::IOS_APPLE_WATCH_SERIES7 => [
321
+ [396, 484]
322
+ ],
316
323
  ScreenSize::APPLE_TV => [
317
324
  [1920, 1080],
318
325
  [3840, 2160]
@@ -324,6 +331,7 @@ module Deliver
324
331
  is_3rd_gen = [
325
332
  "iPad Pro (12.9-inch) (3rd generation)", # Default simulator has this name
326
333
  "iPad Pro (12.9-inch) (4th generation)", # Default simulator has this name
334
+ "iPad Pro (12.9-inch) (5th generation)", # Default simulator has this name
327
335
  "IPAD_PRO_3GEN_129", # Screenshots downloaded from App Store Connect has this name
328
336
  "ipadPro129" # Legacy: screenshots downloaded from iTunes Connect used to have this name
329
337
  ].any? { |key| filename.include?(key) }
@@ -80,7 +80,7 @@ module Deliver
80
80
  screenshots_per_display_type = screenshots_for_language.reject { |screenshot| screenshot.device_type.nil? }.group_by(&:device_type)
81
81
 
82
82
  screenshots_per_display_type.each do |display_type, screenshots|
83
- # create AppScreenshotSet for given display_type if it doesn't exsit
83
+ # create AppScreenshotSet for given display_type if it doesn't exist
84
84
  app_screenshot_set = (app_screenshot_set_per_locale_and_display_type[language] || {})[display_type]
85
85
  app_screenshot_set ||= localization.create_app_screenshot_set(attributes: { screenshotDisplayType: display_type })
86
86
 
Binary file
Binary file
@@ -75,10 +75,11 @@ module Fastlane
75
75
 
76
76
  filter = { app: app.id }
77
77
  filter["preReleaseVersion.platform"] = platform
78
- build_resps = Spaceship::ConnectAPI.get_builds(filter: filter, sort: "-uploadedDate", includes: "preReleaseVersion,buildBundles").all_pages
79
- builds = build_resps.flat_map(&:to_models)
78
+ filter["preReleaseVersion.version"] = version if version
79
+ filter["version"] = build_number if build_number
80
+ build_resp = Spaceship::ConnectAPI.get_builds(filter: filter, sort: "-uploadedDate", includes: "preReleaseVersion,buildBundles")
80
81
 
81
- builds.each do |build|
82
+ build_resp.all_pages_each do |build|
82
83
  asc_app_version = build.app_version
83
84
  asc_build_number = build.version
84
85
  uploaded_date = DateTime.parse(build.uploaded_date)
@@ -100,7 +101,7 @@ module Fastlane
100
101
 
101
102
  if after_uploaded_date && after_uploaded_date >= uploaded_date
102
103
  UI.verbose("Upload date #{after_uploaded_date} not reached: #{uploaded_date}")
103
- next
104
+ break
104
105
  end
105
106
 
106
107
  message = []
@@ -114,39 +115,37 @@ module Fastlane
114
115
  end
115
116
 
116
117
  UI.verbose("Build_version: #{asc_build_number} matches #{build_number}, grabbing dsym_url") if build_number
117
-
118
- build.build_bundles&.each do |build_bundle|
119
- download_dsym(build_bundle: build_bundle, build: build, app: app, wait_for_dsym_processing: wait_for_dsym_processing, wait_timeout: wait_timeout, output_directory: output_directory)
120
- end
118
+ download_dsym(build: build, app: app, wait_for_dsym_processing: wait_for_dsym_processing, wait_timeout: wait_timeout, output_directory: output_directory)
121
119
  end
122
120
  end
123
121
 
124
- def self.download_dsym(build_bundle: nil, build: nil, app: nil, wait_for_dsym_processing: nil, wait_timeout: nil, output_directory: nil)
122
+ def self.download_dsym(build: nil, app: nil, wait_for_dsym_processing: nil, wait_timeout: nil, output_directory: nil)
125
123
  start = Time.now
126
- download_url = nil
124
+ dsym_urls = []
127
125
 
128
126
  loop do
129
- download_url = build_bundle.dsym_url
130
-
131
- unless download_url
132
- if !wait_for_dsym_processing || (Time.now - start) > wait_timeout
133
- # In some cases, AppStoreConnect does not process the dSYMs, thus no error should be thrown.
134
- UI.message("Could not find any dSYM for #{build.version} (#{build.app_version})")
135
- else
136
- UI.message("Waiting for dSYM file to appear...")
137
- sleep(30)
138
- next
139
- end
127
+ build_bundles = build.build_bundles.select { |b| b.includes_symbols == true }
128
+ dsym_urls = build_bundles.map(&:dsym_url).compact
129
+
130
+ break if build_bundles.count == dsym_urls.count
131
+
132
+ if !wait_for_dsym_processing || (Time.now - start) > wait_timeout
133
+ # In some cases, AppStoreConnect does not process the dSYMs, thus no error should be thrown.
134
+ UI.message("Could not find any dSYM for #{build.version} (#{build.app_version})")
135
+ break
136
+ else
137
+ UI.message("Waiting for dSYM file to appear...")
138
+ sleep(30) unless FastlaneCore::Helper.is_test?
139
+ build = Spaceship::ConnectAPI::Build.get(build_id: build.id)
140
140
  end
141
-
142
- break
143
141
  end
144
142
 
145
- if download_url
146
- self.download(download_url, build, app, output_directory)
147
- return if build.version
148
- else
143
+ if dsym_urls.count == 0
149
144
  UI.message("No dSYM URL for #{build.version} (#{build.app_version})")
145
+ else
146
+ dsym_urls.each do |url|
147
+ self.download(url, build, app, output_directory)
148
+ end
150
149
  end
151
150
  end
152
151
  # rubocop:enable Metrics/PerceivedComplexity
@@ -75,7 +75,7 @@ module Fastlane
75
75
  [
76
76
  "If building your app requires a specific version of Xcode, you can invoke this command before using gym.",
77
77
  "For example, to ensure that a beta version of Xcode is not accidentally selected to build, which would make uploading to TestFlight fail.",
78
- "You can either manually provide a specific version using `version: ` or you make use of the `.xcode-version` file.",
78
+ "You can either manually provide a specific version using `version:` or you make use of the `.xcode-version` file.",
79
79
  "Using the `strict` parameter, you can either verify the full set of version numbers strictly (i.e. `11.3.1`) or only a subset of them (i.e. `11.3` or `11`)."
80
80
  ].join("\n")
81
81
  end
@@ -138,6 +138,7 @@ module Fastlane
138
138
  plist = Xcodeproj::Plist.read_from_path(plist_file)
139
139
  UI.user_error!("Unable to read plist: #{plist_file}") unless plist
140
140
 
141
+ return '${MARKETING_VERSION}' if plist["CFBundleShortVersionString"].nil?
141
142
  plist["CFBundleShortVersionString"]
142
143
  end
143
144
 
@@ -0,0 +1,49 @@
1
+ module Fastlane
2
+ module Actions
3
+ class TrainerAction < Action
4
+ def self.run(params)
5
+ require "trainer"
6
+
7
+ params[:path] = Actions.lane_context[Actions::SharedValues::SCAN_GENERATED_PLIST_FILE] if Actions.lane_context[Actions::SharedValues::SCAN_GENERATED_PLIST_FILE]
8
+ params[:path] ||= Actions.lane_context[Actions::SharedValues::SCAN_DERIVED_DATA_PATH] if Actions.lane_context[Actions::SharedValues::SCAN_DERIVED_DATA_PATH]
9
+
10
+ fail_build = params[:fail_build]
11
+ resulting_paths = Trainer::TestParser.auto_convert(params)
12
+ resulting_paths.each do |path, test_successful|
13
+ UI.test_failure!("Unit tests failed") if fail_build && !test_successful
14
+ end
15
+
16
+ return resulting_paths
17
+ end
18
+
19
+ def self.description
20
+ "Convert the Xcode plist log to a JUnit report"
21
+ end
22
+
23
+ def self.detail
24
+ "Convert the Xcode plist log to a JUnit report. This will raise an exception if the tests failed"
25
+ end
26
+
27
+ def self.authors
28
+ ["KrauseFx"]
29
+ end
30
+
31
+ def self.return_value
32
+ "A hash with the key being the path of the generated file, the value being if the tests were successful"
33
+ end
34
+
35
+ def self.available_options
36
+ require 'trainer'
37
+ FastlaneCore::CommanderGenerator.new.generate(Trainer::Options.available_options)
38
+ end
39
+
40
+ def self.is_supported?(platform)
41
+ %i[ios mac].include?(platform)
42
+ end
43
+
44
+ def self.category
45
+ :testing
46
+ end
47
+ end
48
+ end
49
+ end
@@ -50,6 +50,10 @@ module Fastlane
50
50
  set_build_setting(config, "PROVISIONING_PROFILE_SPECIFIER", params[:profile_name])
51
51
  UI.important("Set Provisioning Profile name to: #{params[:profile_name]} for target: #{target.name} for build configuration: #{config.name}")
52
52
  end
53
+ if params[:entitlements_file_path]
54
+ set_build_setting(config, "CODE_SIGN_ENTITLEMENTS", params[:entitlements_file_path])
55
+ UI.important("Set Entitlements file path to: #{params[:entitlements_file_path]} for target: #{target.name} for build configuration: #{config.name}")
56
+ end
53
57
  # Since Xcode 8, this is no longer needed, you simply use PROVISIONING_PROFILE_SPECIFIER
54
58
  if params[:profile_uuid]
55
59
  set_build_setting(config, "PROVISIONING_PROFILE", params[:profile_uuid])
@@ -143,6 +147,10 @@ module Fastlane
143
147
  env_name: "FL_CODE_SIGN_IDENTITY",
144
148
  description: "Code signing identity type (iPhone Developer, iPhone Distribution)",
145
149
  optional: true),
150
+ FastlaneCore::ConfigItem.new(key: :entitlements_file_path,
151
+ env_name: "FL_CODE_SIGN_ENTITLEMENTS_FILE_PATH",
152
+ description: "Path to your entitlements file",
153
+ optional: true),
146
154
  FastlaneCore::ConfigItem.new(key: :profile_name,
147
155
  env_name: "FL_PROVISIONING_PROFILE_SPECIFIER",
148
156
  description: "Provisioning profile name to use for code signing",
@@ -172,6 +180,15 @@ module Fastlane
172
180
  update_code_signing_settings(
173
181
  use_automatic_signing: true,
174
182
  path: "demo-project/demo/demo.xcodeproj"
183
+ )',
184
+ ' # more advanced manual code signing
185
+ update_code_signing_settings(
186
+ use_automatic_signing: true,
187
+ path: "demo-project/demo/demo.xcodeproj",
188
+ team_id: "QABC123DEV",
189
+ bundle_identifier: "com.demoapp.QABC123DEV",
190
+ profile_name: "Demo App Deployment Profile",
191
+ entitlements_file_path: "Demo App/generated/New.entitlements"
175
192
  )'
176
193
  ]
177
194
  end
@@ -185,7 +202,7 @@ module Fastlane
185
202
  end
186
203
 
187
204
  def self.authors
188
- ["mathiasAichinger", "hjanuschka", "p4checo", "portellaa", "aeons", "att55"]
205
+ ["mathiasAichinger", "hjanuschka", "p4checo", "portellaa", "aeons", "att55", "abcdev"]
189
206
  end
190
207
 
191
208
  def self.is_supported?(platform)
@@ -5,6 +5,7 @@ module Fastlane
5
5
  Actions.verify_gem!('xcode-install')
6
6
 
7
7
  version = params[:version]
8
+
8
9
  xcode = Helper::XcversionHelper.find_xcode(version)
9
10
  UI.user_error!("Cannot find an installed Xcode satisfying '#{version}'") if xcode.nil?
10
11
 
@@ -14,16 +15,29 @@ module Fastlane
14
15
  ENV["DEVELOPER_DIR"] = File.join(xcode.path, "/Contents/Developer")
15
16
  end
16
17
 
18
+ def self.read_xcode_version_file
19
+ xcode_version_paths = Dir.glob(".xcode-version")
20
+
21
+ if xcode_version_paths.first
22
+ return File.read(xcode_version_paths.first).strip
23
+ end
24
+
25
+ return nil
26
+ end
27
+
17
28
  def self.description
18
29
  "Select an Xcode to use by version specifier"
19
30
  end
20
31
 
21
32
  def self.details
22
- "Finds and selects a version of an installed Xcode that best matches the provided [`Gem::Version` requirement specifier](http://www.rubydoc.info/github/rubygems/rubygems/Gem/Version)"
33
+ [
34
+ "Finds and selects a version of an installed Xcode that best matches the provided [`Gem::Version` requirement specifier](http://www.rubydoc.info/github/rubygems/rubygems/Gem/Version)",
35
+ "You can either manually provide a specific version using `version:` or you make use of the `.xcode-version` file."
36
+ ].join("\n")
23
37
  end
24
38
 
25
39
  def self.authors
26
- ["oysta"]
40
+ ["oysta", "rogerluan"]
27
41
  end
28
42
 
29
43
  def self.available_options
@@ -31,7 +45,8 @@ module Fastlane
31
45
  FastlaneCore::ConfigItem.new(key: :version,
32
46
  env_name: "FL_XCODE_VERSION",
33
47
  description: "The version of Xcode to select specified as a Gem::Version requirement string (e.g. '~> 7.1.0')",
34
- optional: false,
48
+ default_value: self.read_xcode_version_file,
49
+ default_value_dynamic: true,
35
50
  verify_block: Helper::XcversionHelper::Verify.method(:requirement))
36
51
  ]
37
52
  end