fastlane_hotfix 2.165.1 → 2.187.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (415) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +106 -86
  4. data/cert/lib/cert/commands_generator.rb +2 -1
  5. data/cert/lib/cert/options.rb +6 -5
  6. data/cert/lib/cert/runner.rb +8 -8
  7. data/deliver/lib/assets/summary.html.erb +10 -10
  8. data/deliver/lib/deliver/app_screenshot.rb +17 -11
  9. data/deliver/lib/deliver/app_screenshot_validator.rb +108 -0
  10. data/deliver/lib/deliver/commands_generator.rb +4 -3
  11. data/deliver/lib/deliver/detect_values.rb +5 -3
  12. data/deliver/lib/deliver/download_screenshots.rb +2 -3
  13. data/deliver/lib/deliver/html_generator.rb +2 -2
  14. data/deliver/lib/deliver/languages.rb +1 -1
  15. data/deliver/lib/deliver/loader.rb +123 -21
  16. data/deliver/lib/deliver/module.rb +6 -0
  17. data/deliver/lib/deliver/options.rb +41 -55
  18. data/deliver/lib/deliver/runner.rb +19 -14
  19. data/deliver/lib/deliver/setup.rb +9 -5
  20. data/deliver/lib/deliver/submit_for_review.rb +4 -4
  21. data/deliver/lib/deliver/upload_metadata.rb +32 -21
  22. data/deliver/lib/deliver/upload_price_tier.rb +1 -1
  23. data/deliver/lib/deliver/upload_screenshots.rb +14 -76
  24. data/fastlane/lib/fastlane/actions/actions_helper.rb +3 -3
  25. data/fastlane/lib/fastlane/actions/adb.rb +2 -5
  26. data/fastlane/lib/fastlane/actions/adb_devices.rb +0 -1
  27. data/fastlane/lib/fastlane/actions/add_git_tag.rb +22 -6
  28. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +17 -17
  29. data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +21 -7
  30. data/fastlane/lib/fastlane/actions/appaloosa.rb +7 -2
  31. data/fastlane/lib/fastlane/actions/appetize.rb +13 -8
  32. data/fastlane/lib/fastlane/actions/appetize_viewing_url_generator.rb +0 -11
  33. data/fastlane/lib/fastlane/actions/appium.rb +40 -65
  34. data/fastlane/lib/fastlane/actions/appledoc.rb +46 -46
  35. data/fastlane/lib/fastlane/actions/apteligent.rb +3 -2
  36. data/fastlane/lib/fastlane/actions/artifactory.rb +41 -9
  37. data/fastlane/lib/fastlane/actions/automatic_code_signing.rb +7 -13
  38. data/fastlane/lib/fastlane/actions/backup_file.rb +1 -1
  39. data/fastlane/lib/fastlane/actions/backup_xcarchive.rb +3 -3
  40. data/fastlane/lib/fastlane/actions/badge.rb +9 -13
  41. data/fastlane/lib/fastlane/actions/build_and_upload_to_appetize.rb +11 -5
  42. data/fastlane/lib/fastlane/actions/build_app.rb +7 -1
  43. data/fastlane/lib/fastlane/actions/bundle_install.rb +8 -10
  44. data/fastlane/lib/fastlane/actions/carthage.rb +22 -14
  45. data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +8 -17
  46. data/fastlane/lib/fastlane/actions/chatwork.rb +3 -2
  47. data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +9 -1
  48. data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +0 -1
  49. data/fastlane/lib/fastlane/actions/clean_cocoapods_cache.rb +0 -1
  50. data/fastlane/lib/fastlane/actions/clipboard.rb +3 -6
  51. data/fastlane/lib/fastlane/actions/cloc.rb +9 -13
  52. data/fastlane/lib/fastlane/actions/cocoapods.rb +23 -15
  53. data/fastlane/lib/fastlane/actions/commit_github_file.rb +12 -4
  54. data/fastlane/lib/fastlane/actions/commit_version_bump.rb +6 -7
  55. data/fastlane/lib/fastlane/actions/copy_artifacts.rb +3 -4
  56. data/fastlane/lib/fastlane/actions/crashlytics.rb +7 -11
  57. data/fastlane/lib/fastlane/actions/create_app_on_managed_play_store.rb +70 -76
  58. data/fastlane/lib/fastlane/actions/create_keychain.rb +13 -11
  59. data/fastlane/lib/fastlane/actions/create_pull_request.rb +15 -9
  60. data/fastlane/lib/fastlane/actions/create_xcframework.rb +123 -0
  61. data/fastlane/lib/fastlane/actions/danger.rb +13 -12
  62. data/fastlane/lib/fastlane/actions/deploygate.rb +1 -2
  63. data/fastlane/lib/fastlane/actions/docs/build_app.md +1 -1
  64. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +27 -28
  65. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +7 -3
  66. data/fastlane/lib/fastlane/actions/docs/create_app_online.md +171 -67
  67. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +20 -3
  68. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +9 -3
  69. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +39 -16
  70. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -1
  71. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +15 -5
  72. data/fastlane/lib/fastlane/actions/download_app_privacy_details_from_app_store.rb +142 -0
  73. data/fastlane/lib/fastlane/actions/download_dsyms.rb +8 -20
  74. data/fastlane/lib/fastlane/actions/dsym_zip.rb +1 -1
  75. data/fastlane/lib/fastlane/actions/ensure_env_vars.rb +2 -6
  76. data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +0 -1
  77. data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +3 -4
  78. data/fastlane/lib/fastlane/actions/ensure_no_debug_code.rb +3 -5
  79. data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +1 -2
  80. data/fastlane/lib/fastlane/actions/environment_variable.rb +13 -21
  81. data/fastlane/lib/fastlane/actions/erb.rb +2 -5
  82. data/fastlane/lib/fastlane/actions/get_build_number_repository.rb +1 -1
  83. data/fastlane/lib/fastlane/actions/get_certificates.rb +5 -1
  84. data/fastlane/lib/fastlane/actions/get_github_release.rb +11 -1
  85. data/fastlane/lib/fastlane/actions/get_ipa_info_plist_value.rb +0 -1
  86. data/fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb +32 -35
  87. data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +9 -1
  88. data/fastlane/lib/fastlane/actions/get_push_certificate.rb +1 -1
  89. data/fastlane/lib/fastlane/actions/get_version_number.rb +17 -10
  90. data/fastlane/lib/fastlane/actions/git_add.rb +5 -10
  91. data/fastlane/lib/fastlane/actions/git_branch.rb +4 -10
  92. data/fastlane/lib/fastlane/actions/git_commit.rb +12 -10
  93. data/fastlane/lib/fastlane/actions/git_pull.rb +4 -10
  94. data/fastlane/lib/fastlane/actions/git_remote_branch.rb +57 -0
  95. data/fastlane/lib/fastlane/actions/git_submodule_update.rb +16 -8
  96. data/fastlane/lib/fastlane/actions/git_tag_exists.rb +4 -0
  97. data/fastlane/lib/fastlane/actions/github_api.rb +17 -8
  98. data/fastlane/lib/fastlane/actions/gradle.rb +12 -20
  99. data/fastlane/lib/fastlane/actions/hg_commit_version_bump.rb +1 -1
  100. data/fastlane/lib/fastlane/actions/hg_push.rb +1 -1
  101. data/fastlane/lib/fastlane/actions/hipchat.rb +6 -6
  102. data/fastlane/lib/fastlane/actions/hockey.rb +5 -12
  103. data/fastlane/lib/fastlane/actions/ifttt.rb +3 -6
  104. data/fastlane/lib/fastlane/actions/import_from_git.rb +7 -9
  105. data/fastlane/lib/fastlane/actions/increment_build_number.rb +8 -2
  106. data/fastlane/lib/fastlane/actions/install_on_device.rb +3 -6
  107. data/fastlane/lib/fastlane/actions/install_provisioning_profile.rb +4 -0
  108. data/fastlane/lib/fastlane/actions/installr.rb +22 -25
  109. data/fastlane/lib/fastlane/actions/ipa.rb +2 -2
  110. data/fastlane/lib/fastlane/actions/jazzy.rb +11 -8
  111. data/fastlane/lib/fastlane/actions/jira.rb +61 -14
  112. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +6 -6
  113. data/fastlane/lib/fastlane/actions/lcov.rb +0 -4
  114. data/fastlane/lib/fastlane/actions/mailgun.rb +21 -27
  115. data/fastlane/lib/fastlane/actions/make_changelog_from_jenkins.rb +1 -1
  116. data/fastlane/lib/fastlane/actions/match_nuke.rb +59 -0
  117. data/fastlane/lib/fastlane/actions/modify_services.rb +59 -24
  118. data/fastlane/lib/fastlane/actions/nexus_upload.rb +3 -2
  119. data/fastlane/lib/fastlane/actions/notarize.rb +98 -54
  120. data/fastlane/lib/fastlane/actions/notification.rb +1 -1
  121. data/fastlane/lib/fastlane/actions/number_of_commits.rb +1 -1
  122. data/fastlane/lib/fastlane/actions/oclint.rb +15 -14
  123. data/fastlane/lib/fastlane/actions/onesignal.rb +13 -3
  124. data/fastlane/lib/fastlane/actions/pod_push.rb +9 -2
  125. data/fastlane/lib/fastlane/actions/podio_item.rb +0 -7
  126. data/fastlane/lib/fastlane/actions/prompt.rb +3 -4
  127. data/fastlane/lib/fastlane/actions/push_git_tags.rb +1 -1
  128. data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +14 -3
  129. data/fastlane/lib/fastlane/actions/puts.rb +1 -2
  130. data/fastlane/lib/fastlane/actions/register_device.rb +10 -13
  131. data/fastlane/lib/fastlane/actions/register_devices.rb +11 -14
  132. data/fastlane/lib/fastlane/actions/reset_git_repo.rb +5 -8
  133. data/fastlane/lib/fastlane/actions/reset_simulator_contents.rb +0 -2
  134. data/fastlane/lib/fastlane/actions/resign.rb +2 -9
  135. data/fastlane/lib/fastlane/actions/restore_file.rb +1 -1
  136. data/fastlane/lib/fastlane/actions/rsync.rb +3 -6
  137. data/fastlane/lib/fastlane/actions/run_tests.rb +1 -1
  138. data/fastlane/lib/fastlane/actions/s3.rb +1 -1
  139. data/fastlane/lib/fastlane/actions/say.rb +2 -3
  140. data/fastlane/lib/fastlane/actions/scp.rb +4 -10
  141. data/fastlane/lib/fastlane/actions/set_build_number_repository.rb +1 -1
  142. data/fastlane/lib/fastlane/actions/set_changelog.rb +10 -13
  143. data/fastlane/lib/fastlane/actions/set_github_release.rb +23 -16
  144. data/fastlane/lib/fastlane/actions/set_info_plist_value.rb +1 -1
  145. data/fastlane/lib/fastlane/actions/set_pod_key.rb +3 -4
  146. data/fastlane/lib/fastlane/actions/setup_ci.rb +1 -2
  147. data/fastlane/lib/fastlane/actions/setup_circle_ci.rb +1 -1
  148. data/fastlane/lib/fastlane/actions/setup_jenkins.rb +7 -12
  149. data/fastlane/lib/fastlane/actions/setup_travis.rb +1 -1
  150. data/fastlane/lib/fastlane/actions/sh.rb +2 -4
  151. data/fastlane/lib/fastlane/actions/slack.rb +164 -145
  152. data/fastlane/lib/fastlane/actions/slather.rb +5 -21
  153. data/fastlane/lib/fastlane/actions/sonar.rb +12 -19
  154. data/fastlane/lib/fastlane/actions/sourcedocs.rb +128 -0
  155. data/fastlane/lib/fastlane/actions/spaceship_logs.rb +1 -1
  156. data/fastlane/lib/fastlane/actions/splunkmint.rb +2 -2
  157. data/fastlane/lib/fastlane/actions/spm.rb +8 -2
  158. data/fastlane/lib/fastlane/actions/ssh.rb +5 -10
  159. data/fastlane/lib/fastlane/actions/swiftlint.rb +21 -19
  160. data/fastlane/lib/fastlane/actions/sync_code_signing.rb +6 -1
  161. data/fastlane/lib/fastlane/actions/testfairy.rb +0 -1
  162. data/fastlane/lib/fastlane/actions/tryouts.rb +2 -3
  163. data/fastlane/lib/fastlane/actions/twitter.rb +0 -5
  164. data/fastlane/lib/fastlane/actions/unlock_keychain.rb +3 -3
  165. data/fastlane/lib/fastlane/actions/update_app_group_identifiers.rb +1 -4
  166. data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +8 -15
  167. data/fastlane/lib/fastlane/actions/update_fastlane.rb +31 -10
  168. data/fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb +1 -4
  169. data/fastlane/lib/fastlane/actions/update_info_plist.rb +1 -1
  170. data/fastlane/lib/fastlane/actions/update_keychain_access_groups.rb +1 -4
  171. data/fastlane/lib/fastlane/actions/update_plist.rb +1 -1
  172. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +3 -4
  173. data/fastlane/lib/fastlane/actions/update_urban_airship_configuration.rb +0 -1
  174. data/fastlane/lib/fastlane/actions/update_url_schemes.rb +15 -26
  175. data/fastlane/lib/fastlane/actions/upload_app_privacy_details_to_app_store.rb +290 -0
  176. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +8 -7
  177. data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +3 -10
  178. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +8 -4
  179. data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +7 -2
  180. data/fastlane/lib/fastlane/actions/validate_play_store_json_key.rb +40 -44
  181. data/fastlane/lib/fastlane/actions/version_get_podspec.rb +1 -2
  182. data/fastlane/lib/fastlane/actions/xcode_install.rb +8 -5
  183. data/fastlane/lib/fastlane/actions/xcode_server_get_assets.rb +3 -3
  184. data/fastlane/lib/fastlane/actions/xcodebuild.rb +5 -5
  185. data/fastlane/lib/fastlane/cli_tools_distributor.rb +6 -3
  186. data/fastlane/lib/fastlane/commands_generator.rb +2 -1
  187. data/fastlane/lib/fastlane/documentation/actions_list.rb +2 -2
  188. data/fastlane/lib/fastlane/documentation/docs_generator.rb +1 -1
  189. data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +1 -1
  190. data/fastlane/lib/fastlane/environment_printer.rb +1 -0
  191. data/fastlane/lib/fastlane/erb_template_helper.rb +7 -1
  192. data/fastlane/lib/fastlane/fast_file.rb +19 -7
  193. data/fastlane/lib/fastlane/fastlane_require.rb +7 -1
  194. data/fastlane/lib/fastlane/features.rb +1 -1
  195. data/fastlane/lib/fastlane/helper/adb_helper.rb +1 -1
  196. data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +4 -4
  197. data/fastlane/lib/fastlane/helper/gem_helper.rb +2 -2
  198. data/fastlane/lib/fastlane/helper/git_helper.rb +34 -5
  199. data/fastlane/lib/fastlane/lane_manager.rb +3 -2
  200. data/fastlane/lib/fastlane/notification/slack.rb +56 -0
  201. data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +1 -2
  202. data/fastlane/lib/fastlane/plugins/plugin_info.rb +2 -2
  203. data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +1 -2
  204. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +2 -3
  205. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +7 -6
  206. data/fastlane/lib/fastlane/plugins/template/.circleci/config.yml +1 -1
  207. data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +1 -1
  208. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +31 -35
  209. data/fastlane/lib/fastlane/plugins/template/spec/spec_helper.rb.erb +1 -1
  210. data/fastlane/lib/fastlane/setup/setup.rb +23 -10
  211. data/fastlane/lib/fastlane/setup/setup_ios.rb +3 -3
  212. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +3 -0
  213. data/fastlane/lib/fastlane/swift_fastlane_function.rb +44 -16
  214. data/fastlane/lib/fastlane/swift_runner_upgrader.rb +2 -0
  215. data/fastlane/lib/fastlane/version.rb +2 -2
  216. data/fastlane/swift/Actions.swift +1 -1
  217. data/fastlane/swift/Appfile.swift +1 -1
  218. data/fastlane/swift/ArgumentProcessor.swift +1 -1
  219. data/fastlane/swift/ControlCommand.swift +1 -1
  220. data/fastlane/swift/Deliverfile.swift +2 -2
  221. data/fastlane/swift/DeliverfileProtocol.swift +23 -23
  222. data/fastlane/swift/Fastfile.swift +1 -1
  223. data/fastlane/swift/Fastlane.swift +7965 -4213
  224. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +4 -0
  225. data/fastlane/swift/Gymfile.swift +2 -2
  226. data/fastlane/swift/GymfileProtocol.swift +15 -3
  227. data/fastlane/swift/LaneFileProtocol.swift +12 -6
  228. data/fastlane/swift/MainProcess.swift +3 -1
  229. data/fastlane/swift/Matchfile.swift +2 -2
  230. data/fastlane/swift/MatchfileProtocol.swift +4 -4
  231. data/fastlane/swift/OptionalConfigValue.swift +101 -0
  232. data/fastlane/swift/Plugins.swift +1 -1
  233. data/fastlane/swift/Precheckfile.swift +2 -2
  234. data/fastlane/swift/PrecheckfileProtocol.swift +8 -4
  235. data/fastlane/swift/RubyCommand.swift +2 -2
  236. data/fastlane/swift/RubyCommandable.swift +1 -1
  237. data/fastlane/swift/Runner.swift +3 -3
  238. data/fastlane/swift/RunnerArgument.swift +1 -1
  239. data/fastlane/swift/Scanfile.swift +2 -2
  240. data/fastlane/swift/ScanfileProtocol.swift +34 -2
  241. data/fastlane/swift/Screengrabfile.swift +2 -2
  242. data/fastlane/swift/ScreengrabfileProtocol.swift +5 -5
  243. data/fastlane/swift/Snapshotfile.swift +2 -2
  244. data/fastlane/swift/SnapshotfileProtocol.swift +19 -3
  245. data/fastlane/swift/SocketClient.swift +4 -3
  246. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  247. data/fastlane/swift/SocketResponse.swift +5 -3
  248. data/fastlane/swift/formatting/Brewfile.lock.json +24 -16
  249. data/fastlane/swift/main.swift +1 -1
  250. data/fastlane/swift/upgrade_manifest.json +1 -1
  251. data/fastlane_core/lib/fastlane_core.rb +22 -20
  252. data/fastlane_core/lib/fastlane_core/build_watcher.rb +89 -12
  253. data/fastlane_core/lib/fastlane_core/cert_checker.rb +12 -7
  254. data/fastlane_core/lib/fastlane_core/clipboard.rb +20 -0
  255. data/fastlane_core/lib/fastlane_core/command_executor.rb +3 -9
  256. data/fastlane_core/lib/fastlane_core/configuration/commander_generator.rb +6 -1
  257. data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +41 -3
  258. data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +14 -8
  259. data/fastlane_core/lib/fastlane_core/device_manager.rb +1 -1
  260. data/fastlane_core/lib/fastlane_core/helper.rb +78 -14
  261. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +41 -16
  262. data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +3 -2
  263. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +20 -15
  264. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +1 -1
  265. data/fastlane_core/lib/fastlane_core/languages.rb +2 -2
  266. data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +3 -2
  267. data/fastlane_core/lib/fastlane_core/print_table.rb +5 -3
  268. data/fastlane_core/lib/fastlane_core/project.rb +48 -28
  269. data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +3 -1
  270. data/{deliver/lib/deliver → fastlane_core/lib/fastlane_core}/queue_worker.rb +4 -4
  271. data/fastlane_core/lib/fastlane_core/swag.rb +1 -1
  272. data/fastlane_core/lib/fastlane_core/ui/disable_colors.rb +8 -0
  273. data/fastlane_core/lib/fastlane_core/ui/help.erb +35 -0
  274. data/fastlane_core/lib/fastlane_core/ui/help_formatter.rb +16 -0
  275. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +16 -2
  276. data/fastlane_core/lib/fastlane_core/ui/interface.rb +1 -1
  277. data/fastlane_core/lib/fastlane_core/update_checker/update_checker.rb +2 -2
  278. data/frameit/lib/frameit/commands_generator.rb +2 -1
  279. data/frameit/lib/frameit/config_parser.rb +2 -2
  280. data/frameit/lib/frameit/device_types.rb +7 -1
  281. data/frameit/lib/frameit/frame_downloader.rb +2 -1
  282. data/gym/lib/gym/code_signing_mapping.rb +3 -3
  283. data/gym/lib/gym/commands_generator.rb +2 -1
  284. data/gym/lib/gym/error_handler.rb +8 -0
  285. data/gym/lib/gym/generators/build_command_generator.rb +3 -0
  286. data/gym/lib/gym/generators/package_command_generator.rb +4 -0
  287. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +21 -15
  288. data/gym/lib/gym/options.rb +19 -3
  289. data/gym/lib/gym/runner.rb +15 -4
  290. data/match/lib/match/change_password.rb +3 -3
  291. data/match/lib/match/commands_generator.rb +2 -1
  292. data/match/lib/match/encryption/interface.rb +1 -1
  293. data/match/lib/match/encryption/openssl.rb +5 -3
  294. data/match/lib/match/importer.rb +9 -10
  295. data/match/lib/match/migrate.rb +2 -3
  296. data/match/lib/match/module.rb +2 -1
  297. data/match/lib/match/nuke.rb +19 -15
  298. data/match/lib/match/options.rb +4 -3
  299. data/match/lib/match/runner.rb +3 -4
  300. data/match/lib/match/spaceship_ensure.rb +3 -0
  301. data/match/lib/match/storage/git_storage.rb +14 -10
  302. data/match/lib/match/storage/google_cloud_storage.rb +2 -2
  303. data/match/lib/match/storage/s3_storage.rb +2 -2
  304. data/pem/lib/pem/commands_generator.rb +2 -1
  305. data/pilot/lib/pilot.rb +0 -1
  306. data/pilot/lib/pilot/build_manager.rb +41 -15
  307. data/pilot/lib/pilot/commands_generator.rb +2 -1
  308. data/pilot/lib/pilot/manager.rb +11 -8
  309. data/pilot/lib/pilot/options.rb +18 -9
  310. data/pilot/lib/pilot/tester_exporter.rb +0 -1
  311. data/pilot/lib/pilot/tester_manager.rb +0 -1
  312. data/precheck/lib/precheck/commands_generator.rb +2 -1
  313. data/precheck/lib/precheck/options.rb +9 -3
  314. data/precheck/lib/precheck/rule_processor.rb +1 -1
  315. data/precheck/lib/precheck/runner.rb +14 -9
  316. data/produce/lib/produce/commands_generator.rb +101 -28
  317. data/produce/lib/produce/developer_center.rb +42 -4
  318. data/produce/lib/produce/options.rb +1 -1
  319. data/produce/lib/produce/service.rb +270 -179
  320. data/scan/lib/scan/commands_generator.rb +2 -1
  321. data/scan/lib/scan/detect_values.rb +7 -2
  322. data/scan/lib/scan/module.rb +4 -0
  323. data/scan/lib/scan/options.rb +46 -1
  324. data/scan/lib/scan/runner.rb +88 -3
  325. data/scan/lib/scan/slack_poster.rb +4 -1
  326. data/scan/lib/scan/test_command_generator.rb +13 -8
  327. data/screengrab/lib/screengrab/android_environment.rb +5 -53
  328. data/screengrab/lib/screengrab/commands_generator.rb +2 -1
  329. data/screengrab/lib/screengrab/dependency_checker.rb +0 -20
  330. data/screengrab/lib/screengrab/options.rb +5 -2
  331. data/screengrab/lib/screengrab/runner.rb +111 -108
  332. data/sigh/lib/assets/resign.sh +81 -61
  333. data/sigh/lib/sigh/commands_generator.rb +2 -1
  334. data/sigh/lib/sigh/download_all.rb +4 -8
  335. data/sigh/lib/sigh/options.rb +3 -2
  336. data/sigh/lib/sigh/runner.rb +9 -9
  337. data/snapshot/lib/assets/SnapfileTemplate +3 -2
  338. data/snapshot/lib/assets/SnapfileTemplate.swift +2 -1
  339. data/snapshot/lib/assets/SnapshotHelper.swift +20 -12
  340. data/snapshot/lib/snapshot/commands_generator.rb +3 -1
  341. data/snapshot/lib/snapshot/options.rb +22 -2
  342. data/snapshot/lib/snapshot/reports_generator.rb +7 -1
  343. data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
  344. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +1 -1
  345. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +10 -5
  346. data/snapshot/lib/snapshot/test_command_generator.rb +18 -4
  347. data/snapshot/lib/snapshot/test_command_generator_base.rb +3 -1
  348. data/snapshot/lib/snapshot/test_command_generator_xcode_8.rb +1 -1
  349. data/snapshot/lib/snapshot/update.rb +1 -1
  350. data/spaceship/README.md +4 -14
  351. data/spaceship/lib/spaceship/base.rb +2 -2
  352. data/spaceship/lib/spaceship/client.rb +47 -29
  353. data/spaceship/lib/spaceship/commands_generator.rb +4 -2
  354. data/spaceship/lib/spaceship/connect_api.rb +6 -0
  355. data/spaceship/lib/spaceship/connect_api/api_client.rb +67 -9
  356. data/spaceship/lib/spaceship/connect_api/model.rb +1 -1
  357. data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +39 -6
  358. data/spaceship/lib/spaceship/connect_api/models/app.rb +95 -55
  359. data/spaceship/lib/spaceship/connect_api/models/app_data_usage.rb +59 -0
  360. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_category.rb +65 -0
  361. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_data_protection.rb +27 -0
  362. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_grouping.rb +18 -0
  363. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_purposes.rb +37 -0
  364. data/spaceship/lib/spaceship/connect_api/models/app_data_usages_publish_state.rb +36 -0
  365. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +26 -10
  366. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +8 -4
  367. data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +15 -11
  368. data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +18 -9
  369. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +10 -8
  370. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +20 -11
  371. data/spaceship/lib/spaceship/connect_api/models/app_store_review_attachment.rb +7 -5
  372. data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +6 -4
  373. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +62 -38
  374. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +27 -14
  375. data/spaceship/lib/spaceship/connect_api/models/app_store_version_submission.rb +3 -2
  376. data/spaceship/lib/spaceship/connect_api/models/beta_app_review_submission.rb +3 -2
  377. data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +6 -4
  378. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +29 -3
  379. data/spaceship/lib/spaceship/connect_api/models/beta_tester.rb +15 -9
  380. data/spaceship/lib/spaceship/connect_api/models/build.rb +34 -17
  381. data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +4 -0
  382. data/spaceship/lib/spaceship/connect_api/models/build_delivery.rb +3 -2
  383. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +41 -6
  384. data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +86 -21
  385. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +12 -8
  386. data/spaceship/lib/spaceship/connect_api/models/device.rb +36 -4
  387. data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +6 -4
  388. data/spaceship/lib/spaceship/connect_api/models/profile.rb +18 -8
  389. data/spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb +3 -2
  390. data/spaceship/lib/spaceship/connect_api/models/sandbox_tester.rb +9 -6
  391. data/spaceship/lib/spaceship/connect_api/models/territory.rb +3 -2
  392. data/spaceship/lib/spaceship/connect_api/models/user.rb +6 -4
  393. data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +22 -6
  394. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +99 -2
  395. data/spaceship/lib/spaceship/connect_api/response.rb +3 -1
  396. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +50 -0
  397. data/spaceship/lib/spaceship/connect_api/token.rb +15 -3
  398. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +122 -2
  399. data/spaceship/lib/spaceship/errors.rb +19 -0
  400. data/spaceship/lib/spaceship/playground.rb +2 -2
  401. data/spaceship/lib/spaceship/spaceauth_runner.rb +38 -15
  402. data/spaceship/lib/spaceship/tunes/iap_detail.rb +1 -1
  403. data/spaceship/lib/spaceship/tunes/members.rb +1 -1
  404. data/spaceship/lib/spaceship/tunes/tunes_client.rb +4 -4
  405. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +59 -33
  406. data/spaceship/lib/spaceship/ui.rb +2 -2
  407. data/spaceship/lib/spaceship/upgrade_2fa_later_client.rb +91 -0
  408. data/supply/lib/supply.rb +1 -1
  409. data/supply/lib/supply/client.rb +5 -3
  410. data/supply/lib/supply/commands_generator.rb +2 -1
  411. data/supply/lib/supply/options.rb +3 -3
  412. data/supply/lib/supply/uploader.rb +6 -4
  413. metadata +125 -93
  414. data/pilot/lib/pilot/features.rb +0 -0
  415. data/pilot/lib/pilot/tester_util.rb +0 -0
@@ -43,6 +43,25 @@ module Spaceship
43
43
  end
44
44
  end
45
45
 
46
+ # Raised when 429 is received from App Store Connect
47
+ class TooManyRequestsError < BasicPreferredInfoError
48
+ attr_reader :retry_after
49
+ attr_reader :rate_limit_user
50
+
51
+ def initialize(resp_hash)
52
+ headers = resp_hash[:response_headers] || {}
53
+ @retry_after = (headers['retry-after'] || 60).to_i
54
+ @rate_limit_user = headers['x-daiquiri-rate-limit-user']
55
+ message = 'Apple 429 detected'
56
+ message += " - #{rate_limit_user}" if rate_limit_user
57
+ super(message)
58
+ end
59
+
60
+ def show_github_issues
61
+ false
62
+ end
63
+ end
64
+
46
65
  class UnexpectedResponse < StandardError
47
66
  attr_reader :error_info
48
67
 
@@ -13,8 +13,8 @@ module Spaceship
13
13
  rescue Gem::LoadError
14
14
  puts("Could not find gem 'pry'".red)
15
15
  puts("")
16
- puts("If you installed spaceship using `sudo gem install spaceship` run")
17
- puts(" sudo gem install pry".yellow)
16
+ puts("If you installed spaceship using `gem install spaceship` run")
17
+ puts(" gem install pry".yellow)
18
18
  puts("to install the missing gem")
19
19
  puts("")
20
20
  puts("If you use a Gemfile add this to your Gemfile:")
@@ -1,15 +1,17 @@
1
1
  require 'colored'
2
2
  require 'credentials_manager/appfile_config'
3
3
  require 'yaml'
4
+ require 'fastlane_core'
4
5
 
5
6
  require_relative 'tunes/tunes_client'
6
7
 
7
8
  module Spaceship
8
9
  class SpaceauthRunner
9
- def initialize(username: nil)
10
+ def initialize(username: nil, copy_to_clipboard: nil)
10
11
  @username = username
11
12
  @username ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
12
13
  @username ||= ask("Username: ")
14
+ @copy_to_clipboard = copy_to_clipboard
13
15
  end
14
16
 
15
17
  def run
@@ -22,7 +24,7 @@ module Spaceship
22
24
  puts("Could not login to App Store Connect".red)
23
25
  puts("Please check your credentials and try again.".yellow)
24
26
  puts("This could be an issue with App Store Connect,".yellow)
25
- puts("Please try unsetting the FASTLANE_SESSION environment variable".yellow)
27
+ puts("Please try unsetting the FASTLANE_SESSION environment variable by calling 'unset FASTLANE_SESSION'".yellow)
26
28
  puts("(if it is set) and re-run `fastlane spaceauth`".yellow)
27
29
  puts("")
28
30
  puts("Exception type: #{ex.class}")
@@ -37,34 +39,55 @@ module Spaceship
37
39
  # Example:
38
40
  # name: DES5c148586daa451e55afb017aa62418f91
39
41
  # value: HSARMTKNSRVTWFlaF/ek8asaa9lymMA0dN8JQ6pY7B3F5kdqTxJvMT19EVEFX8EQudB/uNwBHOHzaa30KYTU/eCP/UF7vGTgxs6PAnlVWKscWssOVHfP2IKWUPaa4Dn+I6ilA7eAFQsiaaVT
40
- cookies = YAML.safe_load(
41
- itc_cookie_content,
42
- [HTTP::Cookie, Time], # classes allowlist
43
- [], # symbols allowlist
44
- true # allow YAML aliases
45
- )
42
+ cookies = load_cookies(itc_cookie_content)
46
43
 
47
44
  # We remove all the un-needed cookies
48
45
  cookies.select! do |cookie|
49
46
  cookie.name.start_with?("myacinfo") || cookie.name == "dqsid" || cookie.name.start_with?("DES")
50
47
  end
51
48
 
52
- yaml = cookies.to_yaml.gsub("\n", "\\n")
49
+ @yaml = cookies.to_yaml.gsub("\n", "\\n")
53
50
 
54
51
  puts("---")
55
52
  puts("")
56
53
  puts("Pass the following via the FASTLANE_SESSION environment variable:")
57
- puts(yaml.cyan.underline)
54
+ puts(@yaml.cyan.underline)
58
55
  puts("")
59
56
  puts("")
60
57
  puts("Example:")
61
- puts("export FASTLANE_SESSION='#{yaml}'".cyan.underline)
58
+ puts("export FASTLANE_SESSION='#{@yaml}'".cyan.underline)
62
59
 
63
- if mac? && Spaceship::Client::UserInterface.interactive? && agree("🙄 Should fastlane copy the cookie into your clipboard, so you can easily paste it? (y/n)", true)
64
- require 'open3'
65
- Open3.popen3('pbcopy') { |input, _, _| input << yaml }
66
- puts("Successfully copied text into your clipboard 🎨".green)
60
+ if @copy_to_clipboard == false
61
+ puts("Skipped asking to copy the session string into your clipboard ⏭️".green)
62
+ elsif @copy_to_clipboard || (mac? && Spaceship::Client::UserInterface.interactive? && agree("🙄 Should fastlane copy the cookie into your clipboard, so you can easily paste it? (y/n)", true))
63
+ FastlaneCore::Clipboard.copy(content: @yaml)
64
+ puts("Successfully copied the session string into your clipboard 🎨".green)
67
65
  end
66
+
67
+ return self
68
+ end
69
+
70
+ def load_cookies(content)
71
+ # When Ruby 2.5 support is dropped, we can safely get rid of the latter branch.
72
+ if YAML.name == 'Psych' && Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1')
73
+ YAML.safe_load(
74
+ content,
75
+ permitted_classes: [HTTP::Cookie, Time],
76
+ aliases: true
77
+ )
78
+ else
79
+ YAML.safe_load(
80
+ content,
81
+ [HTTP::Cookie, Time], # classes allowlist
82
+ [], # symbols allowlist
83
+ true # allow YAML aliases
84
+ )
85
+ end
86
+ end
87
+
88
+ def session_string
89
+ FastlaneCore::UI.user_error!("`#{__method__}` method called before calling `run` in `SpaceauthRunner`") unless @yaml
90
+ @yaml
68
91
  end
69
92
 
70
93
  def mac?
@@ -242,7 +242,7 @@ module Spaceship
242
242
  # @return ([Spaceship::Tunes::PricingInfo]) An array of pricing infos from the same tier
243
243
  def world_wide_pricing_info
244
244
  client
245
- .pricing_tiers
245
+ .pricing_tiers(application.apple_id)
246
246
  .find { |p| p.tier_stem == pricing_intervals.first[:tier].to_s }
247
247
  .pricing_info
248
248
  end
@@ -15,7 +15,7 @@ module Spaceship
15
15
 
16
16
  def find(email)
17
17
  all.each do |member|
18
- if member.email_address == email
18
+ if member.email_address.casecmp?(email)
19
19
  return member
20
20
  end
21
21
  end
@@ -579,10 +579,10 @@ module Spaceship
579
579
  }
580
580
 
581
581
  r = request(:post) do |req|
582
- req.url("https://analytics.itunes.apple.com/analytics/api/v1/data/time-series")
582
+ req.url("https://appstoreconnect.apple.com/analytics/api/v1/data/time-series")
583
583
  req.body = data.to_json
584
584
  req.headers['Content-Type'] = 'application/json'
585
- req.headers['X-Requested-By'] = 'analytics.itunes.apple.com'
585
+ req.headers['X-Requested-By'] = 'appstoreconnect.apple.com'
586
586
  end
587
587
 
588
588
  data = parse_response(r)
@@ -704,9 +704,9 @@ module Spaceship
704
704
  # ...
705
705
  # }, {
706
706
  # ...
707
- def pricing_tiers
707
+ def pricing_tiers(app_id)
708
708
  @pricing_tiers ||= begin
709
- r = request(:get, 'ra/apps/pricing/matrix')
709
+ r = request(:get, "ra/apps/#{app_id}/iaps/pricing/matrix")
710
710
  data = parse_response(r, 'data')['pricingTiers']
711
711
  data.map { |tier| Spaceship::Tunes::PricingTier.factory(tier) }
712
712
  end
@@ -4,6 +4,7 @@ require_relative 'tunes/tunes_client'
4
4
  module Spaceship
5
5
  class Client
6
6
  def handle_two_step_or_factor(response)
7
+ raise "2FA can only be performed in interactive mode" if ENV["SPACESHIP_ONLY_ALLOW_INTERACTIVE_2FA"] == "true" && ENV["FASTLANE_IS_INTERACTIVE"] == "false"
7
8
  # extract `x-apple-id-session-id` and `scnt` from response, to be used by `update_request_headers`
8
9
  @x_apple_id_session_id = response["x-apple-id-session-id"]
9
10
  @scnt = response["scnt"]
@@ -134,18 +135,20 @@ module Spaceship
134
135
 
135
136
  phone_number = env_2fa_sms_default_phone_number
136
137
  phone_id = phone_id_from_number(response.body["trustedPhoneNumbers"], phone_number)
138
+ push_mode = push_mode_from_number(response.body["trustedPhoneNumbers"], phone_number)
137
139
  # don't request sms if no trusted devices and env default is the only trusted number,
138
140
  # code was automatically sent
139
141
  should_request_code = !sms_automatically_sent(response)
140
142
  code_type = 'phone'
141
- body = request_two_factor_code_from_phone(phone_id, phone_number, code_length, should_request_code)
143
+ body = request_two_factor_code_from_phone(phone_id, phone_number, code_length, push_mode, should_request_code)
142
144
  elsif sms_automatically_sent(response) # sms fallback, code was automatically sent
143
145
  fallback_number = response.body["trustedPhoneNumbers"].first
144
146
  phone_number = fallback_number["numberWithDialCode"]
145
147
  phone_id = fallback_number["id"]
148
+ push_mode = fallback_number['pushMode']
146
149
 
147
150
  code_type = 'phone'
148
- body = request_two_factor_code_from_phone(phone_id, phone_number, code_length, false)
151
+ body = request_two_factor_code_from_phone(phone_id, phone_number, code_length, push_mode, false)
149
152
  elsif sms_fallback(response) # sms fallback but code wasn't sent bec > 1 phone number
150
153
  code_type = 'phone'
151
154
  body = request_two_factor_code_from_phone_choose(response.body["trustedPhoneNumbers"], code_length)
@@ -231,34 +234,8 @@ module Spaceship
231
234
  end
232
235
 
233
236
  def phone_id_from_number(phone_numbers, phone_number)
234
- characters_to_remove_from_phone_numbers = ' \-()"'
235
-
236
- # start with e.g. +49 162 1234585 or +1-123-456-7866
237
- phone_number = phone_number.tr(characters_to_remove_from_phone_numbers, '')
238
- # cleaned: +491621234585 or +11234567866
239
-
240
237
  phone_numbers.each do |phone|
241
- # rubocop:disable Style/AsciiComments
242
- # start with: +49 •••• •••••85 or +1 (•••) •••-••66
243
- number_with_dialcode_masked = phone['numberWithDialCode'].tr(characters_to_remove_from_phone_numbers, '')
244
- # cleaned: +49•••••••••85 or +1••••••••66
245
- # rubocop:enable Style/AsciiComments
246
-
247
- maskings_count = number_with_dialcode_masked.count('•') # => 9 or 8
248
- pattern = /^([0-9+]{2,4})([•]{#{maskings_count}})([0-9]{2})$/
249
- # following regex: range from maskings_count-2 because sometimes the masked number has 1 or 2 dots more than the actual number
250
- # e.g. https://github.com/fastlane/fastlane/issues/14969
251
- replacement = "\\1([0-9]{#{maskings_count - 2},#{maskings_count}})\\3"
252
- number_with_dialcode_regex_part = number_with_dialcode_masked.gsub(pattern, replacement)
253
- # => +49([0-9]{8,9})85 or +1([0-9]{7,8})66
254
-
255
- backslash = '\\'
256
- number_with_dialcode_regex_part = backslash + number_with_dialcode_regex_part
257
- number_with_dialcode_regex = /^#{number_with_dialcode_regex_part}$/
258
- # => /^\+49([0-9]{8})85$/ or /^\+1([0-9]{7,8})66$/
259
-
260
- return phone['id'] if phone_number =~ number_with_dialcode_regex
261
- # +491621234585 matches /^\+49([0-9]{8})85$/
238
+ return phone['id'] if match_phone_to_masked_phone(phone_number, phone['numberWithDialCode'])
262
239
  end
263
240
 
264
241
  # Handle case of phone_number not existing in phone_numbers because ENV var is wrong or matcher is broken
@@ -269,12 +246,60 @@ If it is, please open an issue at https://github.com/fastlane/fastlane/issues/ne
269
246
  )
270
247
  end
271
248
 
249
+ def push_mode_from_number(phone_numbers, phone_number)
250
+ phone_numbers.each do |phone|
251
+ return phone['pushMode'] if match_phone_to_masked_phone(phone_number, phone['numberWithDialCode'])
252
+ end
253
+
254
+ # If no pushMode was supplied, assume sms
255
+ return "sms"
256
+ end
257
+
258
+ def match_phone_to_masked_phone(phone_number, masked_number)
259
+ characters_to_remove_from_phone_numbers = ' \-()"'
260
+
261
+ # start with e.g. +49 162 1234585 or +1-123-456-7866
262
+ phone_number = phone_number.tr(characters_to_remove_from_phone_numbers, '')
263
+ # cleaned: +491621234585 or +11234567866
264
+
265
+ # rubocop:disable Style/AsciiComments
266
+ # start with: +49 •••• •••••85 or +1 (•••) •••-••66
267
+ number_with_dialcode_masked = masked_number.tr(characters_to_remove_from_phone_numbers, '')
268
+ # cleaned: +49•••••••••85 or +1••••••••66
269
+ # rubocop:enable Style/AsciiComments
270
+
271
+ maskings_count = number_with_dialcode_masked.count('•') # => 9 or 8
272
+ pattern = /^([0-9+]{2,4})([•]{#{maskings_count}})([0-9]{2})$/
273
+ # following regex: range from maskings_count-2 because sometimes the masked number has 1 or 2 dots more than the actual number
274
+ # e.g. https://github.com/fastlane/fastlane/issues/14969
275
+ replacement = "\\1([0-9]{#{maskings_count - 2},#{maskings_count}})\\3"
276
+ number_with_dialcode_regex_part = number_with_dialcode_masked.gsub(pattern, replacement)
277
+ # => +49([0-9]{8,9})85 or +1([0-9]{7,8})66
278
+
279
+ backslash = '\\'
280
+ number_with_dialcode_regex_part = backslash + number_with_dialcode_regex_part
281
+ number_with_dialcode_regex = /^#{number_with_dialcode_regex_part}$/
282
+ # => /^\+49([0-9]{8})85$/ or /^\+1([0-9]{7,8})66$/
283
+
284
+ return phone_number =~ number_with_dialcode_regex
285
+ # +491621234585 matches /^\+49([0-9]{8})85$/
286
+ end
287
+
272
288
  def phone_id_from_masked_number(phone_numbers, masked_number)
273
289
  phone_numbers.each do |phone|
274
290
  return phone['id'] if phone['numberWithDialCode'] == masked_number
275
291
  end
276
292
  end
277
293
 
294
+ def push_mode_from_masked_number(phone_numbers, masked_number)
295
+ phone_numbers.each do |phone|
296
+ return phone['pushMode'] if phone['numberWithDialCode'] == masked_number
297
+ end
298
+
299
+ # If no pushMode was supplied, assume sms
300
+ return "sms"
301
+ end
302
+
278
303
  def request_two_factor_code_from_phone_choose(phone_numbers, code_length)
279
304
  puts("Please select a trusted phone number to send code to:")
280
305
 
@@ -283,18 +308,19 @@ If it is, please open an issue at https://github.com/fastlane/fastlane/issues/ne
283
308
  end
284
309
  chosen = choose_phone_number(available)
285
310
  phone_id = phone_id_from_masked_number(phone_numbers, chosen)
311
+ push_mode = push_mode_from_masked_number(phone_numbers, chosen)
286
312
 
287
- request_two_factor_code_from_phone(phone_id, chosen, code_length)
313
+ request_two_factor_code_from_phone(phone_id, chosen, code_length, push_mode)
288
314
  end
289
315
 
290
316
  # this is used in two places: after choosing a phone number and when a phone number is set via ENV var
291
- def request_two_factor_code_from_phone(phone_id, phone_number, code_length, should_request_code = true)
317
+ def request_two_factor_code_from_phone(phone_id, phone_number, code_length, push_mode = "sms", should_request_code = true)
292
318
  if should_request_code
293
319
  # Request code
294
320
  r = request(:put) do |req|
295
321
  req.url("https://idmsa.apple.com/appleauth/auth/verify/phone")
296
322
  req.headers['Content-Type'] = 'application/json'
297
- req.body = { "phoneNumber" => { "id" => phone_id }, "mode" => "sms" }.to_json
323
+ req.body = { "phoneNumber" => { "id" => phone_id }, "mode" => push_mode }.to_json
298
324
  update_request_headers(req)
299
325
  end
300
326
 
@@ -307,7 +333,7 @@ If it is, please open an issue at https://github.com/fastlane/fastlane/issues/ne
307
333
 
308
334
  code = ask_for_2fa_code("Please enter the #{code_length} digit code you received at #{phone_number}:")
309
335
 
310
- return { "securityCode" => { "code" => code.to_s }, "phoneNumber" => { "id" => phone_id }, "mode" => "sms" }.to_json
336
+ return { "securityCode" => { "code" => code.to_s }, "phoneNumber" => { "id" => phone_id }, "mode" => push_mode }.to_json
311
337
  end
312
338
 
313
339
  def store_session
@@ -18,10 +18,10 @@ module Spaceship
18
18
  end
19
19
 
20
20
  # Public getter for all UI related code
21
- # rubocop:disable Style/MethodName
21
+ # rubocop:disable Naming/MethodName
22
22
  def UI
23
23
  UserInterface.new(self)
24
24
  end
25
- # rubocop:enable Style/MethodName
25
+ # rubocop:enable Naming/MethodName
26
26
  end
27
27
  end
@@ -0,0 +1,91 @@
1
+ require_relative 'globals'
2
+ require_relative 'tunes/tunes_client'
3
+
4
+ module Spaceship
5
+ class Client
6
+ def try_upgrade_2fa_later(response)
7
+ if ENV['SPACESHIP_SKIP_2FA_UPGRADE'].nil?
8
+ return false
9
+ end
10
+
11
+ puts("This account is being prompted to upgrade to 2FA")
12
+ puts("Attempting to automatically bypass the upgrade until a later date")
13
+ puts("To disable this, remove SPACESHIP_SKIP_2FA_UPGRADE=1 environment variable")
14
+
15
+ # Get URL that requests a repair and gets the widget key
16
+ widget_key_location = response.headers['location']
17
+ uri = URI.parse(widget_key_location)
18
+ params = CGI.parse(uri.query)
19
+
20
+ widget_key = params.dig('widgetKey', 0)
21
+ if widget_key.nil?
22
+ STDERR.puts("Couldn't find widgetKey to continue with requests")
23
+ return false
24
+ end
25
+
26
+ # Step 1 - Request repair
27
+ response_repair = request(:get) do |req|
28
+ req.url(widget_key_location)
29
+ end
30
+
31
+ # Step 2 - Request repair options
32
+ response_repair_options = request(:get) do |req|
33
+ req.url("https://appleid.apple.com/account/manage/repair/options")
34
+
35
+ req.headers['scnt'] = response_repair.headers['scnt']
36
+ req.headers['X-Apple-Id-Session-Id'] = response.headers['X-Apple-Id-Session-Id']
37
+ req.headers['X-Apple-Session-Token'] = response.headers['X-Apple-Repair-Session-Token']
38
+
39
+ req.headers['X-Apple-Skip-Repair-Attributes'] = '[]'
40
+ req.headers['X-Apple-Widget-Key'] = widget_key
41
+
42
+ req.headers['Content-Type'] = 'application/json'
43
+ req.headers['X-Requested-With'] = 'XMLHttpRequest'
44
+ req.headers['Accept'] = 'application/json, text/javascript'
45
+ end
46
+
47
+ # Step 3 - Request setup later
48
+ request(:get) do |req|
49
+ req.url("https://appleid.apple.com/account/security/upgrade/setuplater")
50
+
51
+ req.headers['scnt'] = response_repair_options.headers['scnt']
52
+ req.headers['X-Apple-Id-Session-Id'] = response.headers['X-Apple-Id-Session-Id']
53
+ req.headers['X-Apple-Session-Token'] = response_repair_options.headers['x-apple-session-token']
54
+ req.headers['X-Apple-Skip-Repair-Attributes'] = '[]'
55
+ req.headers['X-Apple-Widget-Key'] = widget_key
56
+
57
+ req.headers['Content-Type'] = 'application/json'
58
+ req.headers['X-Requested-With'] = 'XMLHttpRequest'
59
+ req.headers['Accept'] = 'application/json, text/javascript'
60
+ end
61
+
62
+ # Step 4 - Post complete
63
+ response_repair_complete = request(:post) do |req|
64
+ req.url("https://idmsa.apple.com/appleauth/auth/repair/complete")
65
+
66
+ req.body = ''
67
+ req.headers['scnt'] = response.headers['scnt']
68
+ req.headers['X-Apple-Id-Session-Id'] = response.headers['X-Apple-Id-Session-Id']
69
+ req.headers['X-Apple-Repair-Session-Token'] = response_repair_options.headers['X-Apple-Session-Token']
70
+
71
+ req.headers['X-Apple-Widget-Key'] = widget_key
72
+
73
+ req.headers['Content-Type'] = 'application/json'
74
+ req.headers['X-Requested-With'] = 'XMLHttpRequest'
75
+ req.headers['Accept'] = 'application/json;charset=utf-8'
76
+ end
77
+
78
+ if response_repair_complete.status == 204
79
+ return true
80
+ else
81
+ STDERR.puts("Failed with status code of #{response_repair_complete.status}")
82
+ return false
83
+ end
84
+ rescue => error
85
+ STDERR.puts(error.backtrace)
86
+ STDERR.puts("Failed to bypass 2FA upgrade")
87
+ STDERR.puts("To disable this from trying again, set SPACESHIP_SKIP_UPGRADE_2FA_LATER=1")
88
+ return false
89
+ end
90
+ end
91
+ end
data/supply/lib/supply.rb CHANGED
@@ -16,7 +16,7 @@ module Supply
16
16
  end
17
17
 
18
18
  AVAILABLE_METADATA_FIELDS = %w(title short_description full_description video)
19
- IMAGES_TYPES = %w(featureGraphic icon promoGraphic tvBanner)
19
+ IMAGES_TYPES = %w(featureGraphic icon tvBanner) # https://developers.google.com/android-publisher/api-ref/rest/v3/AppImageType
20
20
  SCREENSHOT_TYPES = %w(phoneScreenshots sevenInchScreenshots tenInchScreenshots tvScreenshots wearScreenshots)
21
21
 
22
22
  IMAGES_FOLDER_NAME = "images"