fastlane 2.238.0 → 2.241.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +57 -177
  3. data/bin/fastlane +4 -2
  4. data/credentials_manager/README.md +1 -1
  5. data/credentials_manager/lib/credentials_manager/account_manager.rb +6 -2
  6. data/deliver/lib/deliver/app_screenshot.rb +0 -4
  7. data/deliver/lib/deliver/commands_generator.rb +1 -1
  8. data/deliver/lib/deliver/detect_values.rb +3 -1
  9. data/deliver/lib/deliver/download_screenshots.rb +8 -1
  10. data/deliver/lib/deliver/html_generator.rb +1 -1
  11. data/deliver/lib/deliver/options.rb +8 -0
  12. data/deliver/lib/deliver/runner.rb +5 -4
  13. data/deliver/lib/deliver/sync_screenshots.rb +27 -28
  14. data/deliver/lib/deliver/upload_app_clip_default_experience_header_images.rb +3 -3
  15. data/deliver/lib/deliver/upload_metadata.rb +34 -16
  16. data/deliver/lib/deliver/upload_screenshots.rb +24 -18
  17. data/docs/README.md +25 -0
  18. data/fastlane/lib/assets/TeamTable.md.erb +28 -0
  19. data/fastlane/lib/fastlane/actions/appaloosa.rb +2 -1
  20. data/fastlane/lib/fastlane/actions/appium.rb +1 -1
  21. data/fastlane/lib/fastlane/actions/apteligent.rb +8 -1
  22. data/fastlane/lib/fastlane/actions/build_and_upload_to_appetize.rb +3 -1
  23. data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +7 -2
  24. data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +3 -0
  25. data/fastlane/lib/fastlane/actions/danger.rb +5 -5
  26. data/fastlane/lib/fastlane/actions/docs/build_app.md +1 -2
  27. data/fastlane/lib/fastlane/actions/docs/create_app_online.md +1 -2
  28. data/fastlane/lib/fastlane/actions/docs/get_certificates.md +0 -2
  29. data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +7 -3
  30. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +13 -3
  31. data/fastlane/lib/fastlane/actions/ensure_no_debug_code.rb +2 -2
  32. data/fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb +1 -0
  33. data/fastlane/lib/fastlane/actions/github_api.rb +1 -2
  34. data/fastlane/lib/fastlane/actions/hg_commit_version_bump.rb +1 -1
  35. data/fastlane/lib/fastlane/actions/increment_build_number.rb +1 -1
  36. data/fastlane/lib/fastlane/actions/increment_version_number.rb +1 -1
  37. data/fastlane/lib/fastlane/actions/install_xcode_plugin.rb +16 -6
  38. data/fastlane/lib/fastlane/actions/lcov.rb +11 -2
  39. data/fastlane/lib/fastlane/actions/nexus_upload.rb +16 -4
  40. data/fastlane/lib/fastlane/actions/notification.rb +3 -2
  41. data/fastlane/lib/fastlane/actions/oclint.rb +8 -8
  42. data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +9 -4
  43. data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
  44. data/fastlane/lib/fastlane/actions/say.rb +2 -4
  45. data/fastlane/lib/fastlane/actions/set_pod_key.rb +3 -3
  46. data/fastlane/lib/fastlane/actions/sonar.rb +16 -16
  47. data/fastlane/lib/fastlane/actions/sourcedocs.rb +8 -8
  48. data/fastlane/lib/fastlane/actions/spaceship_logs.rb +4 -2
  49. data/fastlane/lib/fastlane/actions/splunkmint.rb +8 -1
  50. data/fastlane/lib/fastlane/actions/swiftlint.rb +6 -3
  51. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +4 -2
  52. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +5 -2
  53. data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +5 -2
  54. data/fastlane/lib/fastlane/actions/verify_build.rb +1 -4
  55. data/fastlane/lib/fastlane/actions/verify_pod_keys.rb +3 -1
  56. data/fastlane/lib/fastlane/actions/xcode_server_get_assets.rb +20 -19
  57. data/fastlane/lib/fastlane/actions/xcodebuild.rb +5 -6
  58. data/fastlane/lib/fastlane/actions/zip.rb +2 -1
  59. data/fastlane/lib/fastlane/auto_complete.rb +1 -1
  60. data/fastlane/lib/fastlane/cli_tools_distributor.rb +14 -0
  61. data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +23 -0
  62. data/fastlane/lib/fastlane/environment_printer.rb +12 -25
  63. data/fastlane/lib/fastlane/fast_file.rb +2 -1
  64. data/fastlane/lib/fastlane/fastlane_require.rb +5 -1
  65. data/fastlane/lib/fastlane/helper/git_helper.rb +4 -2
  66. data/fastlane/lib/fastlane/helper/sh_helper.rb +25 -7
  67. data/fastlane/lib/fastlane/new_action.rb +1 -1
  68. data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +1 -1
  69. data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +1 -1
  70. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +36 -4
  71. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -1
  72. data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +1 -1
  73. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +7 -7
  74. data/fastlane/lib/fastlane/swift_lane_manager.rb +22 -4
  75. data/fastlane/lib/fastlane/version.rb +3 -2
  76. data/fastlane/swift/Deliverfile.swift +1 -1
  77. data/fastlane/swift/DeliverfileProtocol.swift +8 -1
  78. data/fastlane/swift/Fastlane.swift +129 -11
  79. data/fastlane/swift/Gymfile.swift +1 -1
  80. data/fastlane/swift/GymfileProtocol.swift +8 -1
  81. data/fastlane/swift/MainProcess.swift +190 -20
  82. data/fastlane/swift/Matchfile.swift +1 -1
  83. data/fastlane/swift/MatchfileProtocol.swift +10 -3
  84. data/fastlane/swift/Precheckfile.swift +1 -1
  85. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  86. data/fastlane/swift/Scanfile.swift +1 -1
  87. data/fastlane/swift/ScanfileProtocol.swift +15 -1
  88. data/fastlane/swift/Screengrabfile.swift +1 -1
  89. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  90. data/fastlane/swift/Snapshotfile.swift +1 -1
  91. data/fastlane/swift/SnapshotfileProtocol.swift +8 -1
  92. data/fastlane/swift/formatting/Rakefile +1 -0
  93. data/fastlane/swift/main.swift +4 -1
  94. data/fastlane_core/README.md +1 -1
  95. data/fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb +1 -17
  96. data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +23 -8
  97. data/fastlane_core/lib/fastlane_core/device_manager.rb +2 -2
  98. data/fastlane_core/lib/fastlane_core/fastlane_pty.rb +20 -7
  99. data/fastlane_core/lib/fastlane_core/helper.rb +34 -5
  100. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +1 -1
  101. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +16 -27
  102. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +31 -28
  103. data/fastlane_core/lib/fastlane_core/languages.rb +0 -1
  104. data/fastlane_core/lib/fastlane_core/print_table.rb +5 -2
  105. data/fastlane_core/lib/fastlane_core/project.rb +19 -0
  106. data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +10 -19
  107. data/fastlane_core/lib/fastlane_core/secrets.rb +77 -0
  108. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +3 -3
  109. data/fastlane_core/lib/fastlane_core/ui/github_issue_inspector_reporter.rb +1 -1
  110. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +2 -1
  111. data/fastlane_core/lib/fastlane_core.rb +1 -0
  112. data/frameit/lib/frameit/device.rb +1 -1
  113. data/frameit/lib/frameit/frame_downloader.rb +2 -0
  114. data/frameit/lib/frameit/runner.rb +3 -2
  115. data/frameit/lib/frameit/screenshot.rb +0 -1
  116. data/gym/lib/gym/generators/build_command_generator.rb +4 -4
  117. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +3 -3
  118. data/gym/lib/gym/options.rb +5 -0
  119. data/gym/lib/gym/runner.rb +1 -1
  120. data/internal/README.md +1 -1
  121. data/match/lib/match/encryption/openssl.rb +6 -2
  122. data/match/lib/match/generator.rb +1 -0
  123. data/match/lib/match/nuke.rb +2 -2
  124. data/match/lib/match/options.rb +13 -5
  125. data/match/lib/match/runner.rb +30 -3
  126. data/match/lib/match/storage/git_storage.rb +44 -11
  127. data/match/lib/match/storage/gitlab/secure_file.rb +2 -1
  128. data/match/lib/match/storage/google_cloud_storage.rb +6 -1
  129. data/match/lib/match/storage/interface.rb +8 -5
  130. data/pem/lib/pem/manager.rb +5 -1
  131. data/pem/lib/pem/module.rb +0 -4
  132. data/pem/lib/pem/options.rb +6 -0
  133. data/pilot/lib/pilot/build_manager.rb +32 -0
  134. data/pilot/lib/pilot/options.rb +8 -0
  135. data/precheck/lib/precheck/rule_processor.rb +1 -0
  136. data/produce/lib/produce/developer_center.rb +49 -2
  137. data/produce/lib/produce/itunes_connect.rb +1 -1
  138. data/produce/lib/produce/module.rb +21 -0
  139. data/produce/lib/produce/options.rb +17 -0
  140. data/produce/lib/produce/service.rb +3 -5
  141. data/produce/lib/produce.rb +0 -1
  142. data/scan/lib/scan/options.rb +12 -0
  143. data/scan/lib/scan/runner.rb +1 -1
  144. data/scan/lib/scan/test_command_generator.rb +12 -9
  145. data/scan/lib/scan/test_result_parser.rb +1 -0
  146. data/scan/lib/scan/xcpretty_reporter_options_generator.rb +2 -2
  147. data/screengrab/lib/screengrab/page.html.erb +12 -7
  148. data/screengrab/lib/screengrab/reports_generator.rb +1 -1
  149. data/sigh/lib/assets/resign.sh +38 -9
  150. data/sigh/lib/sigh/local_manage.rb +1 -1
  151. data/sigh/lib/sigh/options.rb +5 -0
  152. data/sigh/lib/sigh/resign.rb +3 -3
  153. data/sigh/lib/sigh/runner.rb +6 -1
  154. data/snapshot/lib/snapshot/options.rb +5 -0
  155. data/snapshot/lib/snapshot/page.html.erb +17 -12
  156. data/snapshot/lib/snapshot/reports_generator.rb +1 -1
  157. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +1 -1
  158. data/snapshot/lib/snapshot.rb +0 -2
  159. data/spaceship/README.md +2 -3
  160. data/spaceship/lib/spaceship/base.rb +3 -1
  161. data/spaceship/lib/spaceship/client.rb +159 -19
  162. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +16 -0
  163. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +13 -2
  164. data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +6 -0
  165. data/spaceship/lib/spaceship/connect_api/models/profile.rb +7 -5
  166. data/spaceship/lib/spaceship/connect_api/models/routing_app_coverage.rb +75 -0
  167. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +25 -0
  168. data/spaceship/lib/spaceship/connect_api/token.rb +6 -1
  169. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +45 -0
  170. data/spaceship/lib/spaceship/connect_api.rb +1 -0
  171. data/spaceship/lib/spaceship/du/upload_file.rb +4 -3
  172. data/spaceship/lib/spaceship/errors.rb +7 -1
  173. data/spaceship/lib/spaceship/globals.rb +2 -2
  174. data/spaceship/lib/spaceship/portal/merchant.rb +127 -2
  175. data/spaceship/lib/spaceship/portal/portal_client.rb +58 -0
  176. data/spaceship/lib/spaceship/portal/ui/select_team.rb +0 -2
  177. data/spaceship/lib/spaceship/portal/website_push.rb +8 -2
  178. data/spaceship/lib/spaceship/test_flight/client.rb +0 -22
  179. data/spaceship/lib/spaceship/test_flight.rb +0 -1
  180. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +11 -0
  181. data/supply/lib/supply/client.rb +6 -0
  182. data/supply/lib/supply/options.rb +1 -0
  183. data/supply/lib/supply/reader.rb +15 -0
  184. data/supply/lib/supply.rb +0 -1
  185. data/trainer/lib/trainer/xcresult/helper.rb +27 -13
  186. metadata +80 -64
  187. data/produce/lib/produce/available_default_languages.rb +0 -62
  188. data/snapshot/lib/snapshot/screenshot_flatten.rb +0 -20
  189. data/snapshot/lib/snapshot/screenshot_rotate.rb +0 -36
  190. data/spaceship/lib/spaceship/test_flight/app_test_info.rb +0 -40
  191. data/supply/lib/supply/apk_listing.rb +0 -14
  192. /data/fastlane/lib/assets/{custom_action_template.rb → custom_action_template.rb.template} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b83a11ad4335b1a3c678c4a6d0f1aea9f6eb7ccd2fdda1392621a24be1ebc1b9
4
- data.tar.gz: 40445027ea32c6b0a7d7c761f3aaa148ada6ac0d868f9d1212e68b1c0ff99940
3
+ metadata.gz: 696cd16eb3defc78305bdebccbc787402841c1105199cfd437d15f019e617024
4
+ data.tar.gz: ab772bcd92b21da5da03746f3e7bdab86e60f5ff6771696e2beb5cbd5c673b4d
5
5
  SHA512:
6
- metadata.gz: 915bb8bfd75b4e65b00c6213c861261aaa0b7e3b4ec5aaadc2c4029d90386d8682240628434983ec8891f5399798e584be4410ed1f37a11deb22d24cf61549e4
7
- data.tar.gz: 206b83080b67e0feadc08b65e59e577ee63be8972826a17dc80ac102aeede7da6b11fe67f9b9c53c2ec6052ded492ae2850b78baecb8faa321dbe8904d079e74
6
+ metadata.gz: fb16eaacf91b754e72424d9780054f13b49040aadb738c86746dba6fa75ff3e275af98621aeda98794b47a1a3ad982d91071b6c9b1642da7e243a0d187a86739
7
+ data.tar.gz: e116e4c1c5f59831e65a20e676f9f8735807ae86929efb06bc5d97d97e11182361ea2d783c9da2ced56276f6d2183bfbfd863e5fcb7e7add57f5f1961543e84f
data/README.md CHANGED
@@ -9,17 +9,12 @@
9
9
  [![Gem](https://img.shields.io/gem/v/fastlane.svg?style=flat)](https://rubygems.org/gems/fastlane)
10
10
  [![Homebrew](https://img.shields.io/badge/dynamic/json.svg?url=https://formulae.brew.sh/api/formula/fastlane.json&query=$.versions.stable&label=homebrew)](https://formulae.brew.sh/formula/fastlane)
11
11
  [![Build Status](https://img.shields.io/circleci/project/github/fastlane/fastlane/master.svg)](https://circleci.com/gh/fastlane/fastlane)
12
- [![PRs welcome!](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/fastlane/fastlane/blob/master/CONTRIBUTING.md)
12
+ [![PRs welcome!](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/fastlane/fastlane/blob/master/docs/CONTRIBUTING.md)
13
13
  [![OpenCollective!](https://opencollective.com/fastlane/tiers/badge.svg)](https://opencollective.com/fastlane)
14
+ [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/fastlane/fastlane/badge)](https://scorecard.dev/viewer/?uri=github.com/fastlane/fastlane)
14
15
 
15
16
  _fastlane_ is a tool for iOS and Android developers to automate tedious tasks like generating screenshots, dealing with provisioning profiles, and releasing your application.
16
17
 
17
- <hr />
18
- <h2 align="center">
19
- ✨ All fastlane docs were moved to <a href="https://docs.fastlane.tools/">docs.fastlane.tools</a> ✨
20
- </h2>
21
- <hr />
22
-
23
18
  ## Need Help?
24
19
 
25
20
  Before submitting a new GitHub issue, please make sure to
@@ -29,212 +24,102 @@ Before submitting a new GitHub issue, please make sure to
29
24
 
30
25
  If the above doesn't help, please [submit an issue](https://github.com/fastlane/fastlane/issues) on GitHub and provide information about your setup, in particular the output of the `fastlane env` command.
31
26
 
32
- **Note**: If you want to report a regression in _fastlane_ (something that has worked before, but broke with a new release), please mark your issue title as such using `[Regression] Your title here`. This enables us to quickly detect and fix regressions.
33
-
34
27
  ## _fastlane_ team
35
28
 
36
29
  <!-- This table is regenerated and resorted on each release -->
30
+ <!-- team:start -->
37
31
  <table id='team'>
38
32
  <tr>
39
- <td id='iulian-onofrei'>
40
- <a href='https://github.com/revolter'>
41
- <img src='https://github.com/revolter.png' width='140px;'>
42
- </a>
43
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
44
- </td>
45
- <td id='helmut-januschka'>
46
- <a href='https://github.com/hjanuschka'>
47
- <img src='https://github.com/hjanuschka.png' width='140px;'>
48
- </a>
49
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
50
- </td>
51
- <td id='kohki-miki'>
52
- <a href='https://github.com/giginet'>
53
- <img src='https://github.com/giginet.png' width='140px;'>
54
- </a>
55
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
56
- </td>
57
- <td id='felix-krause'>
58
- <a href='https://github.com/KrauseFx'>
59
- <img src='https://github.com/KrauseFx.png' width='140px;'>
60
- </a>
61
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
62
- </td>
63
- <td id='olivier-halligon'>
64
- <a href='https://github.com/AliSoftware'>
65
- <img src='https://github.com/AliSoftware.png' width='140px;'>
66
- </a>
67
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
68
- </td>
69
- </tr>
70
- <tr>
71
- <td id='stefan-natchev'>
72
- <a href='https://github.com/snatchev'>
73
- <img src='https://github.com/snatchev.png' width='140px;'>
74
- </a>
75
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
76
- </td>
77
- <td id='łukasz-grabowski'>
78
- <a href='https://github.com/lucgrabowski'>
79
- <img src='https://github.com/lucgrabowski.png' width='140px;'>
33
+ <td id='jan-piotrowski'>
34
+ <a href='https://github.com/janpio'>
35
+ <img src='https://github.com/janpio.png?size=200' width='140'>
80
36
  </a>
81
- <h4 align='center'>Łukasz Grabowski</h4>
37
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
82
38
  </td>
83
- <td id='luka-mirosevic'>
84
- <a href='https://github.com/lmirosevic'>
85
- <img src='https://github.com/lmirosevic.png' width='140px;'>
39
+ <td id='jérôme-lacoste'>
40
+ <a href='https://github.com/lacostej'>
41
+ <img src='https://github.com/lacostej.png?size=200' width='140'>
86
42
  </a>
87
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
43
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
88
44
  </td>
89
45
  <td id='joshua-liebowitz'>
90
46
  <a href='https://github.com/taquitos'>
91
- <img src='https://github.com/taquitos.png' width='140px;'>
47
+ <img src='https://github.com/taquitos.png?size=200' width='140'>
92
48
  </a>
93
49
  <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
94
50
  </td>
95
- <td id='daniel-jankowski'>
96
- <a href='https://github.com/mollyIV'>
97
- <img src='https://github.com/mollyIV.png' width='140px;'>
98
- </a>
99
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
100
- </td>
101
- </tr>
102
- <tr>
103
- <td id='fumiya-nakamura'>
104
- <a href='https://github.com/nafu'>
105
- <img src='https://github.com/nafu.png' width='140px;'>
106
- </a>
107
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
108
- </td>
109
- <td id='manish-rathi'>
110
- <a href='https://github.com/crazymanish'>
111
- <img src='https://github.com/crazymanish.png' width='140px;'>
112
- </a>
113
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
114
- </td>
115
- <td id='maksym-grebenets'>
116
- <a href='https://github.com/mgrebenets'>
117
- <img src='https://github.com/mgrebenets.png' width='140px;'>
118
- </a>
119
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
120
- </td>
121
- <td id='matthew-ellis'>
122
- <a href='https://github.com/matthewellis'>
123
- <img src='https://github.com/matthewellis.png' width='140px;'>
51
+ <td id='josh-holtz'>
52
+ <a href='https://github.com/joshdholtz'>
53
+ <img src='https://github.com/joshdholtz.png?size=200' width='140'>
124
54
  </a>
125
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
55
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
126
56
  </td>
127
- <td id='satoshi-namai'>
128
- <a href='https://github.com/ainame'>
129
- <img src='https://github.com/ainame.png' width='140px;'>
57
+ <td id='stefan-natchev'>
58
+ <a href='https://github.com/snatchev'>
59
+ <img src='https://github.com/snatchev.png?size=200' width='140'>
130
60
  </a>
131
- <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
61
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
132
62
  </td>
133
63
  </tr>
134
64
  <tr>
135
- <td id='jimmy-dee'>
136
- <a href='https://github.com/jdee'>
137
- <img src='https://github.com/jdee.png' width='140px;'>
138
- </a>
139
- <h4 align='center'>Jimmy Dee</h4>
140
- </td>
141
- <td id='manu-wallner'>
142
- <a href='https://github.com/milch'>
143
- <img src='https://github.com/milch.png' width='140px;'>
144
- </a>
145
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
146
- </td>
147
- <td id='andrew-mcburney'>
148
- <a href='https://github.com/armcburney'>
149
- <img src='https://github.com/armcburney.png' width='140px;'>
150
- </a>
151
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
152
- </td>
153
- <td id='jan-piotrowski'>
154
- <a href='https://github.com/janpio'>
155
- <img src='https://github.com/janpio.png' width='140px;'>
156
- </a>
157
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
158
- </td>
159
- <td id='jorge-revuelta-h'>
160
- <a href='https://github.com/minuscorp'>
161
- <img src='https://github.com/minuscorp.png' width='140px;'>
65
+ <td id='olivier-halligon'>
66
+ <a href='https://github.com/AliSoftware'>
67
+ <img src='https://github.com/AliSoftware.png?size=200' width='140'>
162
68
  </a>
163
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
69
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
164
70
  </td>
165
- </tr>
166
- <tr>
167
- <td id='jérôme-lacoste'>
168
- <a href='https://github.com/lacostej'>
169
- <img src='https://github.com/lacostej.png' width='140px;'>
71
+ <td id='felix-krause'>
72
+ <a href='https://github.com/KrauseFx'>
73
+ <img src='https://github.com/KrauseFx.png?size=200' width='140'>
170
74
  </a>
171
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
75
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
172
76
  </td>
173
77
  <td id='connor-tumbleson'>
174
78
  <a href='https://github.com/ibotpeaches'>
175
- <img src='https://github.com/ibotpeaches.png' width='140px;'>
79
+ <img src='https://github.com/ibotpeaches.png?size=200' width='140'>
176
80
  </a>
177
81
  <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
178
82
  </td>
179
83
  <td id='roger-oba'>
180
84
  <a href='https://github.com/rogerluan'>
181
- <img src='https://github.com/rogerluan.png' width='140px;'>
85
+ <img src='https://github.com/rogerluan.png?size=200' width='140'>
182
86
  </a>
183
87
  <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
184
88
  </td>
185
- <td id='aaron-brager'>
186
- <a href='https://github.com/getaaron'>
187
- <img src='https://github.com/getaaron.png' width='140px;'>
188
- </a>
189
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
190
- </td>
191
- <td id='max-ott'>
192
- <a href='https://github.com/max-ott'>
193
- <img src='https://github.com/max-ott.png' width='140px;'>
194
- </a>
195
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
196
- </td>
197
89
  </tr>
198
- <tr>
199
- <td id='josh-holtz'>
200
- <a href='https://github.com/joshdholtz'>
201
- <img src='https://github.com/joshdholtz.png' width='140px;'>
202
- </a>
203
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
204
- </td>
205
- <td id='danielle-tomlinson'>
206
- <a href='https://github.com/endocrimes'>
207
- <img src='https://github.com/endocrimes.png' width='140px;'>
208
- </a>
209
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
210
- </td>
211
90
  </table>
212
91
 
92
+ ### _fastlane_ alumni
93
+
94
+ _fastlane_ wouldn't be what it is today without the countless hours these former team members have dedicated to the project ❤️
95
+
96
+ <p id='alumni'>
97
+ <a href='https://github.com/endocrimes'>Danielle Tomlinson</a>,
98
+ <a href='https://github.com/crazymanish'>Manish Rathi</a>,
99
+ <a href='https://github.com/ainame'>Satoshi Namai</a>,
100
+ <a href='https://github.com/giginet'>Kohki Miki</a>,
101
+ <a href='https://github.com/lmirosevic'>Luka Mirosevic</a>,
102
+ <a href='https://github.com/minuscorp'>Jorge Revuelta H</a>,
103
+ <a href='https://github.com/mollyIV'>Daniel Jankowski</a>,
104
+ <a href='https://github.com/armcburney'>Andrew McBurney</a>,
105
+ <a href='https://github.com/max-ott'>Max Ott</a>,
106
+ <a href='https://github.com/lucgrabowski'>Łukasz Grabowski</a>,
107
+ <a href='https://github.com/matthewellis'>Matthew Ellis</a>,
108
+ <a href='https://github.com/jdee'>Jimmy Dee</a>,
109
+ <a href='https://github.com/nafu'>Fumiya Nakamura</a>,
110
+ <a href='https://github.com/hjanuschka'>Helmut Januschka</a>,
111
+ <a href='https://github.com/milch'>Manu Wallner</a>,
112
+ <a href='https://github.com/getaaron'>Aaron Brager</a>,
113
+ <a href='https://github.com/mgrebenets'>Maksym Grebenets</a>,
114
+ <a href='https://github.com/revolter'>Iulian Onofrei</a>
115
+ </p>
116
+ <!-- team:end -->
117
+
213
118
  Special thanks to all [contributors](https://github.com/fastlane/fastlane/graphs/contributors) for extending and improving _fastlane_.
214
119
 
215
120
  ## Contribute to _fastlane_
216
121
 
217
- Check out [CONTRIBUTING.md](CONTRIBUTING.md) for more information on how to help with _fastlane_.
218
-
219
- ## Code of Conduct
220
-
221
- Help us keep _fastlane_ open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/fastlane/blob/master/CODE_OF_CONDUCT.md).
222
-
223
- ## Metrics
224
-
225
- _fastlane_ tracks a few key metrics to understand how developers are using the tool and to help us know what areas need improvement. No personal/sensitive information is ever collected. Metrics that are collected include:
226
-
227
- * The number of _fastlane_ runs
228
- * A salted hash of the app identifier or package name, which helps us anonymously identify unique usage of _fastlane_
229
- * How _fastlane_ is executed (Swift vs Ruby)
230
- * The _fastlane_ version
231
- * How _fastlane_ was installed (Homebrew, gem, bundler, etc)
232
- * The Ruby version
233
- * The Operating System in use
234
- * The Xcode version
235
- * Whether it was run in non-interactively or interactively
236
-
237
- You can easily opt-out of metrics collection by adding `opt_out_usage` at the top of your `Fastfile` or by setting the environment variable `FASTLANE_OPT_OUT_USAGE`. [Check out the metrics code on GitHub](https://github.com/fastlane/fastlane/tree/master/fastlane_core/lib/fastlane_core/analytics)
122
+ Check out [CONTRIBUTING.md](docs/CONTRIBUTING.md) or [CODE_OF_CONDUCT.md](./docs/CODE_OF_CONDUCT.md) for more information on how to help with _fastlane_.
238
123
 
239
124
  ## License
240
125
 
@@ -242,8 +127,3 @@ This project is licensed under the terms of the MIT license. See the [LICENSE](L
242
127
 
243
128
  > This project and all fastlane tools are in no way affiliated with Apple Inc. This project is open source under the MIT license, which means you have full access to the source code and can modify it to fit your own needs. All fastlane tools run on your own computer or server, so your credentials or other sensitive information will never leave your own computer. You are responsible for how you use fastlane tools.
244
129
 
245
- <hr />
246
- <h2 align="center">
247
- ✨ All fastlane docs were moved to <a href="https://docs.fastlane.tools/">docs.fastlane.tools</a> ✨
248
- </h2>
249
- <hr />
data/bin/fastlane CHANGED
@@ -1,7 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- if RUBY_VERSION < '3.0.0'
4
- abort("fastlane requires Ruby 3.0.0 or higher")
3
+ require "fastlane/version"
4
+
5
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new(Fastlane::MINIMUM_RUBY)
6
+ abort("fastlane requires Ruby #{Fastlane::MINIMUM_RUBY} or higher")
5
7
  end
6
8
 
7
9
  def self.windows?
@@ -55,7 +55,7 @@ puts data.password
55
55
  ```
56
56
 
57
57
  # Code of Conduct
58
- Help us keep _fastlane_ open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/fastlane/blob/master/CODE_OF_CONDUCT.md).
58
+ Help us keep _fastlane_ open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/fastlane/blob/master/docs/CODE_OF_CONDUCT.md).
59
59
 
60
60
  # License
61
61
 
@@ -50,8 +50,12 @@ module CredentialsManager
50
50
  end
51
51
 
52
52
  unless @password
53
- item = Security::InternetPassword.find(server: server_name)
54
- @password ||= item.password if item
53
+ begin
54
+ item = Security::InternetPassword.find(server: server_name)
55
+ @password ||= item.password if item
56
+ rescue Security::Error => ex
57
+ puts("Could not read the Keychain entry for user '#{user}': #{ex.message}".yellow)
58
+ end
55
59
  end
56
60
  ask_for_login while ask_if_missing && @password.to_s.length == 0
57
61
  return @password
@@ -220,9 +220,7 @@ module Deliver
220
220
  end
221
221
 
222
222
  def is_messages?
223
- # rubocop:disable Require/MissingRequireStatement
224
223
  return DisplayType::ALL_IMESSAGE.include?(self.display_type)
225
- # rubocop:enable Require/MissingRequireStatement
226
224
  end
227
225
 
228
226
  def self.calculate_display_type(path)
@@ -247,7 +245,6 @@ module Deliver
247
245
  is_2gen = path_lower.include?("app_ipad_pro_129") ||
248
246
  (path_lower.include?("12.9") && path_lower.include?("2nd generation")) # e.g. iPad Pro (12.9-inch) (2nd generation)
249
247
 
250
- # rubocop:disable Require/MissingRequireStatement
251
248
  if is_2gen
252
249
  return is_imessage ? DisplayType::IMESSAGE_APP_IPAD_PRO_129 : DisplayType::APP_IPAD_PRO_129
253
250
  else
@@ -256,7 +253,6 @@ module Deliver
256
253
  # Apple TV vs Vision Pro conflict
257
254
  when [3840, 2160]
258
255
  return path_lower.include?("vision") ? DisplayType::APP_APPLE_VISION_PRO : DisplayType::APP_APPLE_TV
259
- # rubocop:enable Require/MissingRequireStatement
260
256
  else
261
257
  matching_display_type
262
258
  end
@@ -133,7 +133,7 @@ module Deliver
133
133
  Deliver::Runner.new(options)
134
134
  html_path = Deliver::GenerateSummary.new.run(options)
135
135
  UI.success("Successfully generated HTML report at '#{html_path}'")
136
- system("open '#{html_path}'") unless options[:force]
136
+ system("open", html_path) unless options[:force]
137
137
  end
138
138
  end
139
139
 
@@ -83,7 +83,9 @@ module Deliver
83
83
  if options[:ipa]
84
84
  options[:platform] ||= FastlaneCore::IpaFileAnalyser.fetch_app_platform(options[:ipa])
85
85
  elsif options[:pkg]
86
- options[:platform] = 'osx'
86
+ # :pkg defaults to any *.pkg in the current directory, so only infer
87
+ # osx from it when the user hasn't chosen a platform themselves
88
+ options[:platform] = 'osx' unless options.specified?(:platform)
87
89
  end
88
90
  end
89
91
 
@@ -68,7 +68,14 @@ module Deliver
68
68
  end
69
69
 
70
70
  path = File.join(containing_folder, file_name)
71
- File.binwrite(path, URI.open(url).read)
71
+ # URI.open falls back to Kernel#open for anything that isn't a URL, which runs "|command" strings
72
+ uri = begin
73
+ URI.parse(url)
74
+ rescue URI::InvalidURIError
75
+ nil
76
+ end
77
+ UI.user_error!("Unexpected screenshot URL '#{url}'") unless uri.kind_of?(URI::HTTP)
78
+ File.binwrite(path, uri.read)
72
79
  end
73
80
  end
74
81
  end
@@ -24,7 +24,7 @@ module Deliver
24
24
  UI.important("Verifying the upload via the HTML file can be disabled by either adding")
25
25
  UI.important("`force true` to your Deliverfile or using `fastlane deliver --force`")
26
26
 
27
- system("open '#{html_path}'")
27
+ system("open", html_path)
28
28
  okay = UI.confirm("Does the Preview on path '#{html_path}' look okay for you?")
29
29
 
30
30
  if okay
@@ -420,6 +420,14 @@ module Deliver
420
420
  env_name: "DELIVER_APP_REVIEW_ATTACHMENT_FILE",
421
421
  description: "Metadata: Path to the app review attachment file",
422
422
  optional: true),
423
+ FastlaneCore::ConfigItem.new(key: :routing_app_coverage_file,
424
+ env_name: "DELIVER_ROUTING_APP_COVERAGE_FILE",
425
+ description: "Metadata: Path to the routing app coverage file (`.geojson`) that is required for routing apps",
426
+ optional: true,
427
+ verify_block: proc do |value|
428
+ UI.user_error!("Could not find routing app coverage file at path '#{File.expand_path(value)}'") unless File.exist?(value)
429
+ UI.user_error!("Routing app coverage file must be a .geojson file") unless File.extname(value).casecmp(".geojson").zero?
430
+ end),
423
431
  # Localised
424
432
  FastlaneCore::ConfigItem.new(key: :description,
425
433
  description: "Metadata: The localised app description",
@@ -1,3 +1,4 @@
1
+ require 'tmpdir'
1
2
  require 'precheck/options'
2
3
  require 'precheck/runner'
3
4
  require 'fastlane_core/configuration/configuration'
@@ -196,7 +197,7 @@ module Deliver
196
197
  package_path = FastlaneCore::IpaUploadPackageBuilder.new.generate(
197
198
  app_id: Deliver.cache[:app].id,
198
199
  ipa_path: ipa_path,
199
- package_path: "/tmp",
200
+ package_path: Dir.tmpdir,
200
201
  platform: platform
201
202
  )
202
203
  result = transporter.verify(package_path: package_path, asset_path: ipa_path, platform: platform)
@@ -204,7 +205,7 @@ module Deliver
204
205
  package_path = FastlaneCore::PkgUploadPackageBuilder.new.generate(
205
206
  app_id: Deliver.cache[:app].id,
206
207
  pkg_path: pkg_path,
207
- package_path: "/tmp",
208
+ package_path: Dir.tmpdir,
208
209
  platform: platform
209
210
  )
210
211
  result = transporter.verify(package_path: package_path, asset_path: pkg_path, platform: platform)
@@ -233,7 +234,7 @@ module Deliver
233
234
  package_path = FastlaneCore::IpaUploadPackageBuilder.new.generate(
234
235
  app_id: Deliver.cache[:app].id,
235
236
  ipa_path: ipa_path,
236
- package_path: "/tmp",
237
+ package_path: Dir.tmpdir,
237
238
  platform: platform
238
239
  )
239
240
  result = transporter.upload(package_path: package_path, asset_path: ipa_path, platform: platform)
@@ -241,7 +242,7 @@ module Deliver
241
242
  package_path = FastlaneCore::PkgUploadPackageBuilder.new.generate(
242
243
  app_id: Deliver.cache[:app].id,
243
244
  pkg_path: pkg_path,
244
- package_path: "/tmp",
245
+ package_path: Dir.tmpdir,
245
246
  platform: platform
246
247
  )
247
248
  result = transporter.upload(package_path: package_path, asset_path: pkg_path, platform: platform)
@@ -71,11 +71,11 @@ module Deliver
71
71
  def enable_localizations(locales)
72
72
  localizations = fetch_localizations
73
73
  locales_to_enable = locales - localizations.map(&:locale)
74
- Helper.show_loading_indicator("Activating localizations for #{locales_to_enable.join(', ')}...")
75
- locales_to_enable.each do |locale|
76
- version.create_app_store_version_localization(attributes: { locale: locale })
74
+ Helper.with_loading_indicator("Activating localizations for #{locales_to_enable.join(', ')}...") do
75
+ locales_to_enable.each do |locale|
76
+ version.create_app_store_version_localization(attributes: { locale: locale })
77
+ end
77
78
  end
78
- Helper.hide_loading_indicator
79
79
  end
80
80
 
81
81
  def replace_screenshots(iterator, screenshots, retries = 3)
@@ -127,35 +127,34 @@ module Deliver
127
127
 
128
128
  def wait_for_complete(iterator)
129
129
  retry_count = 0
130
- Helper.show_loading_indicator("Waiting for all the screenshots processed...")
131
- loop do
132
- failing_screenshots = []
133
- state_counts = iterator.each_app_screenshot.map { |_, _, app_screenshot| app_screenshot }.each_with_object({}) do |app_screenshot, hash|
134
- state = app_screenshot.asset_delivery_state['state']
135
- hash[state] ||= 0
136
- hash[state] += 1
137
- failing_screenshots << app_screenshot if app_screenshot.error?
130
+ Helper.with_loading_indicator("Waiting for all the screenshots processed...") do
131
+ loop do
132
+ failing_screenshots = []
133
+ state_counts = iterator.each_app_screenshot.map { |_, _, app_screenshot| app_screenshot }.each_with_object({}) do |app_screenshot, hash|
134
+ state = app_screenshot.asset_delivery_state['state']
135
+ hash[state] ||= 0
136
+ hash[state] += 1
137
+ failing_screenshots << app_screenshot if app_screenshot.error?
138
+ end
139
+
140
+ result = UploadResult.new(asset_delivery_state_counts: state_counts, failing_screenshots: failing_screenshots)
141
+ return result unless result.processing?
142
+
143
+ # sleep with exponential backoff
144
+ interval = 5 + (2**retry_count)
145
+ UI.message("There are still incomplete screenshots. Will check the states again in #{interval} secs - #{state_counts}")
146
+ sleep(interval)
147
+ retry_count += 1
138
148
  end
139
-
140
- result = UploadResult.new(asset_delivery_state_counts: state_counts, failing_screenshots: failing_screenshots)
141
- return result unless result.processing?
142
-
143
- # sleep with exponential backoff
144
- interval = 5 + (2**retry_count)
145
- UI.message("There are still incomplete screenshots. Will check the states again in #{interval} secs - #{state_counts}")
146
- sleep(interval)
147
- retry_count += 1
148
149
  end
149
- ensure
150
- Helper.hide_loading_indicator
151
150
  end
152
151
 
153
152
  def sort_screenshots(iterator)
154
- Helper.show_loading_indicator("Sorting screenshots uploaded...")
155
- sort_worker = create_sort_worker
156
- sort_worker.batch_enqueue(iterator.each_app_screenshot_set.to_a.map { |_, set| set })
157
- sort_worker.start
158
- Helper.hide_loading_indicator
153
+ Helper.with_loading_indicator("Sorting screenshots uploaded...") do
154
+ sort_worker = create_sort_worker
155
+ sort_worker.batch_enqueue(iterator.each_app_screenshot_set.to_a.map { |_, set| set })
156
+ sort_worker.start
157
+ end
159
158
  end
160
159
 
161
160
  private
@@ -93,9 +93,9 @@ module Deliver
93
93
 
94
94
  UI.verbose('Uploading jobs are completed')
95
95
 
96
- Helper.show_loading_indicator("Waiting for all the app clip header images to finish being processed...")
97
- wait_for_complete(app_clip_default_experience.id)
98
- Helper.hide_loading_indicator
96
+ Helper.with_loading_indicator("Waiting for all the app clip header images to finish being processed...") do
97
+ wait_for_complete(app_clip_default_experience.id)
98
+ end
99
99
 
100
100
  UI.message("Successfully uploaded all app clip header images")
101
101
  end