fastlane 2.216.0 → 2.218.0

Sign up to get free protection for your applications and to get access to all the features.
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"