fastlane_hotfix 2.165.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 (868) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -0
  3. data/LICENSE +21 -0
  4. data/README.md +208 -0
  5. data/bin/bin-proxy +19 -0
  6. data/bin/fastlane +23 -0
  7. data/cert/README.md +17 -0
  8. data/cert/lib/cert.rb +4 -0
  9. data/cert/lib/cert/commands_generator.rb +60 -0
  10. data/cert/lib/cert/module.rb +16 -0
  11. data/cert/lib/cert/options.rb +132 -0
  12. data/cert/lib/cert/runner.rb +239 -0
  13. data/credentials_manager/README.md +64 -0
  14. data/credentials_manager/lib/credentials_manager.rb +7 -0
  15. data/credentials_manager/lib/credentials_manager/account_manager.rb +157 -0
  16. data/credentials_manager/lib/credentials_manager/appfile_config.rb +196 -0
  17. data/credentials_manager/lib/credentials_manager/cli.rb +69 -0
  18. data/deliver/README.md +17 -0
  19. data/deliver/lib/assets/DeliverfileDefault +3 -0
  20. data/deliver/lib/assets/DeliverfileDefault.swift +13 -0
  21. data/deliver/lib/assets/ScreenshotsHelp +7 -0
  22. data/deliver/lib/assets/summary.html.erb +299 -0
  23. data/deliver/lib/deliver.rb +15 -0
  24. data/deliver/lib/deliver/app_screenshot.rb +354 -0
  25. data/deliver/lib/deliver/app_screenshot_iterator.rb +95 -0
  26. data/deliver/lib/deliver/commands_generator.rb +190 -0
  27. data/deliver/lib/deliver/detect_values.rb +102 -0
  28. data/deliver/lib/deliver/download_screenshots.rb +76 -0
  29. data/deliver/lib/deliver/generate_summary.rb +13 -0
  30. data/deliver/lib/deliver/html_generator.rb +78 -0
  31. data/deliver/lib/deliver/languages.rb +7 -0
  32. data/deliver/lib/deliver/loader.rb +55 -0
  33. data/deliver/lib/deliver/module.rb +18 -0
  34. data/deliver/lib/deliver/options.rb +465 -0
  35. data/deliver/lib/deliver/queue_worker.rb +49 -0
  36. data/deliver/lib/deliver/runner.rb +233 -0
  37. data/deliver/lib/deliver/setup.rb +199 -0
  38. data/deliver/lib/deliver/submit_for_review.rb +214 -0
  39. data/deliver/lib/deliver/upload_metadata.rb +688 -0
  40. data/deliver/lib/deliver/upload_price_tier.rb +40 -0
  41. data/deliver/lib/deliver/upload_screenshots.rb +333 -0
  42. data/fastlane/README.md +11 -0
  43. data/fastlane/lib/assets/ActionDetails.md.erb +106 -0
  44. data/fastlane/lib/assets/Actions.md.erb +43 -0
  45. data/fastlane/lib/assets/AppfileTemplate +6 -0
  46. data/fastlane/lib/assets/AppfileTemplate.swift +7 -0
  47. data/fastlane/lib/assets/AppfileTemplateAndroid +2 -0
  48. data/fastlane/lib/assets/DefaultFastfileTemplate +20 -0
  49. data/fastlane/lib/assets/DefaultFastfileTemplate.swift +13 -0
  50. data/fastlane/lib/assets/completions/completion.bash +23 -0
  51. data/fastlane/lib/assets/completions/completion.fish +39 -0
  52. data/fastlane/lib/assets/completions/completion.sh +12 -0
  53. data/fastlane/lib/assets/completions/completion.zsh +23 -0
  54. data/fastlane/lib/assets/custom_action_template.rb +82 -0
  55. data/fastlane/lib/assets/mailgun_html_template.erb +142 -0
  56. data/fastlane/lib/assets/report_template.xml.erb +15 -0
  57. data/fastlane/lib/assets/s3_html_template.erb +105 -0
  58. data/fastlane/lib/assets/s3_plist_template.erb +31 -0
  59. data/fastlane/lib/assets/s3_version_template.erb +4 -0
  60. data/fastlane/lib/fastlane.rb +53 -0
  61. data/fastlane/lib/fastlane/action.rb +198 -0
  62. data/fastlane/lib/fastlane/action_collector.rb +35 -0
  63. data/fastlane/lib/fastlane/actions/README.md +5 -0
  64. data/fastlane/lib/fastlane/actions/actions_helper.rb +185 -0
  65. data/fastlane/lib/fastlane/actions/adb.rb +78 -0
  66. data/fastlane/lib/fastlane/actions/adb_devices.rb +71 -0
  67. data/fastlane/lib/fastlane/actions/add_extra_platforms.rb +45 -0
  68. data/fastlane/lib/fastlane/actions/add_git_tag.rb +122 -0
  69. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +249 -0
  70. data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +134 -0
  71. data/fastlane/lib/fastlane/actions/appaloosa.rb +266 -0
  72. data/fastlane/lib/fastlane/actions/appetize.rb +188 -0
  73. data/fastlane/lib/fastlane/actions/appetize_viewing_url_generator.rb +146 -0
  74. data/fastlane/lib/fastlane/actions/appium.rb +206 -0
  75. data/fastlane/lib/fastlane/actions/appledoc.rb +226 -0
  76. data/fastlane/lib/fastlane/actions/appstore.rb +14 -0
  77. data/fastlane/lib/fastlane/actions/apteligent.rb +105 -0
  78. data/fastlane/lib/fastlane/actions/artifactory.rb +157 -0
  79. data/fastlane/lib/fastlane/actions/automatic_code_signing.rb +226 -0
  80. data/fastlane/lib/fastlane/actions/backup_file.rb +41 -0
  81. data/fastlane/lib/fastlane/actions/backup_xcarchive.rb +135 -0
  82. data/fastlane/lib/fastlane/actions/badge.rb +155 -0
  83. data/fastlane/lib/fastlane/actions/build_and_upload_to_appetize.rb +107 -0
  84. data/fastlane/lib/fastlane/actions/build_android_app.rb +14 -0
  85. data/fastlane/lib/fastlane/actions/build_app.rb +165 -0
  86. data/fastlane/lib/fastlane/actions/build_ios_app.rb +47 -0
  87. data/fastlane/lib/fastlane/actions/build_mac_app.rb +46 -0
  88. data/fastlane/lib/fastlane/actions/bundle_install.rb +156 -0
  89. data/fastlane/lib/fastlane/actions/capture_android_screenshots.rb +63 -0
  90. data/fastlane/lib/fastlane/actions/capture_ios_screenshots.rb +61 -0
  91. data/fastlane/lib/fastlane/actions/capture_screenshots.rb +14 -0
  92. data/fastlane/lib/fastlane/actions/carthage.rb +230 -0
  93. data/fastlane/lib/fastlane/actions/cert.rb +14 -0
  94. data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +197 -0
  95. data/fastlane/lib/fastlane/actions/chatwork.rb +94 -0
  96. data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +54 -0
  97. data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +72 -0
  98. data/fastlane/lib/fastlane/actions/clean_cocoapods_cache.rb +52 -0
  99. data/fastlane/lib/fastlane/actions/clear_derived_data.rb +70 -0
  100. data/fastlane/lib/fastlane/actions/clipboard.rb +52 -0
  101. data/fastlane/lib/fastlane/actions/cloc.rb +89 -0
  102. data/fastlane/lib/fastlane/actions/cocoapods.rb +170 -0
  103. data/fastlane/lib/fastlane/actions/commit_github_file.rb +186 -0
  104. data/fastlane/lib/fastlane/actions/commit_version_bump.rb +301 -0
  105. data/fastlane/lib/fastlane/actions/copy_artifacts.rb +114 -0
  106. data/fastlane/lib/fastlane/actions/crashlytics.rb +211 -0
  107. data/fastlane/lib/fastlane/actions/create_app_on_managed_play_store.rb +174 -0
  108. data/fastlane/lib/fastlane/actions/create_app_online.rb +75 -0
  109. data/fastlane/lib/fastlane/actions/create_keychain.rb +177 -0
  110. data/fastlane/lib/fastlane/actions/create_pull_request.rb +265 -0
  111. data/fastlane/lib/fastlane/actions/danger.rb +131 -0
  112. data/fastlane/lib/fastlane/actions/debug.rb +32 -0
  113. data/fastlane/lib/fastlane/actions/default_platform.rb +47 -0
  114. data/fastlane/lib/fastlane/actions/delete_keychain.rb +68 -0
  115. data/fastlane/lib/fastlane/actions/deliver.rb +14 -0
  116. data/fastlane/lib/fastlane/actions/deploygate.rb +210 -0
  117. data/fastlane/lib/fastlane/actions/device_grid/README.md +157 -0
  118. data/fastlane/lib/fastlane/actions/docs/build_app.md +245 -0
  119. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +333 -0
  120. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +371 -0
  121. data/fastlane/lib/fastlane/actions/docs/check_app_store_metadata.md +103 -0
  122. data/fastlane/lib/fastlane/actions/docs/create_app_online.md +282 -0
  123. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +349 -0
  124. data/fastlane/lib/fastlane/actions/docs/get_certificates.md +86 -0
  125. data/fastlane/lib/fastlane/actions/docs/get_provisioning_profile.md +223 -0
  126. data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +134 -0
  127. data/fastlane/lib/fastlane/actions/docs/run_tests.md +151 -0
  128. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +573 -0
  129. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +725 -0
  130. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +203 -0
  131. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +250 -0
  132. data/fastlane/lib/fastlane/actions/dotgpg_environment.rb +57 -0
  133. data/fastlane/lib/fastlane/actions/download.rb +76 -0
  134. data/fastlane/lib/fastlane/actions/download_dsyms.rb +369 -0
  135. data/fastlane/lib/fastlane/actions/download_from_play_store.rb +61 -0
  136. data/fastlane/lib/fastlane/actions/dsym_zip.rb +93 -0
  137. data/fastlane/lib/fastlane/actions/echo.rb +14 -0
  138. data/fastlane/lib/fastlane/actions/ensure_bundle_exec.rb +59 -0
  139. data/fastlane/lib/fastlane/actions/ensure_env_vars.rb +58 -0
  140. data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +69 -0
  141. data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +92 -0
  142. data/fastlane/lib/fastlane/actions/ensure_no_debug_code.rb +135 -0
  143. data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +125 -0
  144. data/fastlane/lib/fastlane/actions/environment_variable.rb +77 -0
  145. data/fastlane/lib/fastlane/actions/erb.rb +96 -0
  146. data/fastlane/lib/fastlane/actions/fastlane_version.rb +15 -0
  147. data/fastlane/lib/fastlane/actions/flock.rb +82 -0
  148. data/fastlane/lib/fastlane/actions/frame_screenshots.rb +64 -0
  149. data/fastlane/lib/fastlane/actions/frameit.rb +14 -0
  150. data/fastlane/lib/fastlane/actions/gcovr.rb +163 -0
  151. data/fastlane/lib/fastlane/actions/get_build_number.rb +106 -0
  152. data/fastlane/lib/fastlane/actions/get_build_number_repository.rb +120 -0
  153. data/fastlane/lib/fastlane/actions/get_certificates.rb +77 -0
  154. data/fastlane/lib/fastlane/actions/get_github_release.rb +166 -0
  155. data/fastlane/lib/fastlane/actions/get_info_plist_value.rb +78 -0
  156. data/fastlane/lib/fastlane/actions/get_ipa_info_plist_value.rb +82 -0
  157. data/fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb +120 -0
  158. data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +101 -0
  159. data/fastlane/lib/fastlane/actions/get_push_certificate.rb +87 -0
  160. data/fastlane/lib/fastlane/actions/get_version_number.rb +200 -0
  161. data/fastlane/lib/fastlane/actions/git_add.rb +93 -0
  162. data/fastlane/lib/fastlane/actions/git_branch.rb +61 -0
  163. data/fastlane/lib/fastlane/actions/git_commit.rb +80 -0
  164. data/fastlane/lib/fastlane/actions/git_pull.rb +64 -0
  165. data/fastlane/lib/fastlane/actions/git_submodule_update.rb +52 -0
  166. data/fastlane/lib/fastlane/actions/git_tag_exists.rb +74 -0
  167. data/fastlane/lib/fastlane/actions/github_api.rb +262 -0
  168. data/fastlane/lib/fastlane/actions/google_play_track_release_names.rb +74 -0
  169. data/fastlane/lib/fastlane/actions/google_play_track_version_codes.rb +77 -0
  170. data/fastlane/lib/fastlane/actions/gradle.rb +329 -0
  171. data/fastlane/lib/fastlane/actions/gym.rb +10 -0
  172. data/fastlane/lib/fastlane/actions/hg_add_tag.rb +48 -0
  173. data/fastlane/lib/fastlane/actions/hg_commit_version_bump.rb +183 -0
  174. data/fastlane/lib/fastlane/actions/hg_ensure_clean_status.rb +53 -0
  175. data/fastlane/lib/fastlane/actions/hg_push.rb +64 -0
  176. data/fastlane/lib/fastlane/actions/hipchat.rb +200 -0
  177. data/fastlane/lib/fastlane/actions/hockey.rb +406 -0
  178. data/fastlane/lib/fastlane/actions/ifttt.rb +96 -0
  179. data/fastlane/lib/fastlane/actions/import.rb +49 -0
  180. data/fastlane/lib/fastlane/actions/import_certificate.rb +77 -0
  181. data/fastlane/lib/fastlane/actions/import_from_git.rb +83 -0
  182. data/fastlane/lib/fastlane/actions/increment_build_number.rb +117 -0
  183. data/fastlane/lib/fastlane/actions/increment_version_number.rb +180 -0
  184. data/fastlane/lib/fastlane/actions/install_on_device.rb +95 -0
  185. data/fastlane/lib/fastlane/actions/install_provisioning_profile.rb +58 -0
  186. data/fastlane/lib/fastlane/actions/install_xcode_plugin.rb +91 -0
  187. data/fastlane/lib/fastlane/actions/installr.rb +132 -0
  188. data/fastlane/lib/fastlane/actions/ipa.rb +246 -0
  189. data/fastlane/lib/fastlane/actions/is_ci.rb +51 -0
  190. data/fastlane/lib/fastlane/actions/jazzy.rb +56 -0
  191. data/fastlane/lib/fastlane/actions/jira.rb +115 -0
  192. data/fastlane/lib/fastlane/actions/lane_context.rb +60 -0
  193. data/fastlane/lib/fastlane/actions/last_git_commit.rb +58 -0
  194. data/fastlane/lib/fastlane/actions/last_git_tag.rb +60 -0
  195. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +155 -0
  196. data/fastlane/lib/fastlane/actions/lcov.rb +102 -0
  197. data/fastlane/lib/fastlane/actions/mailgun.rb +197 -0
  198. data/fastlane/lib/fastlane/actions/make_changelog_from_jenkins.rb +81 -0
  199. data/fastlane/lib/fastlane/actions/match.rb +14 -0
  200. data/fastlane/lib/fastlane/actions/min_fastlane_version.rb +57 -0
  201. data/fastlane/lib/fastlane/actions/modify_services.rb +173 -0
  202. data/fastlane/lib/fastlane/actions/nexus_upload.rb +230 -0
  203. data/fastlane/lib/fastlane/actions/notarize.rb +193 -0
  204. data/fastlane/lib/fastlane/actions/notification.rb +75 -0
  205. data/fastlane/lib/fastlane/actions/notify.rb +40 -0
  206. data/fastlane/lib/fastlane/actions/number_of_commits.rb +75 -0
  207. data/fastlane/lib/fastlane/actions/oclint.rb +269 -0
  208. data/fastlane/lib/fastlane/actions/onesignal.rb +186 -0
  209. data/fastlane/lib/fastlane/actions/opt_out_crash_reporting.rb +33 -0
  210. data/fastlane/lib/fastlane/actions/opt_out_usage.rb +40 -0
  211. data/fastlane/lib/fastlane/actions/pem.rb +14 -0
  212. data/fastlane/lib/fastlane/actions/pilot.rb +14 -0
  213. data/fastlane/lib/fastlane/actions/pod_lib_lint.rb +189 -0
  214. data/fastlane/lib/fastlane/actions/pod_push.rb +173 -0
  215. data/fastlane/lib/fastlane/actions/podio_item.rb +217 -0
  216. data/fastlane/lib/fastlane/actions/precheck.rb +14 -0
  217. data/fastlane/lib/fastlane/actions/println.rb +14 -0
  218. data/fastlane/lib/fastlane/actions/produce.rb +14 -0
  219. data/fastlane/lib/fastlane/actions/prompt.rb +119 -0
  220. data/fastlane/lib/fastlane/actions/push_git_tags.rb +76 -0
  221. data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +127 -0
  222. data/fastlane/lib/fastlane/actions/puts.rb +68 -0
  223. data/fastlane/lib/fastlane/actions/read_podspec.rb +90 -0
  224. data/fastlane/lib/fastlane/actions/recreate_schemes.rb +46 -0
  225. data/fastlane/lib/fastlane/actions/register_device.rb +151 -0
  226. data/fastlane/lib/fastlane/actions/register_devices.rb +214 -0
  227. data/fastlane/lib/fastlane/actions/reset_git_repo.rb +121 -0
  228. data/fastlane/lib/fastlane/actions/reset_simulator_contents.rb +92 -0
  229. data/fastlane/lib/fastlane/actions/resign.rb +132 -0
  230. data/fastlane/lib/fastlane/actions/restore_file.rb +44 -0
  231. data/fastlane/lib/fastlane/actions/rocket.rb +83 -0
  232. data/fastlane/lib/fastlane/actions/rsync.rb +74 -0
  233. data/fastlane/lib/fastlane/actions/ruby_version.rb +56 -0
  234. data/fastlane/lib/fastlane/actions/run_tests.rb +114 -0
  235. data/fastlane/lib/fastlane/actions/s3.rb +174 -0
  236. data/fastlane/lib/fastlane/actions/say.rb +56 -0
  237. data/fastlane/lib/fastlane/actions/scan.rb +14 -0
  238. data/fastlane/lib/fastlane/actions/scp.rb +114 -0
  239. data/fastlane/lib/fastlane/actions/screengrab.rb +14 -0
  240. data/fastlane/lib/fastlane/actions/set_build_number_repository.rb +76 -0
  241. data/fastlane/lib/fastlane/actions/set_changelog.rb +204 -0
  242. data/fastlane/lib/fastlane/actions/set_github_release.rb +274 -0
  243. data/fastlane/lib/fastlane/actions/set_info_plist_value.rb +92 -0
  244. data/fastlane/lib/fastlane/actions/set_pod_key.rb +78 -0
  245. data/fastlane/lib/fastlane/actions/setup_ci.rb +132 -0
  246. data/fastlane/lib/fastlane/actions/setup_circle_ci.rb +58 -0
  247. data/fastlane/lib/fastlane/actions/setup_jenkins.rb +202 -0
  248. data/fastlane/lib/fastlane/actions/setup_travis.rb +57 -0
  249. data/fastlane/lib/fastlane/actions/sh.rb +71 -0
  250. data/fastlane/lib/fastlane/actions/sigh.rb +14 -0
  251. data/fastlane/lib/fastlane/actions/skip_docs.rb +52 -0
  252. data/fastlane/lib/fastlane/actions/slack.rb +288 -0
  253. data/fastlane/lib/fastlane/actions/slather.rb +329 -0
  254. data/fastlane/lib/fastlane/actions/snapshot.rb +14 -0
  255. data/fastlane/lib/fastlane/actions/sonar.rb +177 -0
  256. data/fastlane/lib/fastlane/actions/spaceship_logs.rb +135 -0
  257. data/fastlane/lib/fastlane/actions/spaceship_stats.rb +73 -0
  258. data/fastlane/lib/fastlane/actions/splunkmint.rb +156 -0
  259. data/fastlane/lib/fastlane/actions/spm.rb +138 -0
  260. data/fastlane/lib/fastlane/actions/ssh.rb +162 -0
  261. data/fastlane/lib/fastlane/actions/supply.rb +14 -0
  262. data/fastlane/lib/fastlane/actions/swiftlint.rb +240 -0
  263. data/fastlane/lib/fastlane/actions/sync_code_signing.rb +109 -0
  264. data/fastlane/lib/fastlane/actions/team_id.rb +42 -0
  265. data/fastlane/lib/fastlane/actions/team_name.rb +42 -0
  266. data/fastlane/lib/fastlane/actions/testfairy.rb +285 -0
  267. data/fastlane/lib/fastlane/actions/testflight.rb +14 -0
  268. data/fastlane/lib/fastlane/actions/tryouts.rb +149 -0
  269. data/fastlane/lib/fastlane/actions/twitter.rb +89 -0
  270. data/fastlane/lib/fastlane/actions/typetalk.rb +93 -0
  271. data/fastlane/lib/fastlane/actions/unlock_keychain.rb +132 -0
  272. data/fastlane/lib/fastlane/actions/update_app_group_identifiers.rb +91 -0
  273. data/fastlane/lib/fastlane/actions/update_app_identifier.rb +124 -0
  274. data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +203 -0
  275. data/fastlane/lib/fastlane/actions/update_fastlane.rb +137 -0
  276. data/fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb +99 -0
  277. data/fastlane/lib/fastlane/actions/update_info_plist.rb +143 -0
  278. data/fastlane/lib/fastlane/actions/update_keychain_access_groups.rb +94 -0
  279. data/fastlane/lib/fastlane/actions/update_plist.rb +115 -0
  280. data/fastlane/lib/fastlane/actions/update_project_code_signing.rb +76 -0
  281. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +173 -0
  282. data/fastlane/lib/fastlane/actions/update_project_team.rb +95 -0
  283. data/fastlane/lib/fastlane/actions/update_urban_airship_configuration.rb +91 -0
  284. data/fastlane/lib/fastlane/actions/update_url_schemes.rb +123 -0
  285. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +231 -0
  286. data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +165 -0
  287. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +67 -0
  288. data/fastlane/lib/fastlane/actions/upload_to_play_store.rb +80 -0
  289. data/fastlane/lib/fastlane/actions/upload_to_play_store_internal_app_sharing.rb +78 -0
  290. data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +119 -0
  291. data/fastlane/lib/fastlane/actions/validate_play_store_json_key.rb +104 -0
  292. data/fastlane/lib/fastlane/actions/verify_build.rb +199 -0
  293. data/fastlane/lib/fastlane/actions/verify_pod_keys.rb +67 -0
  294. data/fastlane/lib/fastlane/actions/verify_xcode.rb +159 -0
  295. data/fastlane/lib/fastlane/actions/version_bump_podspec.rb +105 -0
  296. data/fastlane/lib/fastlane/actions/version_get_podspec.rb +71 -0
  297. data/fastlane/lib/fastlane/actions/xcode_install.rb +105 -0
  298. data/fastlane/lib/fastlane/actions/xcode_select.rb +68 -0
  299. data/fastlane/lib/fastlane/actions/xcode_server_get_assets.rb +312 -0
  300. data/fastlane/lib/fastlane/actions/xcodebuild.rb +641 -0
  301. data/fastlane/lib/fastlane/actions/xcov.rb +66 -0
  302. data/fastlane/lib/fastlane/actions/xctool.rb +55 -0
  303. data/fastlane/lib/fastlane/actions/xcversion.rb +55 -0
  304. data/fastlane/lib/fastlane/actions/zip.rb +120 -0
  305. data/fastlane/lib/fastlane/auto_complete.rb +82 -0
  306. data/fastlane/lib/fastlane/boolean.rb +5 -0
  307. data/fastlane/lib/fastlane/cli_tools_distributor.rb +207 -0
  308. data/fastlane/lib/fastlane/command_line_handler.rb +49 -0
  309. data/fastlane/lib/fastlane/commands_generator.rb +369 -0
  310. data/fastlane/lib/fastlane/configuration_helper.rb +26 -0
  311. data/fastlane/lib/fastlane/core_ext/bundler_monkey_patch.rb +14 -0
  312. data/fastlane/lib/fastlane/documentation/actions_list.rb +214 -0
  313. data/fastlane/lib/fastlane/documentation/docs_generator.rb +89 -0
  314. data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +228 -0
  315. data/fastlane/lib/fastlane/environment_printer.rb +303 -0
  316. data/fastlane/lib/fastlane/erb_template_helper.rb +30 -0
  317. data/fastlane/lib/fastlane/fast_file.rb +439 -0
  318. data/fastlane/lib/fastlane/fastlane_require.rb +75 -0
  319. data/fastlane/lib/fastlane/features.rb +4 -0
  320. data/fastlane/lib/fastlane/helper/README.md +29 -0
  321. data/fastlane/lib/fastlane/helper/adb_helper.rb +66 -0
  322. data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +157 -0
  323. data/fastlane/lib/fastlane/helper/dotenv_helper.rb +50 -0
  324. data/fastlane/lib/fastlane/helper/gem_helper.rb +26 -0
  325. data/fastlane/lib/fastlane/helper/git_helper.rb +137 -0
  326. data/fastlane/lib/fastlane/helper/gradle_helper.rb +62 -0
  327. data/fastlane/lib/fastlane/helper/lane_helper.rb +13 -0
  328. data/fastlane/lib/fastlane/helper/podspec_helper.rb +75 -0
  329. data/fastlane/lib/fastlane/helper/s3_client_helper.rb +78 -0
  330. data/fastlane/lib/fastlane/helper/sh_helper.rb +134 -0
  331. data/fastlane/lib/fastlane/helper/xcodeproj_helper.rb +12 -0
  332. data/fastlane/lib/fastlane/helper/xcversion_helper.rb +25 -0
  333. data/fastlane/lib/fastlane/junit_generator.rb +27 -0
  334. data/fastlane/lib/fastlane/lane.rb +97 -0
  335. data/fastlane/lib/fastlane/lane_list.rb +137 -0
  336. data/fastlane/lib/fastlane/lane_manager.rb +130 -0
  337. data/fastlane/lib/fastlane/lane_manager_base.rb +92 -0
  338. data/fastlane/lib/fastlane/markdown_table_formatter.rb +62 -0
  339. data/fastlane/lib/fastlane/new_action.rb +47 -0
  340. data/fastlane/lib/fastlane/one_off.rb +45 -0
  341. data/fastlane/lib/fastlane/other_action.rb +29 -0
  342. data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +55 -0
  343. data/fastlane/lib/fastlane/plugins/plugin_generator.rb +86 -0
  344. data/fastlane/lib/fastlane/plugins/plugin_generator_ui.rb +19 -0
  345. data/fastlane/lib/fastlane/plugins/plugin_info.rb +49 -0
  346. data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +159 -0
  347. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +399 -0
  348. data/fastlane/lib/fastlane/plugins/plugin_search.rb +46 -0
  349. data/fastlane/lib/fastlane/plugins/plugin_update_manager.rb +70 -0
  350. data/fastlane/lib/fastlane/plugins/plugins.rb +12 -0
  351. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +35 -0
  352. data/fastlane/lib/fastlane/plugins/template/.circleci/config.yml +43 -0
  353. data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +29 -0
  354. data/fastlane/lib/fastlane/plugins/template/.gitignore +12 -0
  355. data/fastlane/lib/fastlane/plugins/template/.rspec +5 -0
  356. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +188 -0
  357. data/fastlane/lib/fastlane/plugins/template/.travis.yml +4 -0
  358. data/fastlane/lib/fastlane/plugins/template/Gemfile +6 -0
  359. data/fastlane/lib/fastlane/plugins/template/LICENSE.erb +21 -0
  360. data/fastlane/lib/fastlane/plugins/template/README.md.erb +52 -0
  361. data/fastlane/lib/fastlane/plugins/template/Rakefile +9 -0
  362. data/fastlane/lib/fastlane/plugins/template/fastlane/Fastfile.erb +3 -0
  363. data/fastlane/lib/fastlane/plugins/template/fastlane/Pluginfile.erb +1 -0
  364. data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%.rb.erb +16 -0
  365. data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/actions/%plugin_name%_action.rb.erb +47 -0
  366. data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/helper/%plugin_name%_helper.rb.erb +16 -0
  367. data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/version.rb.erb +5 -0
  368. data/fastlane/lib/fastlane/plugins/template/spec/%plugin_name%_action_spec.rb.erb +9 -0
  369. data/fastlane/lib/fastlane/plugins/template/spec/spec_helper.rb.erb +15 -0
  370. data/fastlane/lib/fastlane/runner.rb +378 -0
  371. data/fastlane/lib/fastlane/server/action_command.rb +61 -0
  372. data/fastlane/lib/fastlane/server/action_command_return.rb +14 -0
  373. data/fastlane/lib/fastlane/server/command_executor.rb +7 -0
  374. data/fastlane/lib/fastlane/server/command_parser.rb +44 -0
  375. data/fastlane/lib/fastlane/server/control_command.rb +23 -0
  376. data/fastlane/lib/fastlane/server/json_return_value_processor.rb +72 -0
  377. data/fastlane/lib/fastlane/server/socket_server.rb +238 -0
  378. data/fastlane/lib/fastlane/server/socket_server_action_command_executor.rb +101 -0
  379. data/fastlane/lib/fastlane/setup/setup.rb +355 -0
  380. data/fastlane/lib/fastlane/setup/setup_android.rb +97 -0
  381. data/fastlane/lib/fastlane/setup/setup_ios.rb +504 -0
  382. data/fastlane/lib/fastlane/shells.rb +6 -0
  383. data/fastlane/lib/fastlane/supported_platforms.rb +28 -0
  384. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +477 -0
  385. data/fastlane/lib/fastlane/swift_fastlane_function.rb +419 -0
  386. data/fastlane/lib/fastlane/swift_lane_manager.rb +296 -0
  387. data/fastlane/lib/fastlane/swift_runner_upgrader.rb +210 -0
  388. data/fastlane/lib/fastlane/tools.rb +33 -0
  389. data/fastlane/lib/fastlane/version.rb +6 -0
  390. data/fastlane/swift/Actions.swift +16 -0
  391. data/fastlane/swift/Appfile.swift +15 -0
  392. data/fastlane/swift/ArgumentProcessor.swift +89 -0
  393. data/fastlane/swift/ControlCommand.swift +74 -0
  394. data/fastlane/swift/Deliverfile.swift +20 -0
  395. data/fastlane/swift/DeliverfileProtocol.swift +259 -0
  396. data/fastlane/swift/Fastfile.swift +16 -0
  397. data/fastlane/swift/Fastlane.swift +9402 -0
  398. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +434 -0
  399. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  400. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  401. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +97 -0
  402. data/fastlane/swift/FastlaneSwiftRunner/README.txt +10 -0
  403. data/fastlane/swift/Gymfile.swift +20 -0
  404. data/fastlane/swift/GymfileProtocol.swift +187 -0
  405. data/fastlane/swift/LaneFileProtocol.swift +149 -0
  406. data/fastlane/swift/MainProcess.swift +77 -0
  407. data/fastlane/swift/Matchfile.swift +20 -0
  408. data/fastlane/swift/MatchfileProtocol.swift +187 -0
  409. data/fastlane/swift/Plugins.swift +16 -0
  410. data/fastlane/swift/Precheckfile.swift +20 -0
  411. data/fastlane/swift/PrecheckfileProtocol.swift +51 -0
  412. data/fastlane/swift/RubyCommand.swift +157 -0
  413. data/fastlane/swift/RubyCommandable.swift +43 -0
  414. data/fastlane/swift/Runner.swift +275 -0
  415. data/fastlane/swift/RunnerArgument.swift +20 -0
  416. data/fastlane/swift/Scanfile.swift +20 -0
  417. data/fastlane/swift/ScanfileProtocol.swift +263 -0
  418. data/fastlane/swift/Screengrabfile.swift +20 -0
  419. data/fastlane/swift/ScreengrabfileProtocol.swift +99 -0
  420. data/fastlane/swift/Snapshotfile.swift +20 -0
  421. data/fastlane/swift/SnapshotfileProtocol.swift +187 -0
  422. data/fastlane/swift/SocketClient.swift +327 -0
  423. data/fastlane/swift/SocketClientDelegateProtocol.swift +21 -0
  424. data/fastlane/swift/SocketResponse.swift +82 -0
  425. data/fastlane/swift/formatting/Brewfile +1 -0
  426. data/fastlane/swift/formatting/Brewfile.lock.json +47 -0
  427. data/fastlane/swift/formatting/Rakefile +18 -0
  428. data/fastlane/swift/main.swift +47 -0
  429. data/fastlane/swift/upgrade_manifest.json +1 -0
  430. data/fastlane_core/README.md +79 -0
  431. data/fastlane_core/lib/assets/XMLTemplate.xml.erb +12 -0
  432. data/fastlane_core/lib/fastlane_core.rb +46 -0
  433. data/fastlane_core/lib/fastlane_core/analytics/action_completion_context.rb +34 -0
  434. data/fastlane_core/lib/fastlane_core/analytics/action_launch_context.rb +38 -0
  435. data/fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb +23 -0
  436. data/fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb +54 -0
  437. data/fastlane_core/lib/fastlane_core/analytics/analytics_session.rb +70 -0
  438. data/fastlane_core/lib/fastlane_core/analytics/app_identifier_guesser.rb +64 -0
  439. data/fastlane_core/lib/fastlane_core/android_package_name_guesser.rb +79 -0
  440. data/fastlane_core/lib/fastlane_core/build_watcher.rb +96 -0
  441. data/fastlane_core/lib/fastlane_core/cert_checker.rb +144 -0
  442. data/fastlane_core/lib/fastlane_core/command_executor.rb +100 -0
  443. data/fastlane_core/lib/fastlane_core/configuration/commander_generator.rb +103 -0
  444. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +321 -0
  445. data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +332 -0
  446. data/fastlane_core/lib/fastlane_core/configuration/configuration_file.rb +182 -0
  447. data/fastlane_core/lib/fastlane_core/core_ext/cfpropertylist.rb +23 -0
  448. data/fastlane_core/lib/fastlane_core/core_ext/shellwords.rb +63 -0
  449. data/fastlane_core/lib/fastlane_core/core_ext/string.rb +17 -0
  450. data/fastlane_core/lib/fastlane_core/device_manager.rb +374 -0
  451. data/fastlane_core/lib/fastlane_core/env.rb +9 -0
  452. data/fastlane_core/lib/fastlane_core/fastlane_folder.rb +72 -0
  453. data/fastlane_core/lib/fastlane_core/fastlane_pty.rb +57 -0
  454. data/fastlane_core/lib/fastlane_core/feature/feature.rb +51 -0
  455. data/fastlane_core/lib/fastlane_core/features.rb +4 -0
  456. data/fastlane_core/lib/fastlane_core/globals.rb +27 -0
  457. data/fastlane_core/lib/fastlane_core/helper.rb +437 -0
  458. data/fastlane_core/lib/fastlane_core/ios_app_identifier_guesser.rb +112 -0
  459. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +63 -0
  460. data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +52 -0
  461. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +595 -0
  462. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +120 -0
  463. data/fastlane_core/lib/fastlane_core/languages.rb +16 -0
  464. data/fastlane_core/lib/fastlane_core/module.rb +31 -0
  465. data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +51 -0
  466. data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +48 -0
  467. data/fastlane_core/lib/fastlane_core/print_table.rb +131 -0
  468. data/fastlane_core/lib/fastlane_core/project.rb +509 -0
  469. data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +124 -0
  470. data/fastlane_core/lib/fastlane_core/string_filters.rb +51 -0
  471. data/fastlane_core/lib/fastlane_core/swag.rb +85 -0
  472. data/fastlane_core/lib/fastlane_core/tag_version.rb +31 -0
  473. data/fastlane_core/lib/fastlane_core/test_parser.rb +107 -0
  474. data/fastlane_core/lib/fastlane_core/ui/disable_colors.rb +17 -0
  475. data/fastlane_core/lib/fastlane_core/ui/errors.rb +1 -0
  476. data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_common_error.rb +19 -0
  477. data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_crash.rb +11 -0
  478. data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_error.rb +25 -0
  479. data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_exception.rb +19 -0
  480. data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_shell_error.rb +11 -0
  481. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +294 -0
  482. data/fastlane_core/lib/fastlane_core/ui/github_issue_inspector_reporter.rb +62 -0
  483. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +159 -0
  484. data/fastlane_core/lib/fastlane_core/ui/interface.rb +205 -0
  485. data/fastlane_core/lib/fastlane_core/ui/ui.rb +26 -0
  486. data/fastlane_core/lib/fastlane_core/update_checker/changelog.rb +37 -0
  487. data/fastlane_core/lib/fastlane_core/update_checker/update_checker.rb +109 -0
  488. data/frameit/README.md +17 -0
  489. data/frameit/lib/assets/empty.png +0 -0
  490. data/frameit/lib/frameit.rb +13 -0
  491. data/frameit/lib/frameit/commands_generator.rb +140 -0
  492. data/frameit/lib/frameit/config_parser.rb +136 -0
  493. data/frameit/lib/frameit/dependency_checker.rb +22 -0
  494. data/frameit/lib/frameit/device.rb +90 -0
  495. data/frameit/lib/frameit/device_types.rb +144 -0
  496. data/frameit/lib/frameit/editor.rb +560 -0
  497. data/frameit/lib/frameit/frame_downloader.rb +85 -0
  498. data/frameit/lib/frameit/mac_editor.rb +35 -0
  499. data/frameit/lib/frameit/module.rb +42 -0
  500. data/frameit/lib/frameit/offsets.rb +28 -0
  501. data/frameit/lib/frameit/options.rb +112 -0
  502. data/frameit/lib/frameit/runner.rb +97 -0
  503. data/frameit/lib/frameit/screenshot.rb +134 -0
  504. data/frameit/lib/frameit/strings_parser.rb +46 -0
  505. data/frameit/lib/frameit/template_finder.rb +45 -0
  506. data/frameit/lib/frameit/trim_box.rb +35 -0
  507. data/gym/README.md +17 -0
  508. data/gym/lib/assets/GymfileTemplate +13 -0
  509. data/gym/lib/assets/GymfileTemplate.swift +13 -0
  510. data/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh +61 -0
  511. data/gym/lib/gym.rb +9 -0
  512. data/gym/lib/gym/code_signing_mapping.rb +210 -0
  513. data/gym/lib/gym/commands_generator.rb +78 -0
  514. data/gym/lib/gym/detect_values.rb +206 -0
  515. data/gym/lib/gym/error_handler.rb +306 -0
  516. data/gym/lib/gym/generators/README.md +1 -0
  517. data/gym/lib/gym/generators/build_command_generator.rb +147 -0
  518. data/gym/lib/gym/generators/package_command_generator.rb +68 -0
  519. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +232 -0
  520. data/gym/lib/gym/manager.rb +22 -0
  521. data/gym/lib/gym/module.rb +74 -0
  522. data/gym/lib/gym/options.rb +286 -0
  523. data/gym/lib/gym/runner.rb +365 -0
  524. data/gym/lib/gym/xcode.rb +27 -0
  525. data/gym/lib/gym/xcodebuild_fixes/README.md +9 -0
  526. data/gym/lib/gym/xcodebuild_fixes/generic_archive_fix.rb +35 -0
  527. data/match/README.md +17 -0
  528. data/match/lib/assets/MatchfileTemplate +11 -0
  529. data/match/lib/assets/MatchfileTemplate.swift +9 -0
  530. data/match/lib/assets/READMETemplate.md +59 -0
  531. data/match/lib/match.rb +14 -0
  532. data/match/lib/match/change_password.rb +53 -0
  533. data/match/lib/match/commands_generator.rb +190 -0
  534. data/match/lib/match/encryption.rb +49 -0
  535. data/match/lib/match/encryption/interface.rb +17 -0
  536. data/match/lib/match/encryption/openssl.rb +161 -0
  537. data/match/lib/match/generator.rb +122 -0
  538. data/match/lib/match/importer.rb +157 -0
  539. data/match/lib/match/migrate.rb +109 -0
  540. data/match/lib/match/module.rb +32 -0
  541. data/match/lib/match/nuke.rb +350 -0
  542. data/match/lib/match/options.rb +315 -0
  543. data/match/lib/match/runner.rb +369 -0
  544. data/match/lib/match/setup.rb +40 -0
  545. data/match/lib/match/spaceship_ensure.rb +97 -0
  546. data/match/lib/match/storage.rb +46 -0
  547. data/match/lib/match/storage/git_storage.rb +250 -0
  548. data/match/lib/match/storage/google_cloud_storage.rb +382 -0
  549. data/match/lib/match/storage/interface.rb +119 -0
  550. data/match/lib/match/storage/s3_storage.rb +205 -0
  551. data/match/lib/match/table_printer.rb +51 -0
  552. data/match/lib/match/utils.rb +75 -0
  553. data/pem/README.md +17 -0
  554. data/pem/lib/pem.rb +4 -0
  555. data/pem/lib/pem/commands_generator.rb +47 -0
  556. data/pem/lib/pem/manager.rb +112 -0
  557. data/pem/lib/pem/module.rb +19 -0
  558. data/pem/lib/pem/options.rb +103 -0
  559. data/pilot/README.md +17 -0
  560. data/pilot/lib/pilot.rb +9 -0
  561. data/pilot/lib/pilot/build_manager.rb +546 -0
  562. data/pilot/lib/pilot/commands_generator.rb +174 -0
  563. data/pilot/lib/pilot/features.rb +0 -0
  564. data/pilot/lib/pilot/manager.rb +90 -0
  565. data/pilot/lib/pilot/module.rb +11 -0
  566. data/pilot/lib/pilot/options.rb +303 -0
  567. data/pilot/lib/pilot/tester_exporter.rb +58 -0
  568. data/pilot/lib/pilot/tester_importer.rb +53 -0
  569. data/pilot/lib/pilot/tester_manager.rb +168 -0
  570. data/pilot/lib/pilot/tester_util.rb +0 -0
  571. data/precheck/README.md +17 -0
  572. data/precheck/lib/assets/PrecheckfileTemplate +27 -0
  573. data/precheck/lib/assets/PrecheckfileTemplate.swift +19 -0
  574. data/precheck/lib/precheck.rb +3 -0
  575. data/precheck/lib/precheck/commands_generator.rb +74 -0
  576. data/precheck/lib/precheck/item_to_check.rb +58 -0
  577. data/precheck/lib/precheck/module.rb +21 -0
  578. data/precheck/lib/precheck/options.rb +104 -0
  579. data/precheck/lib/precheck/rule.rb +171 -0
  580. data/precheck/lib/precheck/rule_check_result.rb +19 -0
  581. data/precheck/lib/precheck/rule_processor.rb +265 -0
  582. data/precheck/lib/precheck/rules/abstract_text_match_rule.rb +80 -0
  583. data/precheck/lib/precheck/rules/all.rb +1 -0
  584. data/precheck/lib/precheck/rules/copyright_date_rule.rb +37 -0
  585. data/precheck/lib/precheck/rules/curse_words_rule.rb +62 -0
  586. data/precheck/lib/precheck/rules/custom_text_rule.rb +35 -0
  587. data/precheck/lib/precheck/rules/free_stuff_iap_rule.rb +31 -0
  588. data/precheck/lib/precheck/rules/future_functionality_rule.rb +33 -0
  589. data/precheck/lib/precheck/rules/negative_apple_sentiment_rule.rb +37 -0
  590. data/precheck/lib/precheck/rules/other_platforms_rule.rb +43 -0
  591. data/precheck/lib/precheck/rules/placeholder_words_rule.rb +31 -0
  592. data/precheck/lib/precheck/rules/rules_data/curse_word_hashes/en_us.txt +349 -0
  593. data/precheck/lib/precheck/rules/test_words_rule.rb +30 -0
  594. data/precheck/lib/precheck/rules/unreachable_urls_rule.rb +47 -0
  595. data/precheck/lib/precheck/runner.rb +197 -0
  596. data/produce/README.md +17 -0
  597. data/produce/lib/produce.rb +6 -0
  598. data/produce/lib/produce/available_default_languages.rb +51 -0
  599. data/produce/lib/produce/cloud_container.rb +82 -0
  600. data/produce/lib/produce/commands_generator.rb +236 -0
  601. data/produce/lib/produce/developer_center.rb +143 -0
  602. data/produce/lib/produce/group.rb +90 -0
  603. data/produce/lib/produce/itunes_connect.rb +139 -0
  604. data/produce/lib/produce/manager.rb +15 -0
  605. data/produce/lib/produce/merchant.rb +121 -0
  606. data/produce/lib/produce/module.rb +14 -0
  607. data/produce/lib/produce/options.rb +184 -0
  608. data/produce/lib/produce/service.rb +319 -0
  609. data/scan/README.md +17 -0
  610. data/scan/lib/assets/ScanfileTemplate +16 -0
  611. data/scan/lib/assets/ScanfileTemplate.swift +13 -0
  612. data/scan/lib/scan.rb +10 -0
  613. data/scan/lib/scan/commands_generator.rb +78 -0
  614. data/scan/lib/scan/detect_values.rb +224 -0
  615. data/scan/lib/scan/error_handler.rb +57 -0
  616. data/scan/lib/scan/manager.rb +38 -0
  617. data/scan/lib/scan/module.rb +32 -0
  618. data/scan/lib/scan/options.rb +445 -0
  619. data/scan/lib/scan/runner.rb +197 -0
  620. data/scan/lib/scan/slack_poster.rb +60 -0
  621. data/scan/lib/scan/test_command_generator.rb +174 -0
  622. data/scan/lib/scan/test_result_parser.rb +33 -0
  623. data/scan/lib/scan/xcpretty_reporter_options_generator.rb +85 -0
  624. data/screengrab/README.md +17 -0
  625. data/screengrab/lib/assets/ScreengrabfileTemplate +15 -0
  626. data/screengrab/lib/assets/ScreengrabfileTemplate.swift +15 -0
  627. data/screengrab/lib/screengrab.rb +7 -0
  628. data/screengrab/lib/screengrab/android_environment.rb +91 -0
  629. data/screengrab/lib/screengrab/commands_generator.rb +70 -0
  630. data/screengrab/lib/screengrab/dependency_checker.rb +58 -0
  631. data/screengrab/lib/screengrab/detect_values.rb +16 -0
  632. data/screengrab/lib/screengrab/module.rb +26 -0
  633. data/screengrab/lib/screengrab/options.rb +148 -0
  634. data/screengrab/lib/screengrab/page.html.erb +190 -0
  635. data/screengrab/lib/screengrab/reports_generator.rb +36 -0
  636. data/screengrab/lib/screengrab/runner.rb +449 -0
  637. data/screengrab/lib/screengrab/setup.rb +24 -0
  638. data/sigh/README.md +17 -0
  639. data/sigh/lib/assets/resign.sh +909 -0
  640. data/sigh/lib/sigh.rb +4 -0
  641. data/sigh/lib/sigh/commands_generator.rb +154 -0
  642. data/sigh/lib/sigh/download_all.rb +112 -0
  643. data/sigh/lib/sigh/local_manage.rb +145 -0
  644. data/sigh/lib/sigh/manager.rb +47 -0
  645. data/sigh/lib/sigh/module.rb +42 -0
  646. data/sigh/lib/sigh/options.rb +187 -0
  647. data/sigh/lib/sigh/repair.rb +34 -0
  648. data/sigh/lib/sigh/resign.rb +220 -0
  649. data/sigh/lib/sigh/runner.rb +402 -0
  650. data/snapshot/README.md +17 -0
  651. data/snapshot/lib/assets/SnapfileTemplate +37 -0
  652. data/snapshot/lib/assets/SnapfileTemplate.swift +41 -0
  653. data/snapshot/lib/assets/SnapshotHelper.swift +301 -0
  654. data/snapshot/lib/assets/SnapshotHelperXcode8.swift +172 -0
  655. data/snapshot/lib/snapshot.rb +19 -0
  656. data/snapshot/lib/snapshot/collector.rb +140 -0
  657. data/snapshot/lib/snapshot/commands_generator.rb +115 -0
  658. data/snapshot/lib/snapshot/dependency_checker.rb +69 -0
  659. data/snapshot/lib/snapshot/detect_values.rb +86 -0
  660. data/snapshot/lib/snapshot/error_handler.rb +24 -0
  661. data/snapshot/lib/snapshot/fixes/README.md +5 -0
  662. data/snapshot/lib/snapshot/fixes/hardware_keyboard_fix.rb +27 -0
  663. data/snapshot/lib/snapshot/fixes/simulator_shared_pasteboard.rb +16 -0
  664. data/snapshot/lib/snapshot/fixes/simulator_zoom_fix.rb +27 -0
  665. data/snapshot/lib/snapshot/latest_os_version.rb +34 -0
  666. data/snapshot/lib/snapshot/module.rb +44 -0
  667. data/snapshot/lib/snapshot/options.rb +290 -0
  668. data/snapshot/lib/snapshot/page.html.erb +285 -0
  669. data/snapshot/lib/snapshot/reports_generator.rb +139 -0
  670. data/snapshot/lib/snapshot/reset_simulators.rb +122 -0
  671. data/snapshot/lib/snapshot/runner.rb +146 -0
  672. data/snapshot/lib/snapshot/screenshot_flatten.rb +20 -0
  673. data/snapshot/lib/snapshot/screenshot_rotate.rb +36 -0
  674. data/snapshot/lib/snapshot/setup.rb +58 -0
  675. data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +62 -0
  676. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +219 -0
  677. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +200 -0
  678. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_xcode_8.rb +113 -0
  679. data/snapshot/lib/snapshot/test_command_generator.rb +108 -0
  680. data/snapshot/lib/snapshot/test_command_generator_base.rb +128 -0
  681. data/snapshot/lib/snapshot/test_command_generator_xcode_8.rb +70 -0
  682. data/snapshot/lib/snapshot/update.rb +38 -0
  683. data/spaceship/README.md +183 -0
  684. data/spaceship/lib/assets/displayFamilies.json +181 -0
  685. data/spaceship/lib/assets/languageMapping.json +306 -0
  686. data/spaceship/lib/assets/languageMappingReadable.json +30 -0
  687. data/spaceship/lib/spaceship.rb +30 -0
  688. data/spaceship/lib/spaceship/base.rb +310 -0
  689. data/spaceship/lib/spaceship/client.rb +913 -0
  690. data/spaceship/lib/spaceship/commands_generator.rb +53 -0
  691. data/spaceship/lib/spaceship/connect_api.rb +116 -0
  692. data/spaceship/lib/spaceship/connect_api/api_client.rb +279 -0
  693. data/spaceship/lib/spaceship/connect_api/client.rb +216 -0
  694. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +99 -0
  695. data/spaceship/lib/spaceship/connect_api/model.rb +172 -0
  696. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +114 -0
  697. data/spaceship/lib/spaceship/connect_api/models/app.rb +388 -0
  698. data/spaceship/lib/spaceship/connect_api/models/app_category.rb +94 -0
  699. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +95 -0
  700. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +39 -0
  701. data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +131 -0
  702. data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +100 -0
  703. data/spaceship/lib/spaceship/connect_api/models/app_price.rb +22 -0
  704. data/spaceship/lib/spaceship/connect_api/models/app_price_point.rb +26 -0
  705. data/spaceship/lib/spaceship/connect_api/models/app_price_tier.rb +12 -0
  706. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +187 -0
  707. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +153 -0
  708. data/spaceship/lib/spaceship/connect_api/models/app_store_review_attachment.rb +71 -0
  709. data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +51 -0
  710. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +217 -0
  711. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +85 -0
  712. data/spaceship/lib/spaceship/connect_api/models/app_store_version_phased_release.rb +57 -0
  713. data/spaceship/lib/spaceship/connect_api/models/app_store_version_release_request.rb +12 -0
  714. data/spaceship/lib/spaceship/connect_api/models/app_store_version_submission.rb +26 -0
  715. data/spaceship/lib/spaceship/connect_api/models/beta_app_localization.rb +28 -0
  716. data/spaceship/lib/spaceship/connect_api/models/beta_app_review_detail.rb +32 -0
  717. data/spaceship/lib/spaceship/connect_api/models/beta_app_review_submission.rb +26 -0
  718. data/spaceship/lib/spaceship/connect_api/models/beta_build_localization.rb +20 -0
  719. data/spaceship/lib/spaceship/connect_api/models/beta_build_metric.rb +24 -0
  720. data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +75 -0
  721. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +41 -0
  722. data/spaceship/lib/spaceship/connect_api/models/beta_screenshot.rb +18 -0
  723. data/spaceship/lib/spaceship/connect_api/models/beta_tester.rb +57 -0
  724. data/spaceship/lib/spaceship/connect_api/models/beta_tester_metric.rb +44 -0
  725. data/spaceship/lib/spaceship/connect_api/models/build.rb +172 -0
  726. data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +61 -0
  727. data/spaceship/lib/spaceship/connect_api/models/build_delivery.rb +36 -0
  728. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +58 -0
  729. data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +71 -0
  730. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +102 -0
  731. data/spaceship/lib/spaceship/connect_api/models/custom_app_organization.rb +43 -0
  732. data/spaceship/lib/spaceship/connect_api/models/custom_app_user.rb +41 -0
  733. data/spaceship/lib/spaceship/connect_api/models/device.rb +58 -0
  734. data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +41 -0
  735. data/spaceship/lib/spaceship/connect_api/models/pre_release_version.rb +20 -0
  736. data/spaceship/lib/spaceship/connect_api/models/profile.rb +97 -0
  737. data/spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb +26 -0
  738. data/spaceship/lib/spaceship/connect_api/models/sandbox_tester.rb +64 -0
  739. data/spaceship/lib/spaceship/connect_api/models/territory.rb +27 -0
  740. data/spaceship/lib/spaceship/connect_api/models/user.rb +51 -0
  741. data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +59 -0
  742. data/spaceship/lib/spaceship/connect_api/provisioning/client.rb +92 -0
  743. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +143 -0
  744. data/spaceship/lib/spaceship/connect_api/response.rb +67 -0
  745. data/spaceship/lib/spaceship/connect_api/spaceship.rb +102 -0
  746. data/spaceship/lib/spaceship/connect_api/testflight/client.rb +24 -0
  747. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +391 -0
  748. data/spaceship/lib/spaceship/connect_api/token.rb +102 -0
  749. data/spaceship/lib/spaceship/connect_api/token_refresh_middleware.rb +24 -0
  750. data/spaceship/lib/spaceship/connect_api/tunes/client.rb +24 -0
  751. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +1045 -0
  752. data/spaceship/lib/spaceship/connect_api/users/client.rb +24 -0
  753. data/spaceship/lib/spaceship/connect_api/users/users.rb +80 -0
  754. data/spaceship/lib/spaceship/du/du_client.rb +138 -0
  755. data/spaceship/lib/spaceship/du/upload_file.rb +58 -0
  756. data/spaceship/lib/spaceship/du/utilities.rb +99 -0
  757. data/spaceship/lib/spaceship/errors.rb +82 -0
  758. data/spaceship/lib/spaceship/globals.rb +12 -0
  759. data/spaceship/lib/spaceship/helper/net_http_generic_request.rb +20 -0
  760. data/spaceship/lib/spaceship/helper/plist_middleware.rb +16 -0
  761. data/spaceship/lib/spaceship/helper/rels_middleware.rb +28 -0
  762. data/spaceship/lib/spaceship/launcher.rb +99 -0
  763. data/spaceship/lib/spaceship/module.rb +8 -0
  764. data/spaceship/lib/spaceship/playground.rb +75 -0
  765. data/spaceship/lib/spaceship/portal/app.rb +201 -0
  766. data/spaceship/lib/spaceship/portal/app_group.rb +73 -0
  767. data/spaceship/lib/spaceship/portal/app_service.rb +87 -0
  768. data/spaceship/lib/spaceship/portal/certificate.rb +365 -0
  769. data/spaceship/lib/spaceship/portal/cloud_container.rb +74 -0
  770. data/spaceship/lib/spaceship/portal/device.rb +191 -0
  771. data/spaceship/lib/spaceship/portal/invite.rb +53 -0
  772. data/spaceship/lib/spaceship/portal/key.rb +101 -0
  773. data/spaceship/lib/spaceship/portal/legacy_wrapper.rb +21 -0
  774. data/spaceship/lib/spaceship/portal/merchant.rb +86 -0
  775. data/spaceship/lib/spaceship/portal/passbook.rb +78 -0
  776. data/spaceship/lib/spaceship/portal/person.rb +62 -0
  777. data/spaceship/lib/spaceship/portal/persons.rb +67 -0
  778. data/spaceship/lib/spaceship/portal/portal.rb +17 -0
  779. data/spaceship/lib/spaceship/portal/portal_base.rb +16 -0
  780. data/spaceship/lib/spaceship/portal/portal_client.rb +862 -0
  781. data/spaceship/lib/spaceship/portal/provisioning_profile.rb +559 -0
  782. data/spaceship/lib/spaceship/portal/provisioning_profile_template.rb +52 -0
  783. data/spaceship/lib/spaceship/portal/spaceship.rb +154 -0
  784. data/spaceship/lib/spaceship/portal/ui/select_team.rb +116 -0
  785. data/spaceship/lib/spaceship/portal/website_push.rb +88 -0
  786. data/spaceship/lib/spaceship/provider.rb +13 -0
  787. data/spaceship/lib/spaceship/spaceauth_runner.rb +74 -0
  788. data/spaceship/lib/spaceship/stats_middleware.rb +65 -0
  789. data/spaceship/lib/spaceship/test_flight.rb +10 -0
  790. data/spaceship/lib/spaceship/test_flight/app_test_info.rb +40 -0
  791. data/spaceship/lib/spaceship/test_flight/base.rb +39 -0
  792. data/spaceship/lib/spaceship/test_flight/beta_review_info.rb +19 -0
  793. data/spaceship/lib/spaceship/test_flight/build.rb +242 -0
  794. data/spaceship/lib/spaceship/test_flight/build_trains.rb +50 -0
  795. data/spaceship/lib/spaceship/test_flight/client.rb +361 -0
  796. data/spaceship/lib/spaceship/test_flight/export_compliance.rb +12 -0
  797. data/spaceship/lib/spaceship/test_flight/group.rb +131 -0
  798. data/spaceship/lib/spaceship/test_flight/test_info.rb +56 -0
  799. data/spaceship/lib/spaceship/test_flight/tester.rb +136 -0
  800. data/spaceship/lib/spaceship/tunes/app_analytics.rb +168 -0
  801. data/spaceship/lib/spaceship/tunes/app_details.rb +147 -0
  802. data/spaceship/lib/spaceship/tunes/app_image.rb +51 -0
  803. data/spaceship/lib/spaceship/tunes/app_ratings.rb +58 -0
  804. data/spaceship/lib/spaceship/tunes/app_review.rb +55 -0
  805. data/spaceship/lib/spaceship/tunes/app_review_attachment.rb +49 -0
  806. data/spaceship/lib/spaceship/tunes/app_screenshot.rb +12 -0
  807. data/spaceship/lib/spaceship/tunes/app_status.rb +63 -0
  808. data/spaceship/lib/spaceship/tunes/app_submission.rb +161 -0
  809. data/spaceship/lib/spaceship/tunes/app_trailer.rb +64 -0
  810. data/spaceship/lib/spaceship/tunes/app_version.rb +970 -0
  811. data/spaceship/lib/spaceship/tunes/app_version_common.rb +35 -0
  812. data/spaceship/lib/spaceship/tunes/app_version_generated_promocodes.rb +28 -0
  813. data/spaceship/lib/spaceship/tunes/app_version_history.rb +52 -0
  814. data/spaceship/lib/spaceship/tunes/app_version_promocodes.rb +27 -0
  815. data/spaceship/lib/spaceship/tunes/app_version_ref.rb +15 -0
  816. data/spaceship/lib/spaceship/tunes/app_version_states_history.rb +27 -0
  817. data/spaceship/lib/spaceship/tunes/application.rb +453 -0
  818. data/spaceship/lib/spaceship/tunes/availability.rb +164 -0
  819. data/spaceship/lib/spaceship/tunes/b2b_organization.rb +50 -0
  820. data/spaceship/lib/spaceship/tunes/b2b_user.rb +30 -0
  821. data/spaceship/lib/spaceship/tunes/build.rb +263 -0
  822. data/spaceship/lib/spaceship/tunes/build_details.rb +184 -0
  823. data/spaceship/lib/spaceship/tunes/build_train.rb +181 -0
  824. data/spaceship/lib/spaceship/tunes/developer_response.rb +23 -0
  825. data/spaceship/lib/spaceship/tunes/device_type.rb +17 -0
  826. data/spaceship/lib/spaceship/tunes/display_family.rb +84 -0
  827. data/spaceship/lib/spaceship/tunes/errors.rb +17 -0
  828. data/spaceship/lib/spaceship/tunes/iap.rb +168 -0
  829. data/spaceship/lib/spaceship/tunes/iap_detail.rb +264 -0
  830. data/spaceship/lib/spaceship/tunes/iap_families.rb +68 -0
  831. data/spaceship/lib/spaceship/tunes/iap_family_details.rb +90 -0
  832. data/spaceship/lib/spaceship/tunes/iap_family_list.rb +28 -0
  833. data/spaceship/lib/spaceship/tunes/iap_list.rb +76 -0
  834. data/spaceship/lib/spaceship/tunes/iap_status.rb +56 -0
  835. data/spaceship/lib/spaceship/tunes/iap_subscription_pricing_info.rb +46 -0
  836. data/spaceship/lib/spaceship/tunes/iap_subscription_pricing_tier.rb +25 -0
  837. data/spaceship/lib/spaceship/tunes/iap_type.rb +45 -0
  838. data/spaceship/lib/spaceship/tunes/language_converter.rb +65 -0
  839. data/spaceship/lib/spaceship/tunes/language_item.rb +61 -0
  840. data/spaceship/lib/spaceship/tunes/legacy_wrapper.rb +13 -0
  841. data/spaceship/lib/spaceship/tunes/member.rb +84 -0
  842. data/spaceship/lib/spaceship/tunes/members.rb +35 -0
  843. data/spaceship/lib/spaceship/tunes/pricing_info.rb +42 -0
  844. data/spaceship/lib/spaceship/tunes/pricing_tier.rb +25 -0
  845. data/spaceship/lib/spaceship/tunes/sandbox_tester.rb +74 -0
  846. data/spaceship/lib/spaceship/tunes/spaceship.rb +39 -0
  847. data/spaceship/lib/spaceship/tunes/territory.rb +39 -0
  848. data/spaceship/lib/spaceship/tunes/transit_app_file.rb +23 -0
  849. data/spaceship/lib/spaceship/tunes/tunes.rb +35 -0
  850. data/spaceship/lib/spaceship/tunes/tunes_base.rb +17 -0
  851. data/spaceship/lib/spaceship/tunes/tunes_client.rb +1644 -0
  852. data/spaceship/lib/spaceship/tunes/user_detail.rb +15 -0
  853. data/spaceship/lib/spaceship/tunes/version_set.rb +26 -0
  854. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +346 -0
  855. data/spaceship/lib/spaceship/ui.rb +27 -0
  856. data/supply/README.md +17 -0
  857. data/supply/lib/supply.rb +53 -0
  858. data/supply/lib/supply/apk_listing.rb +14 -0
  859. data/supply/lib/supply/client.rb +551 -0
  860. data/supply/lib/supply/commands_generator.rb +67 -0
  861. data/supply/lib/supply/languages.rb +88 -0
  862. data/supply/lib/supply/listing.rb +32 -0
  863. data/supply/lib/supply/options.rb +324 -0
  864. data/supply/lib/supply/reader.rb +41 -0
  865. data/supply/lib/supply/release_listing.rb +18 -0
  866. data/supply/lib/supply/setup.rb +122 -0
  867. data/supply/lib/supply/uploader.rb +480 -0
  868. metadata +1832 -0
@@ -0,0 +1,214 @@
1
+ require_relative 'module'
2
+
3
+ require 'fastlane_core/build_watcher'
4
+ require 'fastlane_core/ipa_file_analyser'
5
+ require 'fastlane_core/pkg_file_analyser'
6
+
7
+ module Deliver
8
+ class SubmitForReview
9
+ def submit!(options)
10
+ app = options[:app]
11
+
12
+ platform = Spaceship::ConnectAPI::Platform.map(options[:platform])
13
+ version = app.get_edit_app_store_version(platform: platform)
14
+
15
+ unless version
16
+ UI.user_error!("Cannot submit for review - could not find an editable version for '#{platform}'")
17
+ return
18
+ end
19
+
20
+ build = select_build(options, app, version, platform)
21
+
22
+ update_export_compliance(options, app, build)
23
+ update_idfa(options, app, version)
24
+ update_submission_information(options, app)
25
+
26
+ version.create_app_store_version_submission
27
+
28
+ UI.success("Successfully submitted the app for review!")
29
+ end
30
+
31
+ private def select_build(options, app, version, platform)
32
+ if options[:build_number] && options[:build_number] != "latest"
33
+ UI.message("Selecting existing build-number: #{options[:build_number]}")
34
+
35
+ build = Spaceship::ConnectAPI::Build.all(
36
+ app_id: app.id,
37
+ version: options[:app_version],
38
+ build_number: options[:build_number],
39
+ platform: platform
40
+ ).first
41
+
42
+ unless build
43
+ UI.user_error!("Build number: #{options[:build_number]} does not exist")
44
+ end
45
+ else
46
+ UI.message("Selecting the latest build...")
47
+ build = wait_for_build_processing_to_be_complete(app: app, platform: platform, options: options)
48
+ end
49
+ UI.message("Selecting build #{build.app_version} (#{build.version})...")
50
+
51
+ version.select_build(build_id: build.id)
52
+
53
+ UI.success("Successfully selected build")
54
+
55
+ return build
56
+ end
57
+
58
+ def update_export_compliance(options, app, build)
59
+ submission_information = options[:submission_information] || {}
60
+ submission_information = submission_information.collect { |k, v| [k.to_sym, v] }.to_h
61
+
62
+ uses_encryption = submission_information[:export_compliance_uses_encryption]
63
+
64
+ if build.uses_non_exempt_encryption.nil?
65
+ UI.verbose("Updating build for export compliance status of '#{uses_encryption}'")
66
+
67
+ if uses_encryption.to_s.empty?
68
+ message = [
69
+ "Export compliance is required to submit",
70
+ "Add information to the :submission_information option...",
71
+ " Docs: http://docs.fastlane.tools/actions/deliver/#compliance-and-idfa-settings",
72
+ " Example: submission_information: { export_compliance_uses_encryption: false }",
73
+ " Example CLI:",
74
+ " --submission_information \"{\\\"export_compliance_uses_encryption\\\": false}\"",
75
+ "This can also be set in your Info.plist with key 'ITSAppUsesNonExemptEncryption'"
76
+ ].join("\n")
77
+ UI.user_error!(message)
78
+ end
79
+
80
+ build = build.update(attributes: {
81
+ usesNonExemptEncryption: uses_encryption
82
+ })
83
+
84
+ UI.verbose("Successfully updated build for export compliance status of '#{build.uses_non_exempt_encryption}' on App Store Connect")
85
+ end
86
+ end
87
+
88
+ def update_idfa(options, app, version)
89
+ submission_information = options[:submission_information] || {}
90
+ submission_information = submission_information.collect { |k, v| [k.to_sym, v] }.to_h
91
+
92
+ uses_idfa = submission_information[:add_id_info_uses_idfa]
93
+
94
+ idfa_declaration = begin
95
+ version.fetch_idfa_declaration
96
+ rescue
97
+ nil
98
+ end
99
+
100
+ updated_idfa = false
101
+
102
+ # Set IDFA on version
103
+ unless uses_idfa.nil?
104
+ UI.verbose("Updating app store version for IDFA status of '#{uses_idfa}'")
105
+ version = version.update(attributes: {
106
+ usesIdfa: uses_idfa
107
+ })
108
+ UI.verbose("Updated app store version for IDFA status of '#{version.uses_idfa}'")
109
+ updated_idfa = true
110
+ end
111
+
112
+ # Error if uses_idfa not set
113
+ if version.uses_idfa.nil?
114
+ message = [
115
+ "Use of Advertising Identifier (IDFA) is required to submit",
116
+ "Add information to the :submission_information option...",
117
+ " Docs: http://docs.fastlane.tools/actions/deliver/#compliance-and-idfa-settings",
118
+ " Example: submission_information: { add_id_info_uses_idfa: false }",
119
+ " Example: submission_information: {",
120
+ " add_id_info_uses_idfa: true,",
121
+ " add_id_info_serves_ads: false,",
122
+ " add_id_info_tracks_install: true,",
123
+ " add_id_info_tracks_action: true,",
124
+ " add_id_info_limits_tracking: true",
125
+ " }",
126
+ " Example CLI:",
127
+ " --submission_information \"{\\\"add_id_info_uses_idfa\\\": false}\""
128
+ ].join("\n")
129
+ UI.user_error!(message)
130
+ end
131
+
132
+ # Create, update, or delete IDFA declaration
133
+ if uses_idfa == false
134
+ if idfa_declaration
135
+ UI.verbose("Deleting IDFA declaration")
136
+ idfa_declaration.delete!
137
+ updated_idfa = true
138
+ UI.verbose("Deleted IDFA declaration")
139
+ end
140
+ elsif uses_idfa == true
141
+ attributes = {
142
+ honorsLimitedAdTracking: !!submission_information[:add_id_info_limits_tracking],
143
+ servesAds: !!submission_information[:add_id_info_serves_ads],
144
+ attributesAppInstallationToPreviousAd: !!submission_information[:add_id_info_tracks_install],
145
+ attributesActionWithPreviousAd: !!submission_information[:add_id_info_tracks_action]
146
+ }
147
+
148
+ if idfa_declaration
149
+ UI.verbose("Updating IDFA declaration")
150
+ idfa_declaration.update(attributes: attributes)
151
+ UI.verbose("Updated IDFA declaration")
152
+ else
153
+ UI.verbose("Creating IDFA declaration")
154
+ version.create_idfa_declaration(attributes: attributes)
155
+ UI.verbose("Created IDFA declaration")
156
+ end
157
+
158
+ updated_idfa = true
159
+ end
160
+
161
+ UI.success("Successfully updated IDFA declarations on App Store Connect") if updated_idfa
162
+ end
163
+
164
+ def update_submission_information(options, app)
165
+ submission_information = options[:submission_information] || {}
166
+ submission_information = submission_information.collect { |k, v| [k.to_sym, v] }.to_h
167
+
168
+ content_rights = submission_information[:content_rights_contains_third_party_content]
169
+
170
+ unless content_rights.nil?
171
+ value = if content_rights
172
+ Spaceship::ConnectAPI::App::ContentRightsDeclaration::USES_THIRD_PARTY_CONTENT
173
+ else
174
+ Spaceship::ConnectAPI::App::ContentRightsDeclaration::DOES_NOT_USE_THIRD_PARTY_CONTENT
175
+ end
176
+
177
+ UI.verbose("Updating contents rights declaration on App Store Connect")
178
+ app.update(attributes: {
179
+ contentRightsDeclaration: value
180
+ })
181
+ UI.success("Successfully updated contents rights declaration on App Store Connect")
182
+ end
183
+ end
184
+
185
+ def wait_for_build_processing_to_be_complete(app: nil, platform: nil, options: nil)
186
+ app_version = options[:app_version]
187
+
188
+ app_version ||= FastlaneCore::IpaFileAnalyser.fetch_app_version(options[:ipa]) if options[:ipa]
189
+ app_version ||= FastlaneCore::PkgFileAnalyser.fetch_app_version(options[:pkg]) if options[:pkg]
190
+
191
+ app_build ||= FastlaneCore::IpaFileAnalyser.fetch_app_build(options[:ipa]) if options[:ipa]
192
+ app_build ||= FastlaneCore::PkgFileAnalyser.fetch_app_build(options[:pkg]) if options[:pkg]
193
+
194
+ latest_build = FastlaneCore::BuildWatcher.wait_for_build_processing_to_be_complete(
195
+ app_id: app.id,
196
+ platform: platform,
197
+ app_version: app_version,
198
+ build_version: app_build,
199
+ poll_interval: 15,
200
+ return_when_build_appears: false,
201
+ return_spaceship_testflight_build: false,
202
+ select_latest: true
203
+ )
204
+
205
+ if !app_version.nil? && !app_build.nil?
206
+ unless latest_build.app_version == app_version && latest_build.version == app_build
207
+ UI.important("Uploaded app #{app_version} - #{app_build}, but received build #{latest_build.app_version} - #{latest_build.version}.")
208
+ end
209
+ end
210
+
211
+ return latest_build
212
+ end
213
+ end
214
+ end
@@ -0,0 +1,688 @@
1
+ require_relative 'module'
2
+ require_relative 'queue_worker'
3
+
4
+ module Deliver
5
+ # upload description, rating, etc.
6
+ # rubocop:disable Metrics/ClassLength
7
+ class UploadMetadata
8
+ # All the localised values attached to the version
9
+ LOCALISED_VERSION_VALUES = {
10
+ description: "description",
11
+ keywords: "keywords",
12
+ release_notes: "whats_new",
13
+ support_url: "support_url",
14
+ marketing_url: "marketing_url",
15
+ promotional_text: "promotional_text"
16
+ }
17
+
18
+ # Everything attached to the version but not being localised
19
+ NON_LOCALISED_VERSION_VALUES = {
20
+ copyright: "copyright"
21
+ }
22
+
23
+ # Localised app details values
24
+ LOCALISED_APP_VALUES = {
25
+ name: "name",
26
+ subtitle: "subtitle",
27
+ privacy_url: "privacy_policy_url",
28
+ apple_tv_privacy_policy: "privacy_policy_text"
29
+ }
30
+
31
+ # Non localized app details values
32
+ NON_LOCALISED_APP_VALUES = {
33
+ primary_category: :primary_category,
34
+ secondary_category: :secondary_category,
35
+ primary_first_sub_category: :primary_subcategory_one,
36
+ primary_second_sub_category: :primary_subcategory_two,
37
+ secondary_first_sub_category: :secondary_subcategory_one,
38
+ secondary_second_sub_category: :secondary_subcategory_two
39
+ }
40
+
41
+ # Review information values
42
+ REVIEW_INFORMATION_VALUES_LEGACY = {
43
+ review_first_name: :first_name,
44
+ review_last_name: :last_name,
45
+ review_phone_number: :phone_number,
46
+ review_email: :email_address,
47
+ review_demo_user: :demo_user,
48
+ review_demo_password: :demo_password,
49
+ review_notes: :notes
50
+ }
51
+ REVIEW_INFORMATION_VALUES = {
52
+ first_name: "contact_first_name",
53
+ last_name: "contact_last_name",
54
+ phone_number: "contact_phone",
55
+ email_address: "contact_email",
56
+ demo_user: "demo_account_name",
57
+ demo_password: "demo_account_password",
58
+ notes: "notes"
59
+ }
60
+
61
+ # Localized app details values, that are editable in live state
62
+ LOCALISED_LIVE_VALUES = [:description, :release_notes, :support_url, :marketing_url, :promotional_text, :privacy_url]
63
+
64
+ # Non localized app details values, that are editable in live state
65
+ NON_LOCALISED_LIVE_VALUES = [:copyright]
66
+
67
+ # Directory name it contains trade representative contact information
68
+ TRADE_REPRESENTATIVE_CONTACT_INFORMATION_DIR = "trade_representative_contact_information"
69
+
70
+ # Directory name it contains review information
71
+ REVIEW_INFORMATION_DIR = "review_information"
72
+
73
+ ALL_META_SUB_DIRS = [TRADE_REPRESENTATIVE_CONTACT_INFORMATION_DIR, REVIEW_INFORMATION_DIR]
74
+
75
+ # rubocop:disable Metrics/PerceivedComplexity
76
+
77
+ require_relative 'loader'
78
+
79
+ # Make sure to call `load_from_filesystem` before calling upload
80
+ def upload(options)
81
+ return if options[:skip_metadata]
82
+
83
+ app = options[:app]
84
+
85
+ platform = Spaceship::ConnectAPI::Platform.map(options[:platform])
86
+
87
+ enabled_languages = detect_languages(options)
88
+
89
+ app_store_version_localizations = verify_available_version_languages!(options, app, enabled_languages) unless options[:edit_live]
90
+ app_info_localizations = verify_available_info_languages!(options, app, enabled_languages) unless options[:edit_live]
91
+
92
+ if options[:edit_live]
93
+ # not all values are editable when using live_version
94
+ version = app.get_live_app_store_version(platform: platform)
95
+ localised_options = LOCALISED_LIVE_VALUES
96
+ non_localised_options = NON_LOCALISED_LIVE_VALUES
97
+
98
+ if v.nil?
99
+ UI.message("Couldn't find live version, editing the current version on App Store Connect instead")
100
+ version = fetch_edit_app_store_version(app, platform)
101
+ # we don't want to update the localised_options and non_localised_options
102
+ # as we also check for `options[:edit_live]` at other areas in the code
103
+ # by not touching those 2 variables, deliver is more consistent with what the option says
104
+ # in the documentation
105
+ else
106
+ UI.message("Found live version")
107
+ end
108
+ else
109
+ version = fetch_edit_app_store_version(app, platform)
110
+ localised_options = (LOCALISED_VERSION_VALUES.keys + LOCALISED_APP_VALUES.keys)
111
+ non_localised_options = NON_LOCALISED_VERSION_VALUES.keys
112
+ end
113
+
114
+ # Needed for to filter out release notes from being sent up
115
+ number_of_versions = Spaceship::ConnectAPI.get_app_store_versions(
116
+ app_id: app.id,
117
+ filter: { platform: platform },
118
+ limit: 2
119
+ ).count
120
+ is_first_version = number_of_versions == 1
121
+ UI.verbose("Version '#{version.version_string}' is the first version on App Store Connect") if is_first_version
122
+
123
+ UI.important("Will begin uploading metadata for '#{version.version_string}' on App Store Connect")
124
+
125
+ localized_version_attributes_by_locale = {}
126
+ localized_info_attributes_by_locale = {}
127
+
128
+ localised_options.each do |key|
129
+ current = options[key]
130
+ next unless current
131
+
132
+ unless current.kind_of?(Hash)
133
+ UI.error("Error with provided '#{key}'. Must be a hash, the key being the language.")
134
+ next
135
+ end
136
+
137
+ if key == :release_notes && is_first_version
138
+ UI.error("Skipping 'release_notes'... this is the first version of the app")
139
+ next
140
+ end
141
+
142
+ current.each do |language, value|
143
+ next unless value.to_s.length > 0
144
+ strip_value = value.to_s.strip
145
+
146
+ if LOCALISED_VERSION_VALUES.include?(key) && !strip_value.empty?
147
+ attribute_name = LOCALISED_VERSION_VALUES[key]
148
+
149
+ localized_version_attributes_by_locale[language] ||= {}
150
+ localized_version_attributes_by_locale[language][attribute_name] = strip_value
151
+ end
152
+
153
+ next unless LOCALISED_APP_VALUES.include?(key) && !strip_value.empty?
154
+ attribute_name = LOCALISED_APP_VALUES[key]
155
+
156
+ localized_info_attributes_by_locale[language] ||= {}
157
+ localized_info_attributes_by_locale[language][attribute_name] = strip_value
158
+ end
159
+ end
160
+
161
+ non_localized_version_attributes = {}
162
+ non_localised_options.each do |key|
163
+ strip_value = options[key].to_s.strip
164
+ next unless strip_value.to_s.length > 0
165
+
166
+ if NON_LOCALISED_VERSION_VALUES.include?(key) && !strip_value.empty?
167
+ attribute_name = NON_LOCALISED_VERSION_VALUES[key]
168
+ non_localized_version_attributes[attribute_name] = strip_value
169
+ end
170
+ end
171
+
172
+ release_type = if options[:auto_release_date]
173
+ # Convert time format to 2020-06-17T12:00:00-07:00
174
+ time_in_ms = options[:auto_release_date]
175
+ date = convert_ms_to_iso8601(time_in_ms)
176
+
177
+ non_localized_version_attributes['earliestReleaseDate'] = date
178
+ Spaceship::ConnectAPI::AppStoreVersion::ReleaseType::SCHEDULED
179
+ elsif options[:automatic_release] == true
180
+ Spaceship::ConnectAPI::AppStoreVersion::ReleaseType::AFTER_APPROVAL
181
+ elsif options[:automatic_release] == false
182
+ Spaceship::ConnectAPI::AppStoreVersion::ReleaseType::MANUAL
183
+ end
184
+ if release_type.nil?
185
+ UI.important("Release type will not be set because neither `automatic_release` nor `auto_release_date` were provided. Please explicitly set one of these options if you need a release type set")
186
+ else
187
+ non_localized_version_attributes['releaseType'] = release_type
188
+ end
189
+
190
+ # Update app store version
191
+ # This needs to happen before updating localizations (https://openradar.appspot.com/radar?id=4925914991296512)
192
+ #
193
+ # Adding some sleeps because the API will sometimes be in a state where releaseType can't be modified
194
+ # https://github.com/fastlane/fastlane/issues/16911
195
+ UI.message("Uploading metadata to App Store Connect for version")
196
+ sleep(2)
197
+ version.update(attributes: non_localized_version_attributes)
198
+ sleep(1)
199
+
200
+ # Update app store version localizations
201
+ store_version_worker = Deliver::QueueWorker.new do |app_store_version_localization|
202
+ attributes = localized_version_attributes_by_locale[app_store_version_localization.locale]
203
+ if attributes
204
+ UI.message("Uploading metadata to App Store Connect for localized version '#{app_store_version_localization.locale}'")
205
+ app_store_version_localization.update(attributes: attributes)
206
+ end
207
+ end
208
+ store_version_worker.batch_enqueue(app_store_version_localizations)
209
+ store_version_worker.start
210
+
211
+ # Update app info localizations
212
+ app_info_worker = Deliver::QueueWorker.new do |app_info_localization|
213
+ attributes = localized_info_attributes_by_locale[app_info_localization.locale]
214
+ if attributes
215
+ UI.message("Uploading metadata to App Store Connect for localized info '#{app_info_localization.locale}'")
216
+ app_info_localization.update(attributes: attributes)
217
+ end
218
+ end
219
+ app_info_worker.batch_enqueue(app_info_localizations)
220
+ app_info_worker.start
221
+
222
+ # Update categories
223
+ app_info = fetch_edit_app_info(app)
224
+ if app_info
225
+ category_id_map = {}
226
+
227
+ primary_category = options[:primary_category].to_s.strip
228
+ secondary_category = options[:secondary_category].to_s.strip
229
+ primary_first_sub_category = options[:primary_first_sub_category].to_s.strip
230
+ primary_second_sub_category = options[:primary_second_sub_category].to_s.strip
231
+ secondary_first_sub_category = options[:secondary_first_sub_category].to_s.strip
232
+ secondary_second_sub_category = options[:secondary_second_sub_category].to_s.strip
233
+
234
+ mapped_values = {}
235
+
236
+ # Only update primary and secondar category if explicitly set
237
+ unless primary_category.empty?
238
+ mapped = Spaceship::ConnectAPI::AppCategory.map_category_from_itc(
239
+ primary_category
240
+ )
241
+
242
+ mapped_values[primary_category] = mapped
243
+ category_id_map[:primary_category_id] = mapped
244
+ end
245
+ unless secondary_category.empty?
246
+ mapped = Spaceship::ConnectAPI::AppCategory.map_category_from_itc(
247
+ secondary_category
248
+ )
249
+
250
+ mapped_values[secondary_category] = mapped
251
+ category_id_map[:secondary_category_id] = mapped
252
+ end
253
+
254
+ # Only set if primary category is going to be set
255
+ unless primary_category.empty?
256
+ mapped = Spaceship::ConnectAPI::AppCategory.map_subcategory_from_itc(
257
+ primary_first_sub_category
258
+ )
259
+
260
+ mapped_values[primary_first_sub_category] = mapped
261
+ category_id_map[:primary_subcategory_one_id] = mapped
262
+ end
263
+ unless primary_category.empty?
264
+ mapped = Spaceship::ConnectAPI::AppCategory.map_subcategory_from_itc(
265
+ primary_second_sub_category
266
+ )
267
+
268
+ mapped_values[primary_second_sub_category] = mapped
269
+ category_id_map[:primary_subcategory_two_id] = mapped
270
+ end
271
+
272
+ # Only set if secondary category is going to be set
273
+ unless secondary_category.empty?
274
+ mapped = Spaceship::ConnectAPI::AppCategory.map_subcategory_from_itc(
275
+ secondary_first_sub_category
276
+ )
277
+
278
+ mapped_values[secondary_first_sub_category] = mapped
279
+ category_id_map[:secondary_subcategory_one_id] = mapped
280
+ end
281
+ unless secondary_category.empty?
282
+ mapped = Spaceship::ConnectAPI::AppCategory.map_subcategory_from_itc(
283
+ secondary_second_sub_category
284
+ )
285
+
286
+ mapped_values[secondary_second_sub_category] = mapped
287
+ category_id_map[:secondary_subcategory_two_id] = mapped
288
+ end
289
+
290
+ # Print deprecation warnings if category was mapped
291
+ has_mapped_values = false
292
+ mapped_values.each do |k, v|
293
+ next if k.nil? || v.nil?
294
+ next if k == v
295
+ has_mapped_values = true
296
+ UI.deprecated("Category '#{k}' from iTunesConnect has been deprecated. Please replace with '#{v}'")
297
+ end
298
+ UI.deprecated("You can find more info at https://docs.fastlane.tools/actions/deliver/#reference") if has_mapped_values
299
+
300
+ app_info.update_categories(category_id_map: category_id_map)
301
+ end
302
+
303
+ # Update phased release
304
+ unless options[:phased_release].nil?
305
+ phased_release = begin
306
+ version.fetch_app_store_version_phased_release
307
+ rescue
308
+ nil
309
+ end # returns no data error so need to rescue
310
+ if !!options[:phased_release]
311
+ unless phased_release
312
+ UI.message("Creating phased release on App Store Connect")
313
+ version.create_app_store_version_phased_release(attributes: {
314
+ phasedReleaseState: Spaceship::ConnectAPI::AppStoreVersionPhasedRelease::PhasedReleaseState::INACTIVE
315
+ })
316
+ end
317
+ elsif phased_release
318
+ UI.message("Removing phased release on App Store Connect")
319
+ phased_release.delete!
320
+ end
321
+ end
322
+
323
+ # Update rating reset
324
+ unless options[:reset_ratings].nil?
325
+ reset_rating_request = begin
326
+ version.fetch_reset_ratings_request
327
+ rescue
328
+ nil
329
+ end # returns no data error so need to rescue
330
+ if !!options[:reset_ratings]
331
+ unless reset_rating_request
332
+ UI.message("Creating reset ratings request on App Store Connect")
333
+ version.create_reset_ratings_request
334
+ end
335
+ elsif reset_rating_request
336
+ UI.message("Removing reset ratings request on App Store Connect")
337
+ reset_rating_request.delete!
338
+ end
339
+ end
340
+
341
+ set_review_information(version, options)
342
+ set_review_attachment_file(version, options)
343
+ set_app_rating(version, options)
344
+ end
345
+
346
+ # rubocop:enable Metrics/PerceivedComplexity
347
+
348
+ def convert_ms_to_iso8601(time_in_ms)
349
+ time_in_s = time_in_ms / 1000
350
+
351
+ # Remove minutes and seconds (whole hour)
352
+ seconds_in_hour = 60 * 60
353
+ time_in_s_to_hour = (time_in_s / seconds_in_hour).to_i * seconds_in_hour
354
+
355
+ return Time.at(time_in_s_to_hour).utc.strftime("%Y-%m-%dT%H:%M:%S%:z")
356
+ end
357
+
358
+ # If the user is using the 'default' language, then assign values where they are needed
359
+ def assign_defaults(options)
360
+ # Normalizes languages keys from symbols to strings
361
+ normalize_language_keys(options)
362
+
363
+ # Build a complete list of the required languages
364
+ enabled_languages = detect_languages(options)
365
+
366
+ # Get all languages used in existing settings
367
+ (LOCALISED_VERSION_VALUES.keys + LOCALISED_APP_VALUES.keys).each do |key|
368
+ current = options[key]
369
+ next unless current && current.kind_of?(Hash)
370
+ current.each do |language, value|
371
+ enabled_languages << language unless enabled_languages.include?(language)
372
+ end
373
+ end
374
+
375
+ # Check folder list (an empty folder signifies a language is required)
376
+ ignore_validation = options[:ignore_language_directory_validation]
377
+ Loader.language_folders(options[:metadata_path], ignore_validation).each do |lang_folder|
378
+ next unless File.directory?(lang_folder) # We don't want to read txt as they are non localised
379
+ language = File.basename(lang_folder)
380
+ enabled_languages << language unless enabled_languages.include?(language)
381
+ end
382
+
383
+ return unless enabled_languages.include?("default")
384
+ UI.message("Detected languages: " + enabled_languages.to_s)
385
+
386
+ (LOCALISED_VERSION_VALUES.keys + LOCALISED_APP_VALUES.keys).each do |key|
387
+ current = options[key]
388
+ next unless current && current.kind_of?(Hash)
389
+
390
+ default = current["default"]
391
+ next if default.nil?
392
+
393
+ enabled_languages.each do |language|
394
+ value = current[language]
395
+ next unless value.nil?
396
+
397
+ current[language] = default
398
+ end
399
+ current.delete("default")
400
+ end
401
+ end
402
+
403
+ def detect_languages(options)
404
+ # Build a complete list of the required languages
405
+ enabled_languages = options[:languages] || []
406
+
407
+ # Get all languages used in existing settings
408
+ (LOCALISED_VERSION_VALUES.keys + LOCALISED_APP_VALUES.keys).each do |key|
409
+ current = options[key]
410
+ next unless current && current.kind_of?(Hash)
411
+ current.each do |language, value|
412
+ enabled_languages << language unless enabled_languages.include?(language)
413
+ end
414
+ end
415
+
416
+ # Check folder list (an empty folder signifies a language is required)
417
+ ignore_validation = options[:ignore_language_directory_validation]
418
+ Loader.language_folders(options[:metadata_path], ignore_validation).each do |lang_folder|
419
+ next unless File.directory?(lang_folder) # We don't want to read txt as they are non localised
420
+
421
+ language = File.basename(lang_folder)
422
+ enabled_languages << language unless enabled_languages.include?(language)
423
+ end
424
+
425
+ # Mapping to strings because :default symbol can be passed in
426
+ enabled_languages
427
+ .map(&:to_s)
428
+ .uniq
429
+ end
430
+
431
+ def fetch_edit_app_store_version(app, platform, wait_time: 10)
432
+ retry_if_nil("Cannot find edit app store version", wait_time: wait_time) do
433
+ app.get_edit_app_store_version(platform: platform)
434
+ end
435
+ end
436
+
437
+ def fetch_edit_app_info(app, wait_time: 10)
438
+ retry_if_nil("Cannot find edit app info", wait_time: wait_time) do
439
+ app.fetch_edit_app_info
440
+ end
441
+ end
442
+
443
+ def retry_if_nil(message, tries: 5, wait_time: 10)
444
+ loop do
445
+ tries -= 1
446
+
447
+ value = yield
448
+ return value if value
449
+
450
+ UI.message("#{message}... Retrying after #{wait_time} seconds (remaining: #{tries})")
451
+ sleep(wait_time)
452
+
453
+ return nil if tries.zero?
454
+ end
455
+ end
456
+
457
+ # Finding languages to enable
458
+ def verify_available_info_languages!(options, app, languages)
459
+ app_info = fetch_edit_app_info(app)
460
+
461
+ unless app_info
462
+ UI.user_error!("Cannot update languages - could not find an editable info")
463
+ return
464
+ end
465
+
466
+ localizations = app_info.get_app_info_localizations
467
+
468
+ languages = (languages || []).reject { |lang| lang == "default" }
469
+ locales_to_enable = languages - localizations.map(&:locale)
470
+
471
+ if locales_to_enable.count > 0
472
+ lng_text = "language"
473
+ lng_text += "s" if locales_to_enable.count != 1
474
+ Helper.show_loading_indicator("Activating info #{lng_text} #{locales_to_enable.join(', ')}...")
475
+
476
+ locales_to_enable.each do |locale|
477
+ app_info.create_app_info_localization(attributes: {
478
+ locale: locale
479
+ })
480
+ end
481
+
482
+ Helper.hide_loading_indicator
483
+
484
+ # Refresh version localizations
485
+ localizations = app_info.get_app_info_localizations
486
+ end
487
+
488
+ return localizations
489
+ end
490
+
491
+ # Finding languages to enable
492
+ def verify_available_version_languages!(options, app, languages)
493
+ platform = Spaceship::ConnectAPI::Platform.map(options[:platform])
494
+ version = fetch_edit_app_store_version(app, platform)
495
+
496
+ unless version
497
+ UI.user_error!("Cannot update languages - could not find an editable version for '#{platform}'")
498
+ return
499
+ end
500
+
501
+ localizations = version.get_app_store_version_localizations
502
+
503
+ languages = (languages || []).reject { |lang| lang == "default" }
504
+ locales_to_enable = languages - localizations.map(&:locale)
505
+
506
+ if locales_to_enable.count > 0
507
+ lng_text = "language"
508
+ lng_text += "s" if locales_to_enable.count != 1
509
+ Helper.show_loading_indicator("Activating version #{lng_text} #{locales_to_enable.join(', ')}...")
510
+
511
+ locales_to_enable.each do |locale|
512
+ version.create_app_store_version_localization(attributes: {
513
+ locale: locale
514
+ })
515
+ end
516
+
517
+ Helper.hide_loading_indicator
518
+
519
+ # Refresh version localizations
520
+ localizations = version.get_app_store_version_localizations
521
+ end
522
+
523
+ return localizations
524
+ end
525
+
526
+ # Loads the metadata files and stores them into the options object
527
+ def load_from_filesystem(options)
528
+ return if options[:skip_metadata]
529
+
530
+ # Load localised data
531
+ ignore_validation = options[:ignore_language_directory_validation]
532
+ Loader.language_folders(options[:metadata_path], ignore_validation).each do |lang_folder|
533
+ language = File.basename(lang_folder)
534
+ (LOCALISED_VERSION_VALUES.keys + LOCALISED_APP_VALUES.keys).each do |key|
535
+ path = File.join(lang_folder, "#{key}.txt")
536
+ next unless File.exist?(path)
537
+
538
+ UI.message("Loading '#{path}'...")
539
+ options[key] ||= {}
540
+ options[key][language] ||= File.read(path)
541
+ end
542
+ end
543
+
544
+ # Load non localised data
545
+ (NON_LOCALISED_VERSION_VALUES.keys + NON_LOCALISED_APP_VALUES.keys).each do |key|
546
+ path = File.join(options[:metadata_path], "#{key}.txt")
547
+ next unless File.exist?(path)
548
+
549
+ UI.message("Loading '#{path}'...")
550
+ options[key] ||= File.read(path)
551
+ end
552
+
553
+ # Load review information
554
+ # This is used to find the file path for both new and legacy review information filenames
555
+ resolve_review_info_path = lambda do |option_name|
556
+ path = File.join(options[:metadata_path], REVIEW_INFORMATION_DIR, "#{option_name}.txt")
557
+ return nil unless File.exist?(path)
558
+ return nil if options[:app_review_information][option_name].to_s.length > 0
559
+
560
+ UI.message("Loading '#{path}'...")
561
+ return path
562
+ end
563
+
564
+ # First try and load review information from legacy filenames
565
+ options[:app_review_information] ||= {}
566
+ REVIEW_INFORMATION_VALUES_LEGACY.each do |legacy_option_name, option_name|
567
+ path = resolve_review_info_path.call(legacy_option_name)
568
+ next if path.nil?
569
+ options[:app_review_information][option_name] ||= File.read(path)
570
+
571
+ UI.deprecated("Review rating option '#{legacy_option_name}' from iTunesConnect has been deprecated. Please replace with '#{option_name}'")
572
+ end
573
+
574
+ # Then load review information from new App Store Connect filenames
575
+ REVIEW_INFORMATION_VALUES.keys.each do |option_name|
576
+ path = resolve_review_info_path.call(option_name)
577
+ next if path.nil?
578
+ options[:app_review_information][option_name] ||= File.read(path)
579
+ end
580
+ end
581
+
582
+ private
583
+
584
+ # Normalizes languages keys from symbols to strings
585
+ def normalize_language_keys(options)
586
+ (LOCALISED_VERSION_VALUES.keys + LOCALISED_APP_VALUES.keys).each do |key|
587
+ current = options[key]
588
+ next unless current && current.kind_of?(Hash)
589
+
590
+ current.keys.each do |language|
591
+ current[language.to_s] = current.delete(language)
592
+ end
593
+ end
594
+
595
+ options
596
+ end
597
+
598
+ def set_review_information(version, options)
599
+ return unless options[:app_review_information]
600
+ info = options[:app_review_information]
601
+ info = info.collect { |k, v| [k.to_sym, v] }.to_h
602
+ UI.user_error!("`app_review_information` must be a hash", show_github_issues: true) unless info.kind_of?(Hash)
603
+
604
+ attributes = {}
605
+ REVIEW_INFORMATION_VALUES.each do |key, attribute_name|
606
+ strip_value = info[key].to_s.strip
607
+ attributes[attribute_name] = strip_value unless strip_value.empty?
608
+ end
609
+
610
+ if !attributes["demo_account_name"].to_s.empty? && !attributes["demo_account_password"].to_s.empty?
611
+ attributes["demo_account_required"] = true
612
+ else
613
+ attributes["demo_account_required"] = false
614
+ end
615
+
616
+ UI.message("Uploading app review information to App Store Connect")
617
+ app_store_review_detail = begin
618
+ version.fetch_app_store_review_detail
619
+ rescue => error
620
+ UI.error("Error fetching app store review detail - #{error.message}")
621
+ nil
622
+ end # errors if doesn't exist
623
+ if app_store_review_detail
624
+ app_store_review_detail.update(attributes: attributes)
625
+ else
626
+ version.create_app_store_review_detail(attributes: attributes)
627
+ end
628
+ end
629
+
630
+ def set_review_attachment_file(version, options)
631
+ app_store_review_detail = version.fetch_app_store_review_detail
632
+ app_store_review_attachments = app_store_review_detail.app_store_review_attachments || []
633
+
634
+ if options[:app_review_attachment_file]
635
+ app_store_review_attachments.each do |app_store_review_attachment|
636
+ UI.message("Removing previous review attachment file from App Store Connect")
637
+ app_store_review_attachment.delete!
638
+ end
639
+
640
+ UI.message("Uploading review attachment file to App Store Connect")
641
+ app_store_review_detail.upload_attachment(path: options[:app_review_attachment_file])
642
+ else
643
+ app_store_review_attachments.each(&:delete!)
644
+ UI.message("Removing review attachment file to App Store Connect") unless app_store_review_attachments.empty?
645
+ end
646
+ end
647
+
648
+ def set_app_rating(version, options)
649
+ return unless options[:app_rating_config_path]
650
+
651
+ require 'json'
652
+ begin
653
+ json = JSON.parse(File.read(options[:app_rating_config_path]))
654
+ rescue => ex
655
+ UI.error(ex.to_s)
656
+ UI.user_error!("Error parsing JSON file at path '#{options[:app_rating_config_path]}'")
657
+ end
658
+ UI.message("Setting the app's age rating...")
659
+
660
+ # Maping from legacy ITC values to App Store Connect Values
661
+ mapped_values = {}
662
+ attributes = {}
663
+ json.each do |k, v|
664
+ new_key = Spaceship::ConnectAPI::AgeRatingDeclaration.map_key_from_itc(k)
665
+ new_value = Spaceship::ConnectAPI::AgeRatingDeclaration.map_value_from_itc(new_key, v)
666
+
667
+ mapped_values[k] = new_key
668
+ mapped_values[v] = new_value
669
+
670
+ attributes[new_key] = new_value
671
+ end
672
+
673
+ # Print deprecation warnings if category was mapped
674
+ has_mapped_values = false
675
+ mapped_values.each do |k, v|
676
+ next if k.nil? || v.nil?
677
+ next if k == v
678
+ has_mapped_values = true
679
+ UI.deprecated("Age rating '#{k}' from iTunesConnect has been deprecated. Please replace with '#{v}'")
680
+ end
681
+ UI.deprecated("You can find more info at https://docs.fastlane.tools/actions/deliver/#reference") if has_mapped_values
682
+
683
+ age_rating_declaration = version.fetch_age_rating_declaration
684
+ age_rating_declaration.update(attributes: attributes)
685
+ end
686
+ end
687
+ # rubocop:enable Metrics/ClassLength
688
+ end