fastlane 2.240.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 (166) 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/sync_screenshots.rb +27 -28
  11. data/deliver/lib/deliver/upload_app_clip_default_experience_header_images.rb +3 -3
  12. data/deliver/lib/deliver/upload_metadata.rb +12 -16
  13. data/deliver/lib/deliver/upload_screenshots.rb +12 -14
  14. data/docs/README.md +25 -0
  15. data/fastlane/lib/assets/TeamTable.md.erb +28 -0
  16. data/fastlane/lib/fastlane/actions/appaloosa.rb +2 -1
  17. data/fastlane/lib/fastlane/actions/appium.rb +1 -1
  18. data/fastlane/lib/fastlane/actions/apteligent.rb +8 -1
  19. data/fastlane/lib/fastlane/actions/build_and_upload_to_appetize.rb +1 -1
  20. data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +3 -0
  21. data/fastlane/lib/fastlane/actions/danger.rb +5 -5
  22. data/fastlane/lib/fastlane/actions/docs/build_app.md +1 -2
  23. data/fastlane/lib/fastlane/actions/docs/create_app_online.md +1 -2
  24. data/fastlane/lib/fastlane/actions/docs/get_certificates.md +0 -2
  25. data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +1 -3
  26. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +13 -3
  27. data/fastlane/lib/fastlane/actions/ensure_no_debug_code.rb +2 -2
  28. data/fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb +1 -0
  29. data/fastlane/lib/fastlane/actions/github_api.rb +1 -2
  30. data/fastlane/lib/fastlane/actions/hg_commit_version_bump.rb +1 -1
  31. data/fastlane/lib/fastlane/actions/increment_build_number.rb +1 -1
  32. data/fastlane/lib/fastlane/actions/increment_version_number.rb +1 -1
  33. data/fastlane/lib/fastlane/actions/install_xcode_plugin.rb +16 -6
  34. data/fastlane/lib/fastlane/actions/lcov.rb +9 -2
  35. data/fastlane/lib/fastlane/actions/nexus_upload.rb +16 -4
  36. data/fastlane/lib/fastlane/actions/notification.rb +3 -2
  37. data/fastlane/lib/fastlane/actions/oclint.rb +8 -8
  38. data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +9 -4
  39. data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
  40. data/fastlane/lib/fastlane/actions/say.rb +2 -4
  41. data/fastlane/lib/fastlane/actions/set_pod_key.rb +3 -3
  42. data/fastlane/lib/fastlane/actions/sonar.rb +16 -16
  43. data/fastlane/lib/fastlane/actions/sourcedocs.rb +8 -8
  44. data/fastlane/lib/fastlane/actions/splunkmint.rb +8 -1
  45. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +1 -1
  46. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +5 -2
  47. data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +5 -2
  48. data/fastlane/lib/fastlane/actions/verify_build.rb +1 -4
  49. data/fastlane/lib/fastlane/actions/verify_pod_keys.rb +3 -1
  50. data/fastlane/lib/fastlane/actions/xcode_server_get_assets.rb +20 -19
  51. data/fastlane/lib/fastlane/actions/xcodebuild.rb +5 -6
  52. data/fastlane/lib/fastlane/actions/zip.rb +2 -1
  53. data/fastlane/lib/fastlane/auto_complete.rb +1 -1
  54. data/fastlane/lib/fastlane/cli_tools_distributor.rb +14 -0
  55. data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +23 -0
  56. data/fastlane/lib/fastlane/environment_printer.rb +12 -25
  57. data/fastlane/lib/fastlane/fast_file.rb +2 -1
  58. data/fastlane/lib/fastlane/fastlane_require.rb +5 -1
  59. data/fastlane/lib/fastlane/helper/sh_helper.rb +16 -6
  60. data/fastlane/lib/fastlane/new_action.rb +1 -1
  61. data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +1 -1
  62. data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +1 -1
  63. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +36 -4
  64. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -1
  65. data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +1 -1
  66. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +3 -7
  67. data/fastlane/lib/fastlane/swift_lane_manager.rb +22 -4
  68. data/fastlane/lib/fastlane/version.rb +3 -2
  69. data/fastlane/swift/Deliverfile.swift +1 -1
  70. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  71. data/fastlane/swift/Fastlane.swift +55 -9
  72. data/fastlane/swift/Gymfile.swift +1 -1
  73. data/fastlane/swift/GymfileProtocol.swift +1 -1
  74. data/fastlane/swift/MainProcess.swift +190 -20
  75. data/fastlane/swift/Matchfile.swift +1 -1
  76. data/fastlane/swift/MatchfileProtocol.swift +10 -3
  77. data/fastlane/swift/Precheckfile.swift +1 -1
  78. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  79. data/fastlane/swift/Scanfile.swift +1 -1
  80. data/fastlane/swift/ScanfileProtocol.swift +8 -1
  81. data/fastlane/swift/Screengrabfile.swift +1 -1
  82. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  83. data/fastlane/swift/Snapshotfile.swift +1 -1
  84. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  85. data/fastlane/swift/formatting/Rakefile +1 -0
  86. data/fastlane/swift/main.swift +4 -1
  87. data/fastlane_core/README.md +1 -1
  88. data/fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb +1 -17
  89. data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +23 -8
  90. data/fastlane_core/lib/fastlane_core/device_manager.rb +2 -2
  91. data/fastlane_core/lib/fastlane_core/helper.rb +34 -5
  92. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +0 -14
  93. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +31 -28
  94. data/fastlane_core/lib/fastlane_core/languages.rb +0 -1
  95. data/fastlane_core/lib/fastlane_core/print_table.rb +5 -2
  96. data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +10 -19
  97. data/fastlane_core/lib/fastlane_core/secrets.rb +77 -0
  98. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +3 -3
  99. data/fastlane_core/lib/fastlane_core/ui/github_issue_inspector_reporter.rb +1 -1
  100. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +2 -1
  101. data/fastlane_core/lib/fastlane_core.rb +1 -0
  102. data/frameit/lib/frameit/device.rb +1 -1
  103. data/frameit/lib/frameit/frame_downloader.rb +2 -0
  104. data/frameit/lib/frameit/runner.rb +3 -2
  105. data/frameit/lib/frameit/screenshot.rb +0 -1
  106. data/gym/lib/gym/generators/build_command_generator.rb +4 -4
  107. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +3 -3
  108. data/gym/lib/gym/runner.rb +1 -1
  109. data/internal/README.md +1 -1
  110. data/match/lib/match/encryption/openssl.rb +6 -2
  111. data/match/lib/match/generator.rb +1 -0
  112. data/match/lib/match/options.rb +13 -5
  113. data/match/lib/match/runner.rb +30 -3
  114. data/match/lib/match/storage/git_storage.rb +43 -7
  115. data/match/lib/match/storage/gitlab/secure_file.rb +2 -1
  116. data/match/lib/match/storage/interface.rb +8 -5
  117. data/pem/lib/pem/module.rb +0 -4
  118. data/precheck/lib/precheck/rule_processor.rb +1 -0
  119. data/produce/lib/produce/developer_center.rb +49 -2
  120. data/produce/lib/produce/itunes_connect.rb +1 -1
  121. data/produce/lib/produce/module.rb +21 -0
  122. data/produce/lib/produce/options.rb +17 -0
  123. data/produce/lib/produce/service.rb +3 -5
  124. data/produce/lib/produce.rb +0 -1
  125. data/scan/lib/scan/options.rb +7 -0
  126. data/scan/lib/scan/runner.rb +1 -1
  127. data/scan/lib/scan/test_command_generator.rb +12 -9
  128. data/scan/lib/scan/test_result_parser.rb +1 -0
  129. data/scan/lib/scan/xcpretty_reporter_options_generator.rb +2 -2
  130. data/screengrab/lib/screengrab/page.html.erb +12 -7
  131. data/screengrab/lib/screengrab/reports_generator.rb +1 -1
  132. data/sigh/lib/assets/resign.sh +17 -0
  133. data/sigh/lib/sigh/local_manage.rb +1 -1
  134. data/sigh/lib/sigh/options.rb +5 -0
  135. data/sigh/lib/sigh/resign.rb +3 -3
  136. data/sigh/lib/sigh/runner.rb +6 -1
  137. data/snapshot/lib/snapshot/page.html.erb +17 -12
  138. data/snapshot/lib/snapshot/reports_generator.rb +1 -1
  139. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +1 -1
  140. data/snapshot/lib/snapshot.rb +0 -2
  141. data/spaceship/README.md +2 -3
  142. data/spaceship/lib/spaceship/base.rb +3 -1
  143. data/spaceship/lib/spaceship/client.rb +65 -47
  144. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +13 -2
  145. data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +6 -0
  146. data/spaceship/lib/spaceship/connect_api/models/profile.rb +7 -5
  147. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +25 -0
  148. data/spaceship/lib/spaceship/du/upload_file.rb +1 -1
  149. data/spaceship/lib/spaceship/errors.rb +7 -1
  150. data/spaceship/lib/spaceship/globals.rb +2 -2
  151. data/spaceship/lib/spaceship/portal/merchant.rb +127 -2
  152. data/spaceship/lib/spaceship/portal/portal_client.rb +58 -0
  153. data/spaceship/lib/spaceship/portal/ui/select_team.rb +0 -2
  154. data/spaceship/lib/spaceship/portal/website_push.rb +8 -2
  155. data/spaceship/lib/spaceship/test_flight/client.rb +0 -22
  156. data/spaceship/lib/spaceship/test_flight.rb +0 -1
  157. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +11 -0
  158. data/supply/lib/supply/options.rb +1 -0
  159. data/supply/lib/supply.rb +0 -1
  160. metadata +75 -43
  161. data/produce/lib/produce/available_default_languages.rb +0 -62
  162. data/snapshot/lib/snapshot/screenshot_flatten.rb +0 -20
  163. data/snapshot/lib/snapshot/screenshot_rotate.rb +0 -36
  164. data/spaceship/lib/spaceship/test_flight/app_test_info.rb +0 -40
  165. data/supply/lib/supply/apk_listing.rb +0 -14
  166. /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: 7467cf01821db5d82582d55e830e209b07d0c3ed4793686fb31e91bba27b66a1
4
- data.tar.gz: b517b0bdb057a42827caa42ba504cd450d3e40169c8191c280cee8c6ab2544b8
3
+ metadata.gz: 696cd16eb3defc78305bdebccbc787402841c1105199cfd437d15f019e617024
4
+ data.tar.gz: ab772bcd92b21da5da03746f3e7bdab86e60f5ff6771696e2beb5cbd5c673b4d
5
5
  SHA512:
6
- metadata.gz: 683a57ea89b9bf4ae28def60d5bbfaa5221081dac34e840bf4c597f3788f7b8c295237a0862847a519aedd28ef51ffa7fb4da1a576afd2654e5548761ccf4b51
7
- data.tar.gz: 9c436bf7d1ba66d55a8d68aeb38caf6d3c1d56fd5c48c90cd5642865163d80ddbe367f0b9cc4ddd18477b9f95d40ed733b9965cc42a9f16928774c490114ebd7
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='danielle-tomlinson'>
40
- <a href='https://github.com/endocrimes'>
41
- <img src='https://github.com/endocrimes.png' width='140px;'>
42
- </a>
43
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
44
- </td>
45
- <td id='connor-tumbleson'>
46
- <a href='https://github.com/ibotpeaches'>
47
- <img src='https://github.com/ibotpeaches.png' width='140px;'>
48
- </a>
49
- <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
50
- </td>
51
- <td id='luka-mirosevic'>
52
- <a href='https://github.com/lmirosevic'>
53
- <img src='https://github.com/lmirosevic.png' width='140px;'>
54
- </a>
55
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
56
- </td>
57
- <td id='iulian-onofrei'>
58
- <a href='https://github.com/revolter'>
59
- <img src='https://github.com/revolter.png' width='140px;'>
60
- </a>
61
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
62
- </td>
63
- <td id='fumiya-nakamura'>
64
- <a href='https://github.com/nafu'>
65
- <img src='https://github.com/nafu.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'>
66
36
  </a>
67
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
37
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
68
38
  </td>
69
- </tr>
70
- <tr>
71
39
  <td id='jérôme-lacoste'>
72
40
  <a href='https://github.com/lacostej'>
73
- <img src='https://github.com/lacostej.png' width='140px;'>
41
+ <img src='https://github.com/lacostej.png?size=200' width='140'>
74
42
  </a>
75
43
  <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
76
44
  </td>
77
- <td id='aaron-brager'>
78
- <a href='https://github.com/getaaron'>
79
- <img src='https://github.com/getaaron.png' width='140px;'>
80
- </a>
81
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
82
- </td>
83
- <td id='jimmy-dee'>
84
- <a href='https://github.com/jdee'>
85
- <img src='https://github.com/jdee.png' width='140px;'>
86
- </a>
87
- <h4 align='center'>Jimmy Dee</h4>
88
- </td>
89
- <td id='roger-oba'>
90
- <a href='https://github.com/rogerluan'>
91
- <img src='https://github.com/rogerluan.png' width='140px;'>
92
- </a>
93
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
94
- </td>
95
- <td id='matthew-ellis'>
96
- <a href='https://github.com/matthewellis'>
97
- <img src='https://github.com/matthewellis.png' width='140px;'>
98
- </a>
99
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
100
- </td>
101
- </tr>
102
- <tr>
103
- <td id='max-ott'>
104
- <a href='https://github.com/max-ott'>
105
- <img src='https://github.com/max-ott.png' width='140px;'>
106
- </a>
107
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
108
- </td>
109
- <td id='daniel-jankowski'>
110
- <a href='https://github.com/mollyIV'>
111
- <img src='https://github.com/mollyIV.png' width='140px;'>
112
- </a>
113
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
114
- </td>
115
- <td id='manish-rathi'>
116
- <a href='https://github.com/crazymanish'>
117
- <img src='https://github.com/crazymanish.png' width='140px;'>
45
+ <td id='joshua-liebowitz'>
46
+ <a href='https://github.com/taquitos'>
47
+ <img src='https://github.com/taquitos.png?size=200' width='140'>
118
48
  </a>
119
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
49
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
120
50
  </td>
121
- <td id='manu-wallner'>
122
- <a href='https://github.com/milch'>
123
- <img src='https://github.com/milch.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/acrooow'>Manu Wallner</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='maksym-grebenets'>
136
- <a href='https://github.com/mgrebenets'>
137
- <img src='https://github.com/mgrebenets.png' width='140px;'>
138
- </a>
139
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
140
- </td>
141
65
  <td id='olivier-halligon'>
142
66
  <a href='https://github.com/AliSoftware'>
143
- <img src='https://github.com/AliSoftware.png' width='140px;'>
67
+ <img src='https://github.com/AliSoftware.png?size=200' width='140'>
144
68
  </a>
145
69
  <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
146
70
  </td>
147
- <td id='josh-holtz'>
148
- <a href='https://github.com/joshdholtz'>
149
- <img src='https://github.com/joshdholtz.png' width='140px;'>
150
- </a>
151
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</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
71
  <td id='felix-krause'>
160
72
  <a href='https://github.com/KrauseFx'>
161
- <img src='https://github.com/KrauseFx.png' width='140px;'>
73
+ <img src='https://github.com/KrauseFx.png?size=200' width='140'>
162
74
  </a>
163
75
  <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
164
76
  </td>
165
- </tr>
166
- <tr>
167
- <td id='joshua-liebowitz'>
168
- <a href='https://github.com/taquitos'>
169
- <img src='https://github.com/taquitos.png' width='140px;'>
170
- </a>
171
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
172
- </td>
173
- <td id='łukasz-grabowski'>
174
- <a href='https://github.com/lucgrabowski'>
175
- <img src='https://github.com/lucgrabowski.png' width='140px;'>
176
- </a>
177
- <h4 align='center'>Łukasz Grabowski</h4>
178
- </td>
179
- <td id='helmut-januschka'>
180
- <a href='https://github.com/hjanuschka'>
181
- <img src='https://github.com/hjanuschka.png' width='140px;'>
182
- </a>
183
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
184
- </td>
185
- <td id='stefan-natchev'>
186
- <a href='https://github.com/snatchev'>
187
- <img src='https://github.com/snatchev.png' width='140px;'>
77
+ <td id='connor-tumbleson'>
78
+ <a href='https://github.com/ibotpeaches'>
79
+ <img src='https://github.com/ibotpeaches.png?size=200' width='140'>
188
80
  </a>
189
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
81
+ <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
190
82
  </td>
191
- <td id='kohki-miki'>
192
- <a href='https://github.com/giginet'>
193
- <img src='https://github.com/giginet.png' width='140px;'>
83
+ <td id='roger-oba'>
84
+ <a href='https://github.com/rogerluan'>
85
+ <img src='https://github.com/rogerluan.png?size=200' width='140'>
194
86
  </a>
195
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
87
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
196
88
  </td>
197
89
  </tr>
198
- <tr>
199
- <td id='jorge-revuelta-h'>
200
- <a href='https://github.com/minuscorp'>
201
- <img src='https://github.com/minuscorp.png' width='140px;'>
202
- </a>
203
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
204
- </td>
205
- <td id='andrew-mcburney'>
206
- <a href='https://github.com/armcburney'>
207
- <img src='https://github.com/armcburney.png' width='140px;'>
208
- </a>
209
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</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.1.0'
4
- abort("fastlane requires Ruby 3.1.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
@@ -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
@@ -535,16 +535,14 @@ module Deliver
535
535
  if locales_to_enable.count > 0
536
536
  lng_text = "language"
537
537
  lng_text += "s" if locales_to_enable.count != 1
538
- Helper.show_loading_indicator("Activating info #{lng_text} #{locales_to_enable.join(', ')}...")
539
-
540
- locales_to_enable.each do |locale|
541
- app_info.create_app_info_localization(attributes: {
542
- locale: locale
543
- })
538
+ Helper.with_loading_indicator("Activating info #{lng_text} #{locales_to_enable.join(', ')}...") do
539
+ locales_to_enable.each do |locale|
540
+ app_info.create_app_info_localization(attributes: {
541
+ locale: locale
542
+ })
543
+ end
544
544
  end
545
545
 
546
- Helper.hide_loading_indicator
547
-
548
546
  # Refresh version localizations
549
547
  localizations = app_info.get_app_info_localizations
550
548
  end
@@ -570,16 +568,14 @@ module Deliver
570
568
  if locales_to_enable.count > 0
571
569
  lng_text = "language"
572
570
  lng_text += "s" if locales_to_enable.count != 1
573
- Helper.show_loading_indicator("Activating version #{lng_text} #{locales_to_enable.join(', ')}...")
574
-
575
- locales_to_enable.each do |locale|
576
- version.create_app_store_version_localization(attributes: {
577
- locale: locale
578
- })
571
+ Helper.with_loading_indicator("Activating version #{lng_text} #{locales_to_enable.join(', ')}...") do
572
+ locales_to_enable.each do |locale|
573
+ version.create_app_store_version_localization(attributes: {
574
+ locale: locale
575
+ })
576
+ end
579
577
  end
580
578
 
581
- Helper.hide_loading_indicator
582
-
583
579
  # Refresh version localizations
584
580
  localizations = version.get_app_store_version_localizations
585
581
  end
@@ -41,25 +41,23 @@ module Deliver
41
41
  if locales_to_enable.count > 0
42
42
  lng_text = "language"
43
43
  lng_text += "s" if locales_to_enable.count != 1
44
- Helper.show_loading_indicator("Activating #{lng_text} #{locales_to_enable.join(', ')}...")
45
-
46
- locales_to_enable.each do |locale|
47
- version.create_app_store_version_localization(attributes: {
48
- locale: locale
49
- })
44
+ Helper.with_loading_indicator("Activating #{lng_text} #{locales_to_enable.join(', ')}...") do
45
+ locales_to_enable.each do |locale|
46
+ version.create_app_store_version_localization(attributes: {
47
+ locale: locale
48
+ })
49
+ end
50
50
  end
51
51
 
52
- Helper.hide_loading_indicator
53
-
54
52
  # Refresh version localizations
55
53
  localizations = version.get_app_store_version_localizations
56
54
  end
57
55
 
58
56
  upload_screenshots(localizations, screenshots_per_language, options[:screenshot_processing_timeout])
59
57
 
60
- Helper.show_loading_indicator("Sorting screenshots uploaded...")
61
- sort_screenshots(localizations)
62
- Helper.hide_loading_indicator
58
+ Helper.with_loading_indicator("Sorting screenshots uploaded...") do
59
+ sort_screenshots(localizations)
60
+ end
63
61
 
64
62
  UI.success("Successfully uploaded screenshots to App Store Connect")
65
63
  end
@@ -159,9 +157,9 @@ module Deliver
159
157
 
160
158
  UI.verbose('Uploading jobs are completed')
161
159
 
162
- Helper.show_loading_indicator("Waiting for all the screenshots to finish being processed...")
163
- states = wait_for_complete(iterator, timeout_seconds)
164
- Helper.hide_loading_indicator
160
+ states = Helper.with_loading_indicator("Waiting for all the screenshots to finish being processed...") do
161
+ wait_for_complete(iterator, timeout_seconds)
162
+ end
165
163
  retry_upload_screenshots_if_needed(iterator, states, total_number_of_screenshots, tries, timeout_seconds, localizations, screenshots_per_language)
166
164
 
167
165
  UI.message("Successfully uploaded all screenshots")
data/docs/README.md ADDED
@@ -0,0 +1,25 @@
1
+ <h3 align="center">
2
+ <a href="https://github.com/fastlane/fastlane/blob/master/fastlane/assets/fastlane_text.png">
3
+ <img src="https://github.com/fastlane/fastlane/blob/master/fastlane/assets/fastlane_text.png?raw=true" alt="fastlane Logo" width="500">
4
+ </a>
5
+ </h3>
6
+
7
+ # _fastlane_ Documentation
8
+
9
+ ## Contributing
10
+
11
+ - [Contributing to _fastlane_](CONTRIBUTING.md)
12
+ - [Designing _fastlane_ code](Design.md)
13
+ - [Tooling and Debugging](ToolsAndDebugging.md)
14
+
15
+ ## Testing
16
+
17
+ - [Testing _fastlane_](Testing.md)
18
+ - [When a spec passes alone and fails in the split](ParallelTesting.md)
19
+
20
+ ## Project
21
+
22
+ - [_fastlane_'s Philosophy](VISION.md)
23
+ - [Maintaining _fastlane_](Maintaining.md)
24
+ - [Code of Conduct](CODE_OF_CONDUCT.md)
25
+ - [Security Policy](SECURITY.md)