fastlane 2.214.0 → 2.217.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +98 -98
  3. data/deliver/lib/deliver/app_screenshot.rb +20 -10
  4. data/deliver/lib/deliver/runner.rb +2 -1
  5. data/deliver/lib/deliver/submit_for_review.rb +13 -0
  6. data/deliver/lib/deliver/upload_metadata.rb +58 -13
  7. data/fastlane/lib/fastlane/actions/docs/build_app.md +2 -2
  8. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +8 -8
  9. data/fastlane/lib/fastlane/actions/docs/check_app_store_metadata.md +3 -3
  10. data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +2 -2
  11. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +1 -1
  12. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +1 -1
  13. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +6 -2
  14. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +1 -1
  15. data/fastlane/lib/fastlane/actions/download_universal_apk_from_google_play.rb +1 -1
  16. data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +4 -0
  17. data/fastlane/lib/fastlane/actions/git_branch.rb +1 -1
  18. data/fastlane/lib/fastlane/actions/install_on_device.rb +1 -1
  19. data/fastlane/lib/fastlane/actions/nexus_upload.rb +1 -0
  20. data/fastlane/lib/fastlane/actions/notarize.rb +17 -2
  21. data/fastlane/lib/fastlane/actions/slather.rb +17 -4
  22. data/fastlane/lib/fastlane/helper/git_helper.rb +3 -0
  23. data/fastlane/lib/fastlane/helper/xcodes_helper.rb +0 -3
  24. data/fastlane/lib/fastlane/lane.rb +9 -1
  25. data/fastlane/lib/fastlane/new_action.rb +1 -1
  26. data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +3 -3
  27. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -2
  28. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +5 -1
  29. data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/helper/%plugin_name%_helper.rb.erb +1 -1
  30. data/fastlane/lib/fastlane/runner.rb +1 -1
  31. data/fastlane/lib/fastlane/version.rb +2 -2
  32. data/fastlane/swift/Deliverfile.swift +1 -1
  33. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  34. data/fastlane/swift/Fastlane.swift +67 -7
  35. data/fastlane/swift/Gymfile.swift +1 -1
  36. data/fastlane/swift/GymfileProtocol.swift +1 -1
  37. data/fastlane/swift/Matchfile.swift +1 -1
  38. data/fastlane/swift/MatchfileProtocol.swift +17 -1
  39. data/fastlane/swift/Precheckfile.swift +1 -1
  40. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  41. data/fastlane/swift/Scanfile.swift +1 -1
  42. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  43. data/fastlane/swift/Screengrabfile.swift +1 -1
  44. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  45. data/fastlane/swift/Snapshotfile.swift +1 -1
  46. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  47. data/fastlane/swift/formatting/Brewfile.lock.json +22 -22
  48. data/fastlane_core/lib/fastlane_core/cert_checker.rb +2 -2
  49. data/fastlane_core/lib/fastlane_core/project.rb +4 -0
  50. data/fastlane_core/lib/fastlane_core/queue_worker.rb +1 -1
  51. data/frameit/lib/frameit/device_types.rb +1 -1
  52. data/gym/lib/gym/module.rb +13 -2
  53. data/gym/lib/gym/options.rb +1 -1
  54. data/match/lib/match/change_password.rb +3 -9
  55. data/match/lib/match/commands_generator.rb +3 -6
  56. data/match/lib/match/encryption.rb +1 -1
  57. data/match/lib/match/importer.rb +3 -31
  58. data/match/lib/match/migrate.rb +6 -2
  59. data/match/lib/match/nuke.rb +3 -25
  60. data/match/lib/match/options.rb +20 -0
  61. data/match/lib/match/runner.rb +16 -37
  62. data/match/lib/match/setup.rb +1 -1
  63. data/match/lib/match/storage/git_storage.rb +9 -1
  64. data/match/lib/match/storage/s3_storage.rb +6 -0
  65. data/match/lib/match/storage.rb +56 -5
  66. data/precheck/lib/precheck/rules/unreachable_urls_rule.rb +1 -1
  67. data/snapshot/lib/assets/SnapshotHelper.swift +13 -9
  68. data/snapshot/lib/snapshot/reports_generator.rb +48 -7
  69. data/spaceship/lib/spaceship/connect_api/api_client.rb +21 -2
  70. data/spaceship/lib/spaceship/connect_api/models/app.rb +3 -2
  71. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +15 -9
  72. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +7 -0
  73. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -0
  74. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +3 -1
  75. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +4 -4
  76. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +2 -2
  77. data/spaceship/lib/spaceship/connect_api/models/device.rb +2 -2
  78. data/spaceship/lib/spaceship/connect_api/models/profile.rb +3 -2
  79. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +14 -8
  80. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +8 -2
  81. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +0 -3
  82. data/supply/lib/supply/client.rb +47 -21
  83. data/supply/lib/supply/image_listing.rb +15 -0
  84. data/supply/lib/supply/options.rb +5 -0
  85. data/supply/lib/supply/setup.rb +1 -1
  86. data/supply/lib/supply/uploader.rb +60 -18
  87. data/supply/lib/supply.rb +1 -0
  88. data/trainer/lib/trainer/xcresult.rb +1 -1
  89. metadata +282 -273
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c90da076e95e7d56aeb37df6dbd0f85ea6163ae1833e0ed048cb8e324c52b695
4
- data.tar.gz: e0e11ef5984ec45bf0a8ac71b6ea2b635f5fe6f4e2f8244b6d701cee32d842c2
3
+ metadata.gz: e01e5f95c0f041f81a6d2865261a7bf02a4edc77c8e3e7d0d42fdccc93a9eab3
4
+ data.tar.gz: 2f9e98e9d81c4035378505cbf6e3d18cffd680ed3d3c6d8bab31b3be8e7f9a70
5
5
  SHA512:
6
- metadata.gz: 673b9f22b71d12323220280d414c45ba8b7c537b2b9c91c38ee9a46f9b7b4f7053c7fe0f9cc6583e4414608f3b755a154211e3b30ee202aeb59b282045ffb924
7
- data.tar.gz: d8644326864b6f6895fd6c55a4ebc503cc2f730eb0dfce45201bab4bb4d8658b655e1746452d549793d47b234d2a8a8f7aad0c8bf246c7f46a8155eb556f5bde
6
+ metadata.gz: 0e43d45ef9b768b1eba630e1148a9f31f7b356a63977fea8fa45262c0d18a0e952c36e7208654f2b11dcfcb207a2a753b2b7e5820d9a9b209f87954f8048414b
7
+ data.tar.gz: 2177260881cd3aab9d3b7b5542cfc526a4140eb5707108ea346146a2e2da19b3edf627d8013aa7b71b07df5df0a9571d5d0af474dd611f0871cf9339cc6addf9
data/README.md CHANGED
@@ -35,43 +35,43 @@ 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='jorge-revuelta-h'>
39
- <a href='https://github.com/minuscorp'>
40
- <img src='https://github.com/minuscorp.png' width='140px;'>
38
+ <td id='jimmy-dee'>
39
+ <a href='https://github.com/jdee'>
40
+ <img src='https://github.com/jdee.png' width='140px;'>
41
41
  </a>
42
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
42
+ <h4 align='center'>Jimmy Dee</h4>
43
43
  </td>
44
- <td id='danielle-tomlinson'>
45
- <a href='https://github.com/endocrimes'>
46
- <img src='https://github.com/endocrimes.png' width='140px;'>
44
+ <td id='andrew-mcburney'>
45
+ <a href='https://github.com/armcburney'>
46
+ <img src='https://github.com/armcburney.png' width='140px;'>
47
47
  </a>
48
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
48
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
49
49
  </td>
50
- <td id='jan-piotrowski'>
51
- <a href='https://github.com/janpio'>
52
- <img src='https://github.com/janpio.png' width='140px;'>
50
+ <td id='joshua-liebowitz'>
51
+ <a href='https://github.com/taquitos'>
52
+ <img src='https://github.com/taquitos.png' width='140px;'>
53
53
  </a>
54
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
54
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
55
55
  </td>
56
- <td id='manish-rathi'>
57
- <a href='https://github.com/crazymanish'>
58
- <img src='https://github.com/crazymanish.png' width='140px;'>
56
+ <td id='max-ott'>
57
+ <a href='https://github.com/max-ott'>
58
+ <img src='https://github.com/max-ott.png' width='140px;'>
59
59
  </a>
60
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
60
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
61
61
  </td>
62
- <td id='helmut-januschka'>
63
- <a href='https://github.com/hjanuschka'>
64
- <img src='https://github.com/hjanuschka.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/hjanuschka'>Helmut Januschka</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='roger-oba'>
71
- <a href='https://github.com/rogerluan'>
72
- <img src='https://github.com/rogerluan.png' width='140px;'>
70
+ <td id='olivier-halligon'>
71
+ <a href='https://github.com/AliSoftware'>
72
+ <img src='https://github.com/AliSoftware.png' width='140px;'>
73
73
  </a>
74
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
74
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
75
75
  </td>
76
76
  <td id='josh-holtz'>
77
77
  <a href='https://github.com/joshdholtz'>
@@ -79,81 +79,69 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
79
79
  </a>
80
80
  <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
81
81
  </td>
82
- <td id='iulian-onofrei'>
83
- <a href='https://github.com/revolter'>
84
- <img src='https://github.com/revolter.png' width='140px;'>
82
+ <td id='aaron-brager'>
83
+ <a href='https://github.com/getaaron'>
84
+ <img src='https://github.com/getaaron.png' width='140px;'>
85
85
  </a>
86
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
86
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
87
87
  </td>
88
- <td id='felix-krause'>
89
- <a href='https://github.com/KrauseFx'>
90
- <img src='https://github.com/KrauseFx.png' width='140px;'>
88
+ <td id='roger-oba'>
89
+ <a href='https://github.com/rogerluan'>
90
+ <img src='https://github.com/rogerluan.png' width='140px;'>
91
91
  </a>
92
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
92
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
93
93
  </td>
94
- <td id='jérôme-lacoste'>
95
- <a href='https://github.com/lacostej'>
96
- <img src='https://github.com/lacostej.png' width='140px;'>
94
+ <td id='matthew-ellis'>
95
+ <a href='https://github.com/matthewellis'>
96
+ <img src='https://github.com/matthewellis.png' width='140px;'>
97
97
  </a>
98
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
98
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
99
99
  </td>
100
100
  </tr>
101
101
  <tr>
102
- <td id='jimmy-dee'>
103
- <a href='https://github.com/jdee'>
104
- <img src='https://github.com/jdee.png' width='140px;'>
105
- </a>
106
- <h4 align='center'>Jimmy Dee</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='max-ott'>
115
- <a href='https://github.com/max-ott'>
116
- <img src='https://github.com/max-ott.png' width='140px;'>
117
- </a>
118
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
119
- </td>
120
- <td id='andrew-mcburney'>
121
- <a href='https://github.com/armcburney'>
122
- <img src='https://github.com/armcburney.png' width='140px;'>
123
- </a>
124
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
125
- </td>
126
102
  <td id='satoshi-namai'>
127
103
  <a href='https://github.com/ainame'>
128
104
  <img src='https://github.com/ainame.png' width='140px;'>
129
105
  </a>
130
106
  <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
131
107
  </td>
132
- </tr>
133
- <tr>
134
108
  <td id='maksym-grebenets'>
135
109
  <a href='https://github.com/mgrebenets'>
136
110
  <img src='https://github.com/mgrebenets.png' width='140px;'>
137
111
  </a>
138
112
  <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
139
113
  </td>
140
- <td id='aaron-brager'>
141
- <a href='https://github.com/getaaron'>
142
- <img src='https://github.com/getaaron.png' width='140px;'>
114
+ <td id='danielle-tomlinson'>
115
+ <a href='https://github.com/endocrimes'>
116
+ <img src='https://github.com/endocrimes.png' width='140px;'>
143
117
  </a>
144
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
118
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
145
119
  </td>
146
- <td id='daniel-jankowski'>
147
- <a href='https://github.com/mollyIV'>
148
- <img src='https://github.com/mollyIV.png' width='140px;'>
120
+ <td id='kohki-miki'>
121
+ <a href='https://github.com/giginet'>
122
+ <img src='https://github.com/giginet.png' width='140px;'>
149
123
  </a>
150
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
124
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
151
125
  </td>
152
- <td id='luka-mirosevic'>
153
- <a href='https://github.com/lmirosevic'>
154
- <img src='https://github.com/lmirosevic.png' width='140px;'>
126
+ <td id='manu-wallner'>
127
+ <a href='https://github.com/milch'>
128
+ <img src='https://github.com/milch.png' width='140px;'>
155
129
  </a>
156
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
130
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
131
+ </td>
132
+ </tr>
133
+ <tr>
134
+ <td id='jorge-revuelta-h'>
135
+ <a href='https://github.com/minuscorp'>
136
+ <img src='https://github.com/minuscorp.png' width='140px;'>
137
+ </a>
138
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
139
+ </td>
140
+ <td id='łukasz-grabowski'>
141
+ <a href='https://github.com/lucgrabowski'>
142
+ <img src='https://github.com/lucgrabowski.png' width='140px;'>
143
+ </a>
144
+ <h4 align='center'>Łukasz Grabowski</h4>
157
145
  </td>
158
146
  <td id='fumiya-nakamura'>
159
147
  <a href='https://github.com/nafu'>
@@ -161,45 +149,57 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
161
149
  </a>
162
150
  <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
163
151
  </td>
164
- </tr>
165
- <tr>
166
- <td id='kohki-miki'>
167
- <a href='https://github.com/giginet'>
168
- <img src='https://github.com/giginet.png' width='140px;'>
169
- </a>
170
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
171
- </td>
172
152
  <td id='stefan-natchev'>
173
153
  <a href='https://github.com/snatchev'>
174
154
  <img src='https://github.com/snatchev.png' width='140px;'>
175
155
  </a>
176
156
  <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
177
157
  </td>
178
- <td id='matthew-ellis'>
179
- <a href='https://github.com/matthewellis'>
180
- <img src='https://github.com/matthewellis.png' width='140px;'>
158
+ <td id='luka-mirosevic'>
159
+ <a href='https://github.com/lmirosevic'>
160
+ <img src='https://github.com/lmirosevic.png' width='140px;'>
181
161
  </a>
182
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
162
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
183
163
  </td>
184
- <td id='manu-wallner'>
185
- <a href='https://github.com/milch'>
186
- <img src='https://github.com/milch.png' width='140px;'>
164
+ </tr>
165
+ <tr>
166
+ <td id='manish-rathi'>
167
+ <a href='https://github.com/crazymanish'>
168
+ <img src='https://github.com/crazymanish.png' width='140px;'>
187
169
  </a>
188
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
170
+ <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
189
171
  </td>
190
- <td id='olivier-halligon'>
191
- <a href='https://github.com/AliSoftware'>
192
- <img src='https://github.com/AliSoftware.png' width='140px;'>
172
+ <td id='jérôme-lacoste'>
173
+ <a href='https://github.com/lacostej'>
174
+ <img src='https://github.com/lacostej.png' width='140px;'>
193
175
  </a>
194
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
176
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
177
+ </td>
178
+ <td id='daniel-jankowski'>
179
+ <a href='https://github.com/mollyIV'>
180
+ <img src='https://github.com/mollyIV.png' width='140px;'>
181
+ </a>
182
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
183
+ </td>
184
+ <td id='felix-krause'>
185
+ <a href='https://github.com/KrauseFx'>
186
+ <img src='https://github.com/KrauseFx.png' width='140px;'>
187
+ </a>
188
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
189
+ </td>
190
+ <td id='helmut-januschka'>
191
+ <a href='https://github.com/hjanuschka'>
192
+ <img src='https://github.com/hjanuschka.png' width='140px;'>
193
+ </a>
194
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
195
195
  </td>
196
196
  </tr>
197
197
  <tr>
198
- <td id='łukasz-grabowski'>
199
- <a href='https://github.com/lucgrabowski'>
200
- <img src='https://github.com/lucgrabowski.png' width='140px;'>
198
+ <td id='iulian-onofrei'>
199
+ <a href='https://github.com/revolter'>
200
+ <img src='https://github.com/revolter.png' width='140px;'>
201
201
  </a>
202
- <h4 align='center'>Łukasz Grabowski</h4>
202
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
203
203
  </td>
204
204
  </table>
205
205
 
@@ -19,9 +19,9 @@ module Deliver
19
19
  IOS_55 = "iOS-5.5-in"
20
20
  # iPhone XS
21
21
  IOS_58 = "iOS-5.8-in"
22
- # iPhone XR
22
+ # iPhone 14 Pro
23
23
  IOS_61 = "iOS-6.1-in"
24
- # iPhone XS Max
24
+ # iPhone 14 Plus, iPhone 13 Pro Max, iPhone 12 Pro Max, iPhone 11 Pro Max, iPhone 11, iPhone XS Max, iPhone XR
25
25
  IOS_65 = "iOS-6.5-in"
26
26
  # iPhone 14 Pro Max
27
27
  IOS_67 = "iOS-6.7-in"
@@ -45,9 +45,9 @@ module Deliver
45
45
  IOS_55_MESSAGES = "iOS-5.5-in-messages"
46
46
  # iPhone XS iMessage
47
47
  IOS_58_MESSAGES = "iOS-5.8-in-messages"
48
- # iPhone XR iMessage
48
+ # iPhone 14 Pro iMessage
49
49
  IOS_61_MESSAGES = "iOS-6.1-in-messages"
50
- # iPhone XS Max iMessage
50
+ # iPhone 14 Plus, iPhone 13 Pro Max, iPhone 12 Pro Max, iPhone 11 Pro Max, iPhone 11, iPhone XS Max, iPhone XR iMessage
51
51
  IOS_65_MESSAGES = "iOS-6.5-in-messages"
52
52
  # iPhone 14 Pro Max iMessage
53
53
  IOS_67_MESSAGES = "iOS-6.7-in-messages"
@@ -69,6 +69,8 @@ module Deliver
69
69
  IOS_APPLE_WATCH_SERIES4 = "iOS-Apple-Watch-Series4"
70
70
  # Apple Watch Series 7
71
71
  IOS_APPLE_WATCH_SERIES7 = "iOS-Apple-Watch-Series7"
72
+ # Apple Watch Ultra
73
+ IOS_APPLE_WATCH_ULTRA = "iOS-Apple-Watch-Ultra"
72
74
 
73
75
  # Apple TV
74
76
  APPLE_TV = "Apple-TV"
@@ -104,6 +106,7 @@ module Deliver
104
106
  ScreenSize::IOS_47 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_IPHONE_47, # also 7 & 8
105
107
  ScreenSize::IOS_55 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_IPHONE_55, # also 7 Plus & 8 Plus
106
108
  ScreenSize::IOS_58 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_IPHONE_58,
109
+ ScreenSize::IOS_61 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_IPHONE_61,
107
110
  ScreenSize::IOS_65 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_IPHONE_65,
108
111
  ScreenSize::IOS_67 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_IPHONE_67,
109
112
  ScreenSize::IOS_IPAD => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_IPAD_97,
@@ -115,6 +118,7 @@ module Deliver
115
118
  ScreenSize::IOS_47_MESSAGES => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::IMESSAGE_APP_IPHONE_47, # also 7 & 8
116
119
  ScreenSize::IOS_55_MESSAGES => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::IMESSAGE_APP_IPHONE_55, # also 7 Plus & 8 Plus
117
120
  ScreenSize::IOS_58_MESSAGES => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::IMESSAGE_APP_IPHONE_58,
121
+ ScreenSize::IOS_61_MESSAGES => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::IMESSAGE_APP_IPHONE_61,
118
122
  ScreenSize::IOS_65_MESSAGES => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::IMESSAGE_APP_IPHONE_65,
119
123
  ScreenSize::IOS_67_MESSAGES => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::IMESSAGE_APP_IPHONE_67,
120
124
  ScreenSize::IOS_IPAD_MESSAGES => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::IMESSAGE_APP_IPAD_97,
@@ -126,6 +130,7 @@ module Deliver
126
130
  ScreenSize::IOS_APPLE_WATCH => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_SERIES_3,
127
131
  ScreenSize::IOS_APPLE_WATCH_SERIES4 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_SERIES_4,
128
132
  ScreenSize::IOS_APPLE_WATCH_SERIES7 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_SERIES_7,
133
+ ScreenSize::IOS_APPLE_WATCH_ULTRA => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_ULTRA,
129
134
  ScreenSize::APPLE_TV => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_APPLE_TV
130
135
  }
131
136
  return matching[self.screen_size]
@@ -139,7 +144,7 @@ module Deliver
139
144
  ScreenSize::IOS_47 => "iPhone 6", # also 7 & 8
140
145
  ScreenSize::IOS_55 => "iPhone 6 Plus", # also 7 Plus & 8 Plus
141
146
  ScreenSize::IOS_58 => "iPhone XS",
142
- ScreenSize::IOS_61 => "iPhone XR",
147
+ ScreenSize::IOS_61 => "iPhone 14 Pro",
143
148
  ScreenSize::IOS_65 => "iPhone XS Max",
144
149
  ScreenSize::IOS_67 => "iPhone 14 Pro Max",
145
150
  ScreenSize::IOS_IPAD => "iPad",
@@ -151,7 +156,7 @@ module Deliver
151
156
  ScreenSize::IOS_47_MESSAGES => "iPhone 6 (iMessage)", # also 7 & 8
152
157
  ScreenSize::IOS_55_MESSAGES => "iPhone 6 Plus (iMessage)", # also 7 Plus & 8 Plus
153
158
  ScreenSize::IOS_58_MESSAGES => "iPhone XS (iMessage)",
154
- ScreenSize::IOS_61_MESSAGES => "iPhone XR (iMessage)",
159
+ ScreenSize::IOS_61_MESSAGES => "iPhone 14 Pro (iMessage)",
155
160
  ScreenSize::IOS_65_MESSAGES => "iPhone XS Max (iMessage)",
156
161
  ScreenSize::IOS_67_MESSAGES => "iPhone 14 Pro Max (iMessage)",
157
162
  ScreenSize::IOS_IPAD_MESSAGES => "iPad (iMessage)",
@@ -163,6 +168,7 @@ module Deliver
163
168
  ScreenSize::IOS_APPLE_WATCH => "Watch",
164
169
  ScreenSize::IOS_APPLE_WATCH_SERIES4 => "Watch Series4",
165
170
  ScreenSize::IOS_APPLE_WATCH_SERIES7 => "Watch Series7",
171
+ ScreenSize::IOS_APPLE_WATCH_ULTRA => "Watch Ultra",
166
172
  ScreenSize::APPLE_TV => "Apple TV"
167
173
  }
168
174
  return matching[self.screen_size]
@@ -182,6 +188,7 @@ module Deliver
182
188
  ScreenSize::IOS_47_MESSAGES,
183
189
  ScreenSize::IOS_55_MESSAGES,
184
190
  ScreenSize::IOS_58_MESSAGES,
191
+ ScreenSize::IOS_61_MESSAGES,
185
192
  ScreenSize::IOS_65_MESSAGES,
186
193
  ScreenSize::IOS_67_MESSAGES,
187
194
  ScreenSize::IOS_IPAD_MESSAGES,
@@ -207,8 +214,8 @@ module Deliver
207
214
  [2778, 1284]
208
215
  ],
209
216
  ScreenSize::IOS_61_MESSAGES => [
210
- [828, 1792],
211
- [1792, 828]
217
+ [1179, 2556],
218
+ [2556, 1179]
212
219
  ],
213
220
  ScreenSize::IOS_58_MESSAGES => [
214
221
  [1125, 2436],
@@ -271,8 +278,8 @@ module Deliver
271
278
  [2778, 1284]
272
279
  ],
273
280
  ScreenSize::IOS_61 => [
274
- [828, 1792],
275
- [1792, 828]
281
+ [1179, 2556],
282
+ [2556, 1179]
276
283
  ],
277
284
  ScreenSize::IOS_58 => [
278
285
  [1125, 2436],
@@ -337,6 +344,9 @@ module Deliver
337
344
  ScreenSize::IOS_APPLE_WATCH_SERIES7 => [
338
345
  [396, 484]
339
346
  ],
347
+ ScreenSize::IOS_APPLE_WATCH_ULTRA => [
348
+ [410, 502]
349
+ ],
340
350
  ScreenSize::APPLE_TV => [
341
351
  [1920, 1080],
342
352
  [3840, 2160]
@@ -231,7 +231,8 @@ module Deliver
231
231
 
232
232
  unless result
233
233
  transporter_errors = transporter.displayable_errors
234
- UI.user_error!("Error uploading ipa file: \n #{transporter_errors}")
234
+ file_type = platform == "osx" ? "pkg" : "ipa"
235
+ UI.user_error!("Error uploading #{file_type} file: \n #{transporter_errors}")
235
236
  end
236
237
  end
237
238
 
@@ -47,6 +47,19 @@ module Deliver
47
47
  end
48
48
 
49
49
  submission.add_app_store_version_to_review_items(app_store_version_id: version.id)
50
+
51
+ 10.times do
52
+ version_with_latest_info = Spaceship::ConnectAPI::AppStoreVersion.get(app_store_version_id: version.id)
53
+
54
+ if version_with_latest_info.app_store_state == Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::READY_FOR_REVIEW
55
+ break
56
+ end
57
+
58
+ UI.message("Waiting for the state of the version to become #{Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::READY_FOR_REVIEW}...")
59
+
60
+ sleep(15)
61
+ end
62
+
50
63
  submission.submit_for_review
51
64
  end
52
65
 
@@ -89,7 +89,8 @@ module Deliver
89
89
  enabled_languages = detect_languages(options)
90
90
 
91
91
  app_store_version_localizations = verify_available_version_languages!(options, app, enabled_languages) unless options[:edit_live]
92
- app_info_localizations = verify_available_info_languages!(options, app, enabled_languages) unless options[:edit_live]
92
+ app_info = fetch_edit_app_info(app)
93
+ app_info_localizations = verify_available_info_languages!(options, app, app_info, enabled_languages) unless options[:edit_live] || !updating_localized_app_info?(options, app, app_info)
93
94
 
94
95
  if options[:edit_live]
95
96
  # not all values are editable when using live_version
@@ -211,18 +212,19 @@ module Deliver
211
212
  store_version_worker.start
212
213
 
213
214
  # Update app info localizations
214
- app_info_worker = FastlaneCore::QueueWorker.new do |app_info_localization|
215
- attributes = localized_info_attributes_by_locale[app_info_localization.locale]
216
- if attributes
217
- UI.message("Uploading metadata to App Store Connect for localized info '#{app_info_localization.locale}'")
218
- app_info_localization.update(attributes: attributes)
215
+ if app_info_localizations
216
+ app_info_worker = FastlaneCore::QueueWorker.new do |app_info_localization|
217
+ attributes = localized_info_attributes_by_locale[app_info_localization.locale]
218
+ if attributes
219
+ UI.message("Uploading metadata to App Store Connect for localized info '#{app_info_localization.locale}'")
220
+ app_info_localization.update(attributes: attributes)
221
+ end
219
222
  end
223
+ app_info_worker.batch_enqueue(app_info_localizations)
224
+ app_info_worker.start
220
225
  end
221
- app_info_worker.batch_enqueue(app_info_localizations)
222
- app_info_worker.start
223
226
 
224
227
  # Update categories
225
- app_info = fetch_edit_app_info(app)
226
228
  if app_info
227
229
  category_id_map = {}
228
230
 
@@ -437,6 +439,12 @@ module Deliver
437
439
  end
438
440
  end
439
441
 
442
+ def fetch_live_app_info(app, wait_time: 10)
443
+ retry_if_nil("Cannot find live app info", wait_time: wait_time) do
444
+ app.fetch_live_app_info
445
+ end
446
+ end
447
+
440
448
  def retry_if_nil(message, tries: 5, wait_time: 10)
441
449
  loop do
442
450
  tries -= 1
@@ -451,12 +459,49 @@ module Deliver
451
459
  end
452
460
  end
453
461
 
454
- # Finding languages to enable
455
- def verify_available_info_languages!(options, app, languages)
456
- app_info = fetch_edit_app_info(app)
462
+ # Checking if the metadata to update includes localised App Info
463
+ def updating_localized_app_info?(options, app, app_info)
464
+ app_info ||= fetch_live_app_info(app)
465
+ unless app_info
466
+ UI.important("Can't find edit or live App info. Skipping upload.")
467
+ return false
468
+ end
469
+ localizations = app_info.get_app_info_localizations
470
+
471
+ LOCALISED_APP_VALUES.keys.each do |key|
472
+ current = options[key]
473
+ next unless current
474
+
475
+ unless current.kind_of?(Hash)
476
+ UI.error("Error with provided '#{key}'. Must be a hash, the key being the language.")
477
+ next
478
+ end
479
+
480
+ current.each do |language, value|
481
+ strip_value = value.to_s.strip
482
+ next if strip_value.empty?
483
+
484
+ app_info_locale = localizations.find { |l| l.locale == language }
485
+ next if app_info_locale.nil?
457
486
 
487
+ begin
488
+ current_value = app_info_locale.public_send(key.to_sym)
489
+ rescue NoMethodError
490
+ next
491
+ end
492
+
493
+ return true if current_value != strip_value
494
+ end
495
+ end
496
+
497
+ UI.message('No changes to localized App Info detected. Skipping upload.')
498
+ return false
499
+ end
500
+
501
+ # Finding languages to enable
502
+ def verify_available_info_languages!(options, app, app_info, languages)
458
503
  unless app_info
459
- UI.user_error!("Cannot update languages - could not find an editable info")
504
+ UI.user_error!("Cannot update languages - could not find an editable 'App Info'. Verify that your app is in one of the editable states in App Store Connect")
460
505
  return
461
506
  end
462
507
 
@@ -42,8 +42,8 @@ fastlane gym
42
42
 
43
43
  _gym_ uses the latest APIs to build and sign your application which results in much faster build times.
44
44
 
45
- | | Gym Features |
46
- |----------|----------------|
45
+ | | _gym_ Features |
46
+ |----------|------------------|
47
47
  🚀 | _gym_ builds 30% faster than other build tools like [shenzhen](https://github.com/nomad/shenzhen)
48
48
  🏁 | Beautiful inline build output
49
49
  📖 | Helps you resolve common build errors like code signing issues
@@ -32,7 +32,7 @@ androidTestImplementation 'tools.fastlane:screengrab:x.x.x'
32
32
 
33
33
  The latest version is [ ![Download](https://maven-badges.herokuapp.com/maven-central/tools.fastlane/screengrab/badge.svg)](https://search.maven.org/artifact/tools.fastlane/screengrab)
34
34
 
35
- As of Screengrab version 2.0.0, all Android test dependencies are AndroidX dependencies. This means a device with API 18+, Android 4.3 or greater is required. If you wish to capture screenshots with an older Android OS, then you must use a 1.x.x version.
35
+ As of _screengrab_ version 2.0.0, all Android test dependencies are AndroidX dependencies. This means a device with API 18+, Android 4.3 or greater is required. If you wish to capture screenshots with an older Android OS, then you must use a 1.x.x version.
36
36
 
37
37
  ##### Configuring your Manifest Permissions
38
38
 
@@ -63,21 +63,21 @@ Ensure that the following permissions exist in your **src/debug/AndroidManifest.
63
63
  1. Add `LocaleTestRule` to your tests class to handle automatic switching of locales.
64
64
 
65
65
  If you're using Java use:
66
-
66
+
67
67
  ```java
68
68
  @ClassRule
69
69
  public static final LocaleTestRule localeTestRule = new LocaleTestRule();
70
70
  ```
71
-
71
+
72
72
  If you're using Kotlin use:
73
-
73
+
74
74
  ```kotlin
75
75
  @Rule @JvmField
76
76
  val localeTestRule = LocaleTestRule()
77
77
  ```
78
-
78
+
79
79
  The `@JvmField` annotation is important. It won't work like this:
80
-
80
+
81
81
  ```kotlin
82
82
  companion object {
83
83
  @get:ClassRule
@@ -87,7 +87,7 @@ Ensure that the following permissions exist in your **src/debug/AndroidManifest.
87
87
 
88
88
  2. To capture screenshots, add the following to your tests `Screengrab.screenshot("name_of_screenshot_here");` on the appropriate screens
89
89
 
90
- # Generating Screenshots with Screengrab
90
+ # Generating Screenshots with _screengrab_
91
91
  - Then, before running `fastlane screengrab` you'll need a debug and test apk
92
92
  - You can create your APKs manually with `./gradlew assembleDebug assembleAndroidTest`
93
93
  - You can also create a lane and use `build_android_app`:
@@ -228,7 +228,7 @@ When using JUnit 3 you'll need to add a bit more code:
228
228
 
229
229
  ## Clean Status Bar
230
230
 
231
- Screengrab can clean your status bar to make your screenshots even more beautiful.
231
+ _screengrab_ can clean your status bar to make your screenshots even more beautiful.
232
232
  It is simply a wrapper that allows configuring SystemUI DemoMode in your code.
233
233
  Note: the clean status bar feature is only supported on devices with *API level >= 23*.
234
234
 
@@ -2,7 +2,7 @@
2
2
  <img src="/img/actions/precheck.png" width="250">
3
3
  </p>
4
4
 
5
- Precheck
5
+ _precheck_
6
6
  ============
7
7
 
8
8
  ###### Check your app using a community driven set of App Store review rules to avoid being rejected
@@ -23,8 +23,8 @@ Apple rejects builds for many avoidable metadata issues like including swear wor
23
23
  # Features
24
24
 
25
25
 
26
- | | precheck Features |
27
- |----------|-----------------|
26
+ | | _precheck_ Features |
27
+ |----------|-----------------------|
28
28
  🐛 |  product bug mentions
29
29
  🙅 | Swear word checker
30
30
  🤖 | Mentioning other platforms
@@ -48,7 +48,7 @@ This does the following:
48
48
  - Downloads the certificate
49
49
  - Generates a new ```.pem``` file in the current working directory, which you can upload to your server
50
50
 
51
- Note that _pem_ will never revoke your existing certificates. _pem_ can't download any of your existing push certificates, as the private key is only available on the machine it was created on.
51
+ Note that _pem_ will never revoke your existing certificates. _pem_ can't download any of your existing push certificates, as the private key is only available on the machine it was created on.
52
52
 
53
53
  If you already have a push certificate enabled, which is active for at least 30 more days, _pem_ will not create a new certificate. If you still want to create one, use the `force`:
54
54
 
@@ -111,7 +111,7 @@ If you need the `p12` in your keychain, perhaps to test push with an app like [K
111
111
  Enter Import Password:
112
112
  <hit enter: the p12 has no password>
113
113
  MAC verified OK
114
- Enter PEM pass phrase:
114
+ Enter your pem passphrase:
115
115
  <enter a temporary password to encrypt the pem file>
116
116
 
117
117
  % openssl pkcs12 -export -in my.pem -out my-with-passphrase.p12