fastlane 2.216.0 → 2.218.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 (189) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +96 -96
  3. data/deliver/lib/deliver/app_screenshot.rb +9 -2
  4. data/deliver/lib/deliver/app_screenshot_iterator.rb +2 -2
  5. data/deliver/lib/deliver/detect_values.rb +1 -1
  6. data/deliver/lib/deliver/languages.rb +1 -1
  7. data/deliver/lib/deliver/loader.rb +2 -2
  8. data/deliver/lib/deliver/options.rb +4 -4
  9. data/deliver/lib/deliver/runner.rb +3 -2
  10. data/deliver/lib/deliver/sync_screenshots.rb +2 -2
  11. data/deliver/lib/deliver/upload_metadata.rb +60 -15
  12. data/deliver/lib/deliver/upload_price_tier.rb +1 -1
  13. data/deliver/lib/deliver/upload_screenshots.rb +3 -3
  14. data/fastlane/lib/fastlane/action.rb +1 -1
  15. data/fastlane/lib/fastlane/actions/appledoc.rb +1 -1
  16. data/fastlane/lib/fastlane/actions/apteligent.rb +1 -1
  17. data/fastlane/lib/fastlane/actions/backup_xcarchive.rb +1 -1
  18. data/fastlane/lib/fastlane/actions/commit_github_file.rb +2 -2
  19. data/fastlane/lib/fastlane/actions/copy_artifacts.rb +1 -1
  20. data/fastlane/lib/fastlane/actions/create_app_online.rb +1 -1
  21. data/fastlane/lib/fastlane/actions/create_pull_request.rb +1 -1
  22. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +1 -1
  23. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +6 -2
  24. data/fastlane/lib/fastlane/actions/get_certificates.rb +1 -1
  25. data/fastlane/lib/fastlane/actions/get_github_release.rb +1 -1
  26. data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +1 -1
  27. data/fastlane/lib/fastlane/actions/git_branch.rb +1 -1
  28. data/fastlane/lib/fastlane/actions/github_api.rb +1 -1
  29. data/fastlane/lib/fastlane/actions/gradle.rb +1 -1
  30. data/fastlane/lib/fastlane/actions/install_on_device.rb +2 -2
  31. data/fastlane/lib/fastlane/actions/ipa.rb +1 -1
  32. data/fastlane/lib/fastlane/actions/jazzy.rb +1 -1
  33. data/fastlane/lib/fastlane/actions/nexus_upload.rb +1 -0
  34. data/fastlane/lib/fastlane/actions/notarize.rb +17 -2
  35. data/fastlane/lib/fastlane/actions/oclint.rb +3 -3
  36. data/fastlane/lib/fastlane/actions/opt_out_crash_reporting.rb +2 -2
  37. data/fastlane/lib/fastlane/actions/restore_file.rb +1 -1
  38. data/fastlane/lib/fastlane/actions/set_github_release.rb +1 -1
  39. data/fastlane/lib/fastlane/actions/slather.rb +18 -5
  40. data/fastlane/lib/fastlane/actions/sonar.rb +12 -3
  41. data/fastlane/lib/fastlane/actions/splunkmint.rb +1 -1
  42. data/fastlane/lib/fastlane/actions/spm.rb +76 -2
  43. data/fastlane/lib/fastlane/actions/update_info_plist.rb +1 -1
  44. data/fastlane/lib/fastlane/actions/update_urban_airship_configuration.rb +1 -1
  45. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +1 -0
  46. data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +1 -1
  47. data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +2 -2
  48. data/fastlane/lib/fastlane/actions/verify_build.rb +7 -4
  49. data/fastlane/lib/fastlane/actions/xcov.rb +1 -1
  50. data/fastlane/lib/fastlane/cli_tools_distributor.rb +1 -1
  51. data/fastlane/lib/fastlane/command_line_handler.rb +2 -4
  52. data/fastlane/lib/fastlane/commands_generator.rb +2 -2
  53. data/fastlane/lib/fastlane/fast_file.rb +1 -1
  54. data/fastlane/lib/fastlane/helper/dotenv_helper.rb +1 -1
  55. data/fastlane/lib/fastlane/helper/git_helper.rb +3 -0
  56. data/fastlane/lib/fastlane/junit_generator.rb +1 -1
  57. data/fastlane/lib/fastlane/lane.rb +9 -1
  58. data/fastlane/lib/fastlane/lane_manager.rb +1 -2
  59. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +0 -11
  60. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +5 -1
  61. data/fastlane/lib/fastlane/plugins/template/Gemfile.erb +27 -0
  62. data/fastlane/lib/fastlane/runner.rb +2 -2
  63. data/fastlane/lib/fastlane/setup/setup.rb +1 -1
  64. data/fastlane/lib/fastlane/swift_lane_manager.rb +2 -5
  65. data/fastlane/lib/fastlane/swift_runner_upgrader.rb +7 -4
  66. data/fastlane/lib/fastlane/version.rb +1 -1
  67. data/fastlane/swift/Actions.swift +1 -1
  68. data/fastlane/swift/Appfile.swift +1 -1
  69. data/fastlane/swift/ArgumentProcessor.swift +1 -1
  70. data/fastlane/swift/Atomic.swift +1 -1
  71. data/fastlane/swift/ControlCommand.swift +1 -1
  72. data/fastlane/swift/Deliverfile.swift +2 -2
  73. data/fastlane/swift/DeliverfileProtocol.swift +4 -4
  74. data/fastlane/swift/Fastlane.swift +99 -31
  75. data/fastlane/swift/Gymfile.swift +2 -2
  76. data/fastlane/swift/GymfileProtocol.swift +2 -2
  77. data/fastlane/swift/LaneFileProtocol.swift +5 -5
  78. data/fastlane/swift/MainProcess.swift +1 -1
  79. data/fastlane/swift/Matchfile.swift +2 -2
  80. data/fastlane/swift/MatchfileProtocol.swift +6 -2
  81. data/fastlane/swift/OptionalConfigValue.swift +1 -1
  82. data/fastlane/swift/Plugins.swift +1 -1
  83. data/fastlane/swift/Precheckfile.swift +2 -2
  84. data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
  85. data/fastlane/swift/RubyCommand.swift +1 -1
  86. data/fastlane/swift/RubyCommandable.swift +1 -1
  87. data/fastlane/swift/Runner.swift +1 -1
  88. data/fastlane/swift/RunnerArgument.swift +1 -1
  89. data/fastlane/swift/Scanfile.swift +2 -2
  90. data/fastlane/swift/ScanfileProtocol.swift +2 -2
  91. data/fastlane/swift/Screengrabfile.swift +2 -2
  92. data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
  93. data/fastlane/swift/Snapshotfile.swift +2 -2
  94. data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
  95. data/fastlane/swift/SocketClient.swift +1 -1
  96. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  97. data/fastlane/swift/SocketResponse.swift +1 -1
  98. data/fastlane/swift/formatting/Brewfile.lock.json +19 -29
  99. data/fastlane/swift/main.swift +1 -1
  100. data/fastlane_core/lib/fastlane_core/build_watcher.rb +1 -1
  101. data/fastlane_core/lib/fastlane_core/cert_checker.rb +3 -3
  102. data/fastlane_core/lib/fastlane_core/configuration/configuration_file.rb +1 -1
  103. data/fastlane_core/lib/fastlane_core/device_manager.rb +17 -15
  104. data/fastlane_core/lib/fastlane_core/fastlane_pty.rb +34 -12
  105. data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
  106. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +5 -2
  107. data/fastlane_core/lib/fastlane_core/project.rb +7 -2
  108. data/fastlane_core/lib/fastlane_core/queue_worker.rb +2 -2
  109. data/fastlane_core/lib/fastlane_core/string_filters.rb +6 -6
  110. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +2 -2
  111. data/frameit/lib/frameit/editor.rb +4 -4
  112. data/frameit/lib/frameit/trim_box.rb +1 -1
  113. data/gym/lib/gym/error_handler.rb +1 -1
  114. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +3 -3
  115. data/gym/lib/gym/module.rb +13 -2
  116. data/gym/lib/gym/options.rb +1 -1
  117. data/gym/lib/gym/runner.rb +1 -1
  118. data/gym/lib/gym/xcodebuild_fixes/README.md +1 -1
  119. data/match/lib/match/generator.rb +9 -1
  120. data/match/lib/match/module.rb +2 -1
  121. data/match/lib/match/options.rb +5 -0
  122. data/match/lib/match/portal_cache.rb +106 -0
  123. data/match/lib/match/portal_fetcher.rb +72 -0
  124. data/match/lib/match/profile_includes.rb +120 -0
  125. data/match/lib/match/runner.rb +79 -172
  126. data/match/lib/match/spaceship_ensure.rb +15 -11
  127. data/match/lib/match/storage/git_storage.rb +17 -4
  128. data/match/lib/match/storage/gitlab/client.rb +1 -1
  129. data/match/lib/match/storage/gitlab_secure_files.rb +1 -1
  130. data/match/lib/match/storage/interface.rb +1 -1
  131. data/match/lib/match/storage/s3_storage.rb +1 -1
  132. data/match/lib/match.rb +3 -0
  133. data/precheck/lib/precheck/rules/unreachable_urls_rule.rb +1 -1
  134. data/produce/lib/produce/itunes_connect.rb +1 -1
  135. data/scan/lib/scan/detect_values.rb +78 -20
  136. data/scan/lib/scan/options.rb +1 -1
  137. data/scan/lib/scan/runner.rb +1 -1
  138. data/screengrab/lib/screengrab/runner.rb +1 -1
  139. data/sigh/lib/assets/resign.sh +10 -10
  140. data/sigh/lib/sigh/commands_generator.rb +1 -1
  141. data/sigh/lib/sigh/module.rb +98 -0
  142. data/sigh/lib/sigh/options.rb +55 -1
  143. data/sigh/lib/sigh/resign.rb +1 -1
  144. data/sigh/lib/sigh/runner.rb +35 -111
  145. data/snapshot/lib/assets/SnapshotHelper.swift +13 -9
  146. data/snapshot/lib/snapshot/reports_generator.rb +48 -7
  147. data/snapshot/lib/snapshot/setup.rb +2 -2
  148. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +23 -22
  149. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -2
  150. data/spaceship/lib/spaceship/client.rb +1 -1
  151. data/spaceship/lib/spaceship/connect_api/api_client.rb +3 -2
  152. data/spaceship/lib/spaceship/connect_api/client.rb +4 -4
  153. data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +2 -0
  154. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +2 -2
  155. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +2 -0
  156. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +5 -5
  157. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +3 -3
  158. data/spaceship/lib/spaceship/connect_api/models/device.rb +83 -4
  159. data/spaceship/lib/spaceship/connect_api/models/profile.rb +5 -3
  160. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +14 -8
  161. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +3 -6
  162. data/spaceship/lib/spaceship/connect_api.rb +2 -0
  163. data/spaceship/lib/spaceship/portal/app.rb +1 -1
  164. data/spaceship/lib/spaceship/portal/app_group.rb +1 -1
  165. data/spaceship/lib/spaceship/test_flight/client.rb +1 -1
  166. data/spaceship/lib/spaceship/test_flight/tester.rb +1 -1
  167. data/spaceship/lib/spaceship/tunes/app_details.rb +2 -2
  168. data/spaceship/lib/spaceship/tunes/app_image.rb +1 -1
  169. data/spaceship/lib/spaceship/tunes/app_review_attachment.rb +1 -1
  170. data/spaceship/lib/spaceship/tunes/app_submission.rb +1 -1
  171. data/spaceship/lib/spaceship/tunes/app_version.rb +5 -5
  172. data/spaceship/lib/spaceship/tunes/build_details.rb +1 -1
  173. data/spaceship/lib/spaceship/tunes/iap.rb +3 -3
  174. data/spaceship/lib/spaceship/tunes/iap_detail.rb +2 -2
  175. data/spaceship/lib/spaceship/tunes/iap_families.rb +1 -1
  176. data/spaceship/lib/spaceship/tunes/iap_family_details.rb +2 -2
  177. data/spaceship/lib/spaceship/tunes/iap_family_list.rb +1 -1
  178. data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -2
  179. data/supply/lib/supply/client.rb +1 -1
  180. data/supply/lib/supply/setup.rb +1 -1
  181. data/supply/lib/supply/uploader.rb +28 -13
  182. data/trainer/lib/trainer/junit_generator.rb +1 -1
  183. data/trainer/lib/trainer/test_parser.rb +1 -1
  184. data/trainer/lib/trainer/xcresult.rb +1 -1
  185. metadata +27 -293
  186. data/fastlane/lib/fastlane/.features.rb.swp +0 -0
  187. data/fastlane/lib/fastlane/plugins/template/Gemfile +0 -6
  188. data/fastlane_core/lib/fastlane_core/.env.rb.swp +0 -0
  189. data/supply/lib/supply/.client.rb.swp +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1cc527ad069a43add010238027a76052c5c8e535480b610397275a5cfed1444c
4
- data.tar.gz: 9b2476a7c1289ce32993e1692b65938eb447ae7e90eecad30cfd0b8de1c7f808
3
+ metadata.gz: 207ef9c2fe4564f7949fc47ec3693583185a7cf46cdeebcab96485d4b0a9ffa1
4
+ data.tar.gz: 80053bd7ef7de964bf4b3ddeeab4698b149cf8bc2cccbe1355d5f8d49de541b2
5
5
  SHA512:
6
- metadata.gz: 649c768218e44d5cecd0388ad85edef22d0fd5e5480bee1b8f533d8335c7f65ece386da624eabf05a387cf401790c3b8cb252485c8a5cce4443ae1280f5ad386
7
- data.tar.gz: d4e8b6a6f72774af9bd93e7bf2500121ea9ec2d36b1a09627742a6a29a0b8ab2d56a6daa8eacaebc9adec6f1e494bf6c285e15b2e8021153f34f2a1009b376e3
6
+ metadata.gz: a9ea4c0b0093fcceed9e353ece98359675754b8ab17b7e2b2a8f3efd6da34f6ad012e7fb2aca9ff33c08022195e5fd271db52db6d51ca3dbbb6472bec76e95eb
7
+ data.tar.gz: edb1ba5f075dce4d8a43af1e12ef886f0c572f416255818f1878c5ea14cd93c5d67105882fc999a7d794f2ad1ab1e0a8293c35c028e72fa9254b9d28924074bf
data/README.md CHANGED
@@ -35,93 +35,81 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
35
35
  <!-- This table is regenerated and resorted on each release -->
36
36
  <table id='team'>
37
37
  <tr>
38
- <td id='danielle-tomlinson'>
39
- <a href='https://github.com/endocrimes'>
40
- <img src='https://github.com/endocrimes.png' width='140px;'>
41
- </a>
42
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
43
- </td>
44
- <td id='łukasz-grabowski'>
45
- <a href='https://github.com/lucgrabowski'>
46
- <img src='https://github.com/lucgrabowski.png' width='140px;'>
47
- </a>
48
- <h4 align='center'>Łukasz Grabowski</h4>
49
- </td>
50
- <td id='josh-holtz'>
51
- <a href='https://github.com/joshdholtz'>
52
- <img src='https://github.com/joshdholtz.png' width='140px;'>
53
- </a>
54
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
55
- </td>
56
- <td id='stefan-natchev'>
57
- <a href='https://github.com/snatchev'>
58
- <img src='https://github.com/snatchev.png' width='140px;'>
59
- </a>
60
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
61
- </td>
62
- <td id='daniel-jankowski'>
63
- <a href='https://github.com/mollyIV'>
64
- <img src='https://github.com/mollyIV.png' width='140px;'>
65
- </a>
66
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
67
- </td>
68
- </tr>
69
- <tr>
70
38
  <td id='roger-oba'>
71
39
  <a href='https://github.com/rogerluan'>
72
40
  <img src='https://github.com/rogerluan.png' width='140px;'>
73
41
  </a>
74
42
  <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
75
43
  </td>
76
- <td id='iulian-onofrei'>
77
- <a href='https://github.com/revolter'>
78
- <img src='https://github.com/revolter.png' width='140px;'>
79
- </a>
80
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
81
- </td>
82
44
  <td id='fumiya-nakamura'>
83
45
  <a href='https://github.com/nafu'>
84
46
  <img src='https://github.com/nafu.png' width='140px;'>
85
47
  </a>
86
48
  <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
87
49
  </td>
88
- <td id='jan-piotrowski'>
89
- <a href='https://github.com/janpio'>
90
- <img src='https://github.com/janpio.png' width='140px;'>
50
+ <td id='danielle-tomlinson'>
51
+ <a href='https://github.com/endocrimes'>
52
+ <img src='https://github.com/endocrimes.png' width='140px;'>
91
53
  </a>
92
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
54
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
93
55
  </td>
94
- <td id='luka-mirosevic'>
95
- <a href='https://github.com/lmirosevic'>
96
- <img src='https://github.com/lmirosevic.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;'>
97
59
  </a>
98
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
60
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
61
+ </td>
62
+ <td id='jorge-revuelta-h'>
63
+ <a href='https://github.com/minuscorp'>
64
+ <img src='https://github.com/minuscorp.png' width='140px;'>
65
+ </a>
66
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
99
67
  </td>
100
68
  </tr>
101
69
  <tr>
70
+ <td id='maksym-grebenets'>
71
+ <a href='https://github.com/mgrebenets'>
72
+ <img src='https://github.com/mgrebenets.png' width='140px;'>
73
+ </a>
74
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
75
+ </td>
102
76
  <td id='satoshi-namai'>
103
77
  <a href='https://github.com/ainame'>
104
78
  <img src='https://github.com/ainame.png' width='140px;'>
105
79
  </a>
106
80
  <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
107
81
  </td>
108
- <td id='jérôme-lacoste'>
109
- <a href='https://github.com/lacostej'>
110
- <img src='https://github.com/lacostej.png' width='140px;'>
82
+ <td id='matthew-ellis'>
83
+ <a href='https://github.com/matthewellis'>
84
+ <img src='https://github.com/matthewellis.png' width='140px;'>
111
85
  </a>
112
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
86
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
113
87
  </td>
114
- <td id='joshua-liebowitz'>
115
- <a href='https://github.com/taquitos'>
116
- <img src='https://github.com/taquitos.png' width='140px;'>
88
+ <td id='manu-wallner'>
89
+ <a href='https://github.com/milch'>
90
+ <img src='https://github.com/milch.png' width='140px;'>
117
91
  </a>
118
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
92
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
119
93
  </td>
120
- <td id='andrew-mcburney'>
121
- <a href='https://github.com/armcburney'>
122
- <img src='https://github.com/armcburney.png' width='140px;'>
94
+ <td id='łukasz-grabowski'>
95
+ <a href='https://github.com/lucgrabowski'>
96
+ <img src='https://github.com/lucgrabowski.png' width='140px;'>
123
97
  </a>
124
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
98
+ <h4 align='center'>Łukasz Grabowski</h4>
99
+ </td>
100
+ </tr>
101
+ <tr>
102
+ <td id='josh-holtz'>
103
+ <a href='https://github.com/joshdholtz'>
104
+ <img src='https://github.com/joshdholtz.png' width='140px;'>
105
+ </a>
106
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
107
+ </td>
108
+ <td id='kohki-miki'>
109
+ <a href='https://github.com/giginet'>
110
+ <img src='https://github.com/giginet.png' width='140px;'>
111
+ </a>
112
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
125
113
  </td>
126
114
  <td id='olivier-halligon'>
127
115
  <a href='https://github.com/AliSoftware'>
@@ -129,6 +117,18 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
129
117
  </a>
130
118
  <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
131
119
  </td>
120
+ <td id='manish-rathi'>
121
+ <a href='https://github.com/crazymanish'>
122
+ <img src='https://github.com/crazymanish.png' width='140px;'>
123
+ </a>
124
+ <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
125
+ </td>
126
+ <td id='andrew-mcburney'>
127
+ <a href='https://github.com/armcburney'>
128
+ <img src='https://github.com/armcburney.png' width='140px;'>
129
+ </a>
130
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
131
+ </td>
132
132
  </tr>
133
133
  <tr>
134
134
  <td id='helmut-januschka'>
@@ -137,69 +137,69 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
137
137
  </a>
138
138
  <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
139
139
  </td>
140
- <td id='aaron-brager'>
141
- <a href='https://github.com/getaaron'>
142
- <img src='https://github.com/getaaron.png' width='140px;'>
143
- </a>
144
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
145
- </td>
146
140
  <td id='felix-krause'>
147
141
  <a href='https://github.com/KrauseFx'>
148
142
  <img src='https://github.com/KrauseFx.png' width='140px;'>
149
143
  </a>
150
144
  <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
151
145
  </td>
152
- <td id='maksym-grebenets'>
153
- <a href='https://github.com/mgrebenets'>
154
- <img src='https://github.com/mgrebenets.png' width='140px;'>
146
+ <td id='jérôme-lacoste'>
147
+ <a href='https://github.com/lacostej'>
148
+ <img src='https://github.com/lacostej.png' width='140px;'>
155
149
  </a>
156
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
150
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
157
151
  </td>
158
- <td id='max-ott'>
159
- <a href='https://github.com/max-ott'>
160
- <img src='https://github.com/max-ott.png' width='140px;'>
152
+ <td id='aaron-brager'>
153
+ <a href='https://github.com/getaaron'>
154
+ <img src='https://github.com/getaaron.png' width='140px;'>
161
155
  </a>
162
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
156
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
157
+ </td>
158
+ <td id='joshua-liebowitz'>
159
+ <a href='https://github.com/taquitos'>
160
+ <img src='https://github.com/taquitos.png' width='140px;'>
161
+ </a>
162
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
163
163
  </td>
164
164
  </tr>
165
165
  <tr>
166
- <td id='manish-rathi'>
167
- <a href='https://github.com/crazymanish'>
168
- <img src='https://github.com/crazymanish.png' width='140px;'>
166
+ <td id='jimmy-dee'>
167
+ <a href='https://github.com/jdee'>
168
+ <img src='https://github.com/jdee.png' width='140px;'>
169
169
  </a>
170
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
170
+ <h4 align='center'>Jimmy Dee</h4>
171
171
  </td>
172
- <td id='jorge-revuelta-h'>
173
- <a href='https://github.com/minuscorp'>
174
- <img src='https://github.com/minuscorp.png' width='140px;'>
172
+ <td id='iulian-onofrei'>
173
+ <a href='https://github.com/revolter'>
174
+ <img src='https://github.com/revolter.png' width='140px;'>
175
175
  </a>
176
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
176
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
177
177
  </td>
178
- <td id='manu-wallner'>
179
- <a href='https://github.com/milch'>
180
- <img src='https://github.com/milch.png' width='140px;'>
178
+ <td id='stefan-natchev'>
179
+ <a href='https://github.com/snatchev'>
180
+ <img src='https://github.com/snatchev.png' width='140px;'>
181
181
  </a>
182
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
182
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
183
183
  </td>
184
- <td id='matthew-ellis'>
185
- <a href='https://github.com/matthewellis'>
186
- <img src='https://github.com/matthewellis.png' width='140px;'>
184
+ <td id='jan-piotrowski'>
185
+ <a href='https://github.com/janpio'>
186
+ <img src='https://github.com/janpio.png' width='140px;'>
187
187
  </a>
188
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
188
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
189
189
  </td>
190
- <td id='kohki-miki'>
191
- <a href='https://github.com/giginet'>
192
- <img src='https://github.com/giginet.png' width='140px;'>
190
+ <td id='daniel-jankowski'>
191
+ <a href='https://github.com/mollyIV'>
192
+ <img src='https://github.com/mollyIV.png' width='140px;'>
193
193
  </a>
194
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
194
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
195
195
  </td>
196
196
  </tr>
197
197
  <tr>
198
- <td id='jimmy-dee'>
199
- <a href='https://github.com/jdee'>
200
- <img src='https://github.com/jdee.png' width='140px;'>
198
+ <td id='luka-mirosevic'>
199
+ <a href='https://github.com/lmirosevic'>
200
+ <img src='https://github.com/lmirosevic.png' width='140px;'>
201
201
  </a>
202
- <h4 align='center'>Jimmy Dee</h4>
202
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
203
203
  </td>
204
204
  </table>
205
205
 
@@ -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"
@@ -128,6 +130,7 @@ module Deliver
128
130
  ScreenSize::IOS_APPLE_WATCH => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_SERIES_3,
129
131
  ScreenSize::IOS_APPLE_WATCH_SERIES4 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_SERIES_4,
130
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,
131
134
  ScreenSize::APPLE_TV => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_APPLE_TV
132
135
  }
133
136
  return matching[self.screen_size]
@@ -165,6 +168,7 @@ module Deliver
165
168
  ScreenSize::IOS_APPLE_WATCH => "Watch",
166
169
  ScreenSize::IOS_APPLE_WATCH_SERIES4 => "Watch Series4",
167
170
  ScreenSize::IOS_APPLE_WATCH_SERIES7 => "Watch Series7",
171
+ ScreenSize::IOS_APPLE_WATCH_ULTRA => "Watch Ultra",
168
172
  ScreenSize::APPLE_TV => "Apple TV"
169
173
  }
170
174
  return matching[self.screen_size]
@@ -197,7 +201,7 @@ module Deliver
197
201
 
198
202
  def self.device_messages
199
203
  # This list does not include iPad Pro 12.9-inch (3rd generation)
200
- # because it has same resoluation as IOS_IPAD_PRO and will clobber
204
+ # because it has same resolution as IOS_IPAD_PRO and will clobber
201
205
  return {
202
206
  ScreenSize::IOS_67_MESSAGES => [
203
207
  [1290, 2796],
@@ -261,7 +265,7 @@ module Deliver
261
265
  # reference: https://help.apple.com/app-store-connect/#/devd274dd925
262
266
  def self.devices
263
267
  # This list does not include iPad Pro 12.9-inch (3rd generation)
264
- # because it has same resoluation as IOS_IPAD_PRO and will clobber
268
+ # because it has same resolution as IOS_IPAD_PRO and will clobber
265
269
  return {
266
270
  ScreenSize::IOS_67 => [
267
271
  [1290, 2796],
@@ -340,6 +344,9 @@ module Deliver
340
344
  ScreenSize::IOS_APPLE_WATCH_SERIES7 => [
341
345
  [396, 484]
342
346
  ],
347
+ ScreenSize::IOS_APPLE_WATCH_ULTRA => [
348
+ [410, 502]
349
+ ],
343
350
  ScreenSize::APPLE_TV => [
344
351
  [1920, 1080],
345
352
  [3840, 2160]
@@ -1,5 +1,5 @@
1
1
  module Deliver
2
- # This is a convinient class that enumerates app store connect's screenshots in various degrees.
2
+ # This is a convenient class that enumerates app store connect's screenshots in various degrees.
3
3
  class AppScreenshotIterator
4
4
  NUMBER_OF_THREADS = Helper.test? ? 1 : [ENV.fetch("DELIVER_NUMBER_OF_THREADS", 10).to_i, 10].min
5
5
 
@@ -59,7 +59,7 @@ module Deliver
59
59
  # @yieldparam [optional, Spaceship::ConnectAPI::AppStoreVersionLocalization] localization
60
60
  # @yieldparam [optional, Spaceship::ConnectAPI::AppStoreScreenshotSet] app_screenshot_set
61
61
  # @yieldparam [optional, Deliver::AppScreenshot] screenshot
62
- # @yieldparam [optional, Integer] index a number reperesents which position the screenshot will be
62
+ # @yieldparam [optional, Integer] index a number represents which position the screenshot will be
63
63
  def each_local_screenshot(screenshots_per_language, &block)
64
64
  return enum_for(__method__, screenshots_per_language) unless block_given?
65
65
 
@@ -92,7 +92,7 @@ module Deliver
92
92
  return unless languages
93
93
 
94
94
  # 2020-08-24 - Available locales are not available as an endpoint in App Store Connect
95
- # Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is avilable)
95
+ # Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is available)
96
96
  all_languages = Deliver::Languages::ALL_LANGUAGES
97
97
  diff = languages - all_languages
98
98
 
@@ -1,7 +1,7 @@
1
1
  module Deliver
2
2
  module Languages
3
3
  # 2020-08-24 - Available locales are not available as an endpoint in App Store Connect
4
- # Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is avilable)
4
+ # Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is available)
5
5
  ALL_LANGUAGES = %w[ar-SA ca cs da de-DE el en-AU en-CA en-GB en-US es-ES es-MX fi fr-CA fr-FR he hi hr hu id it ja ko ms nl-NL no pl pt-BR pt-PT ro ru sk sv th tr uk vi zh-Hans zh-Hant]
6
6
  end
7
7
  end
@@ -31,7 +31,7 @@ module Deliver
31
31
 
32
32
  def self.available_languages
33
33
  # 2020-08-24 - Available locales are not available as an endpoint in App Store Connect
34
- # Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is avilable)
34
+ # Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is available)
35
35
  Deliver::Languages::ALL_LANGUAGES
36
36
  end
37
37
 
@@ -40,7 +40,7 @@ module Deliver
40
40
  end
41
41
 
42
42
  # @param path [String] A directory path otherwise this initializer fails
43
- # @param nested [Boolan] Whether given path is nested of another special directory.
43
+ # @param nested [Boolean] Whether given path is nested of another special directory.
44
44
  # This affects `expandable?` to return `false` when this set to `true`.
45
45
  def initialize(path, nested: false)
46
46
  raise(ArgumentError, "Given path must be a directory path - #{path}") unless File.directory?(path)
@@ -186,12 +186,12 @@ module Deliver
186
186
  # release
187
187
  FastlaneCore::ConfigItem.new(key: :automatic_release,
188
188
  env_name: "DELIVER_AUTOMATIC_RELEASE",
189
- description: "Should the app be automatically released once it's approved? (Can not be used together with `auto_release_date`)",
189
+ description: "Should the app be automatically released once it's approved? (Cannot be used together with `auto_release_date`)",
190
190
  type: Boolean,
191
191
  optional: true),
192
192
  FastlaneCore::ConfigItem.new(key: :auto_release_date,
193
193
  env_name: "DELIVER_AUTO_RELEASE_DATE",
194
- description: "Date in milliseconds for automatically releasing on pending approval (Can not be used together with `automatic_release`)",
194
+ description: "Date in milliseconds for automatically releasing on pending approval (Cannot be used together with `automatic_release`)",
195
195
  type: Integer,
196
196
  optional: true,
197
197
  conflicting_options: [:automatic_release],
@@ -201,7 +201,7 @@ module Deliver
201
201
  verify_block: proc do |value|
202
202
  now_in_ms = Time.now.to_i * 1000
203
203
  if value < now_in_ms
204
- UI.user_error!("'#{value}' needs to be in the future and in milliseonds (current time is '#{now_in_ms}')")
204
+ UI.user_error!("'#{value}' needs to be in the future and in milliseconds (current time is '#{now_in_ms}')")
205
205
  end
206
206
  end),
207
207
  FastlaneCore::ConfigItem.new(key: :phased_release,
@@ -311,7 +311,7 @@ module Deliver
311
311
 
312
312
  # App Metadata
313
313
  FastlaneCore::ConfigItem.new(key: :individual_metadata_items,
314
- env_name: "DELIVER_INDIVUDAL_METADATA_ITEMS",
314
+ env_names: ["DELIVER_INDIVUDAL_METADATA_ITEMS", "DELIVER_INDIVIDUAL_METADATA_ITEMS"], # The version with typo must be deprecated
315
315
  description: "An array of localized metadata items to upload individually by language so that errors can be identified. E.g. ['name', 'keywords', 'description']. Note: slow",
316
316
  deprecated: "Removed after the migration to the new App Store Connect API in June 2020",
317
317
  type: Array,
@@ -55,7 +55,7 @@ module Deliver
55
55
  verify_version if options[:app_version].to_s.length > 0 && !options[:skip_app_version_update]
56
56
 
57
57
  # Rejecting before upload meta
58
- # Screenshots can not be update/deleted if in waiting for review
58
+ # Screenshots cannot be updated or deleted if the app is in the "waiting for review" state
59
59
  reject_version_if_possible if options[:reject_if_possible]
60
60
 
61
61
  upload_metadata
@@ -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
 
@@ -45,7 +45,7 @@ module Deliver
45
45
 
46
46
  unless FastlaneCore::Feature.enabled?('FASTLANE_ENABLE_BETA_DELIVER_SYNC_SCREENSHOTS')
47
47
  UI.user_error!('Please set a value to "FASTLANE_ENABLE_BETA_DELIVER_SYNC_SCREENSHOTS" environment variable ' \
48
- 'if you acknowleage the risk and try this out.')
48
+ 'if you acknowledge the risk and try this out.')
49
49
  end
50
50
 
51
51
  UI.important("Will begin uploading snapshots for '#{version.version_string}' on App Store Connect")
@@ -106,7 +106,7 @@ module Deliver
106
106
  local_screenshots = iterator.each_local_screenshot(screenshots.group_by(&:language)).map do |localization, app_screenshot_set, screenshot, index|
107
107
  if index >= 10
108
108
  UI.user_error!("Found #{localization.locale} has more than 10 screenshots for #{app_screenshot_set.screenshot_display_type}. "\
109
- "Make sure containts only necessary screenshots.")
109
+ "Make sure contains only necessary screenshots.")
110
110
  end
111
111
  ScreenshotComparable.create_from_local(screenshot: screenshot, app_screenshot_set: app_screenshot_set)
112
112
  end
@@ -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
 
@@ -235,7 +237,7 @@ module Deliver
235
237
 
236
238
  mapped_values = {}
237
239
 
238
- # Only update primary and secondar category if explicitly set
240
+ # Only update primary and secondary category if explicitly set
239
241
  unless primary_category.empty?
240
242
  mapped = Spaceship::ConnectAPI::AppCategory.map_category_from_itc(
241
243
  primary_category
@@ -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.each do |key, localized_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(localized_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
 
@@ -654,7 +699,7 @@ module Deliver
654
699
  end
655
700
  UI.message("Setting the app's age rating...")
656
701
 
657
- # Maping from legacy ITC values to App Store Connect Values
702
+ # Mapping from legacy ITC values to App Store Connect Values
658
703
  mapped_values = {}
659
704
  attributes = {}
660
705
  json.each do |k, v|
@@ -19,7 +19,7 @@ module Deliver
19
19
  # As of 2020-09-14:
20
20
  # Official App Store Connect does not have an endpoint to get app prices for an app
21
21
  # Need to get prices from the app's relationships
22
- # Prices from app's relationship doess not have price tier so need to fetch app price with price tier relationship
22
+ # Prices from app's relationship does not have price tier so need to fetch app price with price tier relationship
23
23
  app_prices = app.prices
24
24
  if app_prices&.first
25
25
  app_price = Spaceship::ConnectAPI.get_app_price(app_price_id: app_prices.first.id, includes: "priceTier").first
@@ -85,7 +85,7 @@ module Deliver
85
85
  # Only delete screenshots if trying to upload
86
86
  next unless screenshots_per_language.keys.include?(localization.locale)
87
87
 
88
- UI.verbose("Queued delete sceeenshot set job for #{localization.locale} #{app_screenshot_set.screenshot_display_type}")
88
+ UI.verbose("Queued delete screenshot set job for #{localization.locale} #{app_screenshot_set.screenshot_display_type}")
89
89
  worker.enqueue(DeleteScreenshotSetJob.new(app_screenshot_set, localization))
90
90
  end
91
91
 
@@ -145,7 +145,7 @@ module Deliver
145
145
  if duplicate
146
146
  UI.message("Previous uploaded. Skipping '#{screenshot.path}'...")
147
147
  else
148
- UI.verbose("Queued upload sceeenshot job for #{localization.locale} #{app_screenshot_set.screenshot_display_type} #{screenshot.path}")
148
+ UI.verbose("Queued upload screenshot job for #{localization.locale} #{app_screenshot_set.screenshot_display_type} #{screenshot.path}")
149
149
  worker.enqueue(UploadScreenshotJob.new(app_screenshot_set, screenshot.path))
150
150
  number_of_screenshots_per_set[app_screenshot_set] += 1
151
151
  end
@@ -258,7 +258,7 @@ module Deliver
258
258
  # helper method so Spaceship::Tunes.client.available_languages is easier to test
259
259
  def self.available_languages
260
260
  # 2020-08-24 - Available locales are not available as an endpoint in App Store Connect
261
- # Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is avilable)
261
+ # Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is available)
262
262
  Deliver::Languages::ALL_LANGUAGES
263
263
  end
264
264
 
@@ -179,7 +179,7 @@ class String
179
179
 
180
180
  def markdown_clean_heredoc!
181
181
  self.chomp! # remove the last new line added by the heredoc
182
- self.dedent! # remove the leading whitespace (similar to the squigly heredoc `<<~`)
182
+ self.dedent! # remove the leading whitespace (similar to the squiggly heredoc `<<~`)
183
183
  end
184
184
 
185
185
  def dedent!
@@ -214,7 +214,7 @@ module Fastlane
214
214
  ],
215
215
  ignore: [
216
216
  "ignore/path/1",
217
- "ingore/path/2"
217
+ "ignore/path/2"
218
218
  ],
219
219
  options: "--keep-intermediate-files --search-undocumented-doc",
220
220
  warnings: "--warn-missing-output-path --warn-missing-company-id"