fastlane 2.173.0 → 2.194.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +105 -85
- data/cert/lib/cert/commands_generator.rb +2 -1
- data/cert/lib/cert/options.rb +4 -3
- data/cert/lib/cert/runner.rb +7 -7
- data/deliver/lib/assets/summary.html.erb +10 -10
- data/deliver/lib/deliver/app_screenshot.rb +8 -3
- data/deliver/lib/deliver/app_screenshot_iterator.rb +2 -2
- data/deliver/lib/deliver/commands_generator.rb +3 -2
- data/deliver/lib/deliver/detect_values.rb +5 -3
- data/deliver/lib/deliver/download_screenshots.rb +2 -3
- data/deliver/lib/deliver/html_generator.rb +2 -2
- data/deliver/lib/deliver/languages.rb +1 -1
- data/deliver/lib/deliver/loader.rb +1 -1
- data/deliver/lib/deliver/module.rb +6 -0
- data/deliver/lib/deliver/options.rb +48 -56
- data/deliver/lib/deliver/runner.rb +28 -15
- data/deliver/lib/deliver/screenshot_comparable.rb +62 -0
- data/deliver/lib/deliver/setup.rb +1 -2
- data/deliver/lib/deliver/submit_for_review.rb +4 -4
- data/deliver/lib/deliver/sync_screenshots.rb +200 -0
- data/deliver/lib/deliver/upload_metadata.rb +26 -11
- data/deliver/lib/deliver/upload_price_tier.rb +1 -1
- data/deliver/lib/deliver/upload_screenshots.rb +13 -12
- data/fastlane/lib/assets/completions/completion.bash +4 -1
- data/fastlane/lib/assets/completions/completion.zsh +6 -5
- data/{spaceship/lib/spaceship/connect_api/models/.app_store_version_submission.rb.swp → fastlane/lib/fastlane/actions/.notarize.rb.swp} +0 -0
- data/fastlane/lib/fastlane/actions/actions_helper.rb +2 -2
- data/fastlane/lib/fastlane/actions/adb.rb +2 -5
- data/fastlane/lib/fastlane/actions/adb_devices.rb +0 -1
- data/fastlane/lib/fastlane/actions/add_git_tag.rb +4 -4
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +18 -18
- data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +21 -7
- data/fastlane/lib/fastlane/actions/appaloosa.rb +7 -2
- data/fastlane/lib/fastlane/actions/appetize.rb +13 -8
- data/fastlane/lib/fastlane/actions/appetize_viewing_url_generator.rb +0 -11
- data/fastlane/lib/fastlane/actions/appium.rb +40 -65
- data/fastlane/lib/fastlane/actions/appledoc.rb +45 -45
- data/fastlane/lib/fastlane/actions/apteligent.rb +3 -2
- data/fastlane/lib/fastlane/actions/artifactory.rb +5 -6
- data/fastlane/lib/fastlane/actions/automatic_code_signing.rb +7 -13
- data/fastlane/lib/fastlane/actions/backup_file.rb +1 -1
- data/fastlane/lib/fastlane/actions/backup_xcarchive.rb +3 -3
- data/fastlane/lib/fastlane/actions/badge.rb +9 -13
- data/fastlane/lib/fastlane/actions/build_and_upload_to_appetize.rb +11 -5
- data/fastlane/lib/fastlane/actions/build_app.rb +4 -0
- data/fastlane/lib/fastlane/actions/bundle_install.rb +21 -11
- data/fastlane/lib/fastlane/actions/carthage.rb +22 -14
- data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +8 -17
- data/fastlane/lib/fastlane/actions/chatwork.rb +3 -2
- data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +9 -1
- data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +0 -1
- data/fastlane/lib/fastlane/actions/clean_cocoapods_cache.rb +25 -2
- data/fastlane/lib/fastlane/actions/clipboard.rb +3 -6
- data/fastlane/lib/fastlane/actions/cloc.rb +9 -13
- data/fastlane/lib/fastlane/actions/cocoapods.rb +23 -15
- data/fastlane/lib/fastlane/actions/commit_github_file.rb +12 -4
- data/fastlane/lib/fastlane/actions/commit_version_bump.rb +6 -7
- data/fastlane/lib/fastlane/actions/copy_artifacts.rb +3 -4
- data/fastlane/lib/fastlane/actions/crashlytics.rb +7 -11
- data/fastlane/lib/fastlane/actions/create_app_on_managed_play_store.rb +70 -76
- data/fastlane/lib/fastlane/actions/create_keychain.rb +13 -11
- data/fastlane/lib/fastlane/actions/create_pull_request.rb +0 -9
- data/fastlane/lib/fastlane/actions/create_xcframework.rb +102 -17
- data/fastlane/lib/fastlane/actions/danger.rb +13 -12
- data/fastlane/lib/fastlane/actions/deploygate.rb +1 -2
- data/fastlane/lib/fastlane/actions/docs/build_app.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +29 -30
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +3 -3
- data/fastlane/lib/fastlane/actions/docs/create_app_online.md +171 -67
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +19 -2
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +8 -2
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +37 -18
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +10 -4
- data/fastlane/lib/fastlane/actions/download_app_privacy_details_from_app_store.rb +1 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +8 -19
- data/fastlane/lib/fastlane/actions/dsym_zip.rb +1 -1
- data/fastlane/lib/fastlane/actions/ensure_env_vars.rb +2 -6
- data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +0 -1
- data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +3 -4
- data/fastlane/lib/fastlane/actions/ensure_no_debug_code.rb +3 -5
- data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +1 -2
- data/fastlane/lib/fastlane/actions/environment_variable.rb +13 -21
- data/fastlane/lib/fastlane/actions/erb.rb +2 -5
- data/fastlane/lib/fastlane/actions/get_build_number_repository.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_certificates.rb +5 -1
- data/fastlane/lib/fastlane/actions/get_github_release.rb +11 -1
- data/fastlane/lib/fastlane/actions/get_ipa_info_plist_value.rb +0 -1
- data/fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb +32 -35
- data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +10 -2
- data/fastlane/lib/fastlane/actions/get_push_certificate.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_version_number.rb +17 -10
- data/fastlane/lib/fastlane/actions/git_add.rb +5 -10
- data/fastlane/lib/fastlane/actions/git_branch.rb +4 -10
- data/fastlane/lib/fastlane/actions/git_commit.rb +6 -8
- data/fastlane/lib/fastlane/actions/git_pull.rb +4 -10
- data/fastlane/lib/fastlane/actions/git_remote_branch.rb +57 -0
- data/fastlane/lib/fastlane/actions/git_submodule_update.rb +16 -8
- data/fastlane/lib/fastlane/actions/git_tag_exists.rb +4 -0
- data/fastlane/lib/fastlane/actions/github_api.rb +4 -6
- data/fastlane/lib/fastlane/actions/gradle.rb +13 -21
- data/fastlane/lib/fastlane/actions/hg_commit_version_bump.rb +1 -1
- data/fastlane/lib/fastlane/actions/hg_push.rb +1 -1
- data/fastlane/lib/fastlane/actions/hipchat.rb +6 -6
- data/fastlane/lib/fastlane/actions/hockey.rb +5 -12
- data/fastlane/lib/fastlane/actions/ifttt.rb +3 -6
- data/fastlane/lib/fastlane/actions/import_from_git.rb +7 -9
- data/fastlane/lib/fastlane/actions/increment_build_number.rb +8 -2
- data/fastlane/lib/fastlane/actions/install_on_device.rb +3 -6
- data/fastlane/lib/fastlane/actions/install_provisioning_profile.rb +4 -0
- data/fastlane/lib/fastlane/actions/installr.rb +22 -25
- data/fastlane/lib/fastlane/actions/ipa.rb +2 -2
- data/fastlane/lib/fastlane/actions/jazzy.rb +11 -8
- data/fastlane/lib/fastlane/actions/jira.rb +61 -14
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +7 -7
- data/fastlane/lib/fastlane/actions/lcov.rb +0 -4
- data/fastlane/lib/fastlane/actions/mailgun.rb +21 -27
- data/fastlane/lib/fastlane/actions/make_changelog_from_jenkins.rb +1 -1
- data/fastlane/lib/fastlane/actions/match_nuke.rb +59 -0
- data/fastlane/lib/fastlane/actions/modify_services.rb +59 -24
- data/fastlane/lib/fastlane/actions/nexus_upload.rb +2 -2
- data/fastlane/lib/fastlane/actions/notarize.rb +181 -52
- data/fastlane/lib/fastlane/actions/notification.rb +1 -1
- data/fastlane/lib/fastlane/actions/number_of_commits.rb +1 -1
- data/fastlane/lib/fastlane/actions/oclint.rb +15 -14
- data/fastlane/lib/fastlane/actions/pod_push.rb +0 -2
- data/fastlane/lib/fastlane/actions/podio_item.rb +0 -7
- data/fastlane/lib/fastlane/actions/prompt.rb +3 -4
- data/fastlane/lib/fastlane/actions/push_git_tags.rb +2 -2
- data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +6 -3
- data/fastlane/lib/fastlane/actions/puts.rb +1 -2
- data/fastlane/lib/fastlane/actions/register_device.rb +10 -13
- data/fastlane/lib/fastlane/actions/register_devices.rb +10 -14
- data/fastlane/lib/fastlane/actions/reset_git_repo.rb +5 -8
- data/fastlane/lib/fastlane/actions/reset_simulator_contents.rb +0 -2
- data/fastlane/lib/fastlane/actions/resign.rb +2 -9
- data/fastlane/lib/fastlane/actions/restore_file.rb +1 -1
- data/fastlane/lib/fastlane/actions/rsync.rb +3 -6
- data/fastlane/lib/fastlane/actions/run_tests.rb +1 -1
- data/fastlane/lib/fastlane/actions/s3.rb +1 -1
- data/fastlane/lib/fastlane/actions/say.rb +2 -3
- data/fastlane/lib/fastlane/actions/scp.rb +4 -10
- data/fastlane/lib/fastlane/actions/set_build_number_repository.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_changelog.rb +11 -14
- data/fastlane/lib/fastlane/actions/set_github_release.rb +2 -8
- data/fastlane/lib/fastlane/actions/set_info_plist_value.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_pod_key.rb +3 -4
- data/fastlane/lib/fastlane/actions/setup_ci.rb +1 -2
- data/fastlane/lib/fastlane/actions/setup_circle_ci.rb +1 -1
- data/fastlane/lib/fastlane/actions/setup_jenkins.rb +7 -12
- data/fastlane/lib/fastlane/actions/setup_travis.rb +1 -1
- data/fastlane/lib/fastlane/actions/sh.rb +2 -4
- data/fastlane/lib/fastlane/actions/slack.rb +161 -141
- data/fastlane/lib/fastlane/actions/slather.rb +9 -19
- data/fastlane/lib/fastlane/actions/sonar.rb +12 -19
- data/fastlane/lib/fastlane/actions/sourcedocs.rb +128 -0
- data/fastlane/lib/fastlane/actions/spaceship_logs.rb +1 -1
- data/fastlane/lib/fastlane/actions/splunkmint.rb +2 -2
- data/fastlane/lib/fastlane/actions/spm.rb +3 -3
- data/fastlane/lib/fastlane/actions/ssh.rb +5 -10
- data/fastlane/lib/fastlane/actions/swiftlint.rb +18 -16
- data/fastlane/lib/fastlane/actions/sync_code_signing.rb +7 -2
- data/fastlane/lib/fastlane/actions/testfairy.rb +0 -1
- data/fastlane/lib/fastlane/actions/tryouts.rb +2 -3
- data/fastlane/lib/fastlane/actions/twitter.rb +0 -5
- data/fastlane/lib/fastlane/actions/unlock_keychain.rb +3 -3
- data/fastlane/lib/fastlane/actions/update_app_group_identifiers.rb +1 -4
- data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +8 -15
- data/fastlane/lib/fastlane/actions/update_fastlane.rb +2 -2
- data/fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb +1 -4
- data/fastlane/lib/fastlane/actions/update_info_plist.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_keychain_access_groups.rb +1 -4
- data/fastlane/lib/fastlane/actions/update_plist.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +3 -4
- data/fastlane/lib/fastlane/actions/update_urban_airship_configuration.rb +0 -1
- data/fastlane/lib/fastlane/actions/update_url_schemes.rb +15 -26
- data/fastlane/lib/fastlane/actions/upload_app_privacy_details_to_app_store.rb +1 -2
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +8 -7
- data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +3 -10
- data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +5 -1
- data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +10 -3
- data/fastlane/lib/fastlane/actions/validate_play_store_json_key.rb +40 -44
- data/fastlane/lib/fastlane/actions/version_get_podspec.rb +1 -2
- data/fastlane/lib/fastlane/actions/xcode_server_get_assets.rb +3 -3
- data/fastlane/lib/fastlane/actions/xcodebuild.rb +5 -5
- data/fastlane/lib/fastlane/actions/zip.rb +86 -21
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +1 -1
- data/fastlane/lib/fastlane/commands_generator.rb +2 -1
- data/fastlane/lib/fastlane/documentation/actions_list.rb +2 -2
- data/fastlane/lib/fastlane/documentation/docs_generator.rb +1 -1
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +12 -6
- data/fastlane/lib/fastlane/environment_printer.rb +1 -0
- data/fastlane/lib/fastlane/erb_template_helper.rb +7 -1
- data/fastlane/lib/fastlane/fast_file.rb +19 -7
- data/fastlane/lib/fastlane/fastlane_require.rb +7 -1
- data/fastlane/lib/fastlane/features.rb +3 -0
- data/fastlane/lib/fastlane/helper/adb_helper.rb +1 -1
- data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +4 -4
- data/fastlane/lib/fastlane/helper/gem_helper.rb +2 -2
- data/fastlane/lib/fastlane/helper/git_helper.rb +34 -5
- data/fastlane/lib/fastlane/lane_manager.rb +3 -2
- data/fastlane/lib/fastlane/notification/slack.rb +56 -0
- data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +1 -2
- data/fastlane/lib/fastlane/plugins/plugin_info.rb +2 -2
- data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +1 -2
- data/fastlane/lib/fastlane/plugins/plugin_manager.rb +2 -3
- data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +7 -6
- data/fastlane/lib/fastlane/plugins/template/.circleci/config.yml +1 -1
- data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +1 -1
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +30 -35
- data/fastlane/lib/fastlane/plugins/template/spec/spec_helper.rb.erb +1 -1
- data/fastlane/lib/fastlane/setup/setup.rb +23 -10
- data/fastlane/lib/fastlane/setup/setup_ios.rb +3 -3
- data/fastlane/lib/fastlane/swift_fastlane_function.rb +43 -15
- data/fastlane/lib/fastlane/swift_runner_upgrader.rb +2 -0
- data/fastlane/lib/fastlane/version.rb +2 -2
- data/fastlane/swift/Actions.swift +1 -1
- data/fastlane/swift/Appfile.swift +1 -1
- data/fastlane/swift/ArgumentProcessor.swift +1 -1
- data/fastlane/swift/ControlCommand.swift +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +27 -23
- data/fastlane/swift/Fastlane.swift +7993 -4352
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +4 -0
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/LaneFileProtocol.swift +10 -4
- data/fastlane/swift/MainProcess.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +3 -3
- data/fastlane/swift/OptionalConfigValue.swift +101 -0
- data/fastlane/swift/Plugins.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +4 -4
- data/fastlane/swift/RubyCommand.swift +2 -2
- data/fastlane/swift/RubyCommandable.swift +1 -1
- data/fastlane/swift/Runner.swift +2 -2
- data/fastlane/swift/RunnerArgument.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +17 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +4 -4
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +5 -1
- data/fastlane/swift/SocketClient.swift +3 -2
- data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
- data/fastlane/swift/SocketResponse.swift +5 -3
- data/fastlane/swift/formatting/Brewfile.lock.json +37 -21
- data/fastlane/swift/main.swift +1 -1
- data/fastlane/swift/upgrade_manifest.json +1 -1
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +113 -17
- data/fastlane_core/lib/fastlane_core/clipboard.rb +20 -0
- data/fastlane_core/lib/fastlane_core/command_executor.rb +3 -9
- data/fastlane_core/lib/fastlane_core/configuration/commander_generator.rb +6 -1
- data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +41 -3
- data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +14 -8
- data/fastlane_core/lib/fastlane_core/device_manager.rb +1 -1
- data/fastlane_core/lib/fastlane_core/helper.rb +66 -10
- data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +3 -2
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +14 -8
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +12 -5
- data/fastlane_core/lib/fastlane_core/languages.rb +2 -2
- data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +5 -0
- data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +3 -2
- data/fastlane_core/lib/fastlane_core/print_table.rb +5 -3
- data/fastlane_core/lib/fastlane_core/project.rb +30 -23
- data/{deliver/lib/deliver → fastlane_core/lib/fastlane_core}/queue_worker.rb +4 -4
- data/fastlane_core/lib/fastlane_core/swag.rb +1 -1
- data/fastlane_core/lib/fastlane_core/ui/disable_colors.rb +1 -0
- data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +41 -0
- data/fastlane_core/lib/fastlane_core/ui/help.erb +35 -0
- data/fastlane_core/lib/fastlane_core/ui/help_formatter.rb +16 -0
- data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +16 -2
- data/fastlane_core/lib/fastlane_core/ui/interface.rb +1 -1
- data/fastlane_core/lib/fastlane_core/update_checker/update_checker.rb +2 -2
- data/fastlane_core/lib/fastlane_core.rb +22 -20
- data/frameit/lib/frameit/commands_generator.rb +2 -1
- data/frameit/lib/frameit/config_parser.rb +2 -2
- data/frameit/lib/frameit/frame_downloader.rb +2 -1
- data/gym/lib/gym/code_signing_mapping.rb +2 -2
- data/gym/lib/gym/commands_generator.rb +2 -1
- data/gym/lib/gym/generators/package_command_generator.rb +4 -0
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +19 -13
- data/gym/lib/gym/runner.rb +15 -4
- data/match/lib/match/change_password.rb +3 -3
- data/match/lib/match/commands_generator.rb +2 -1
- data/match/lib/match/encryption/interface.rb +1 -1
- data/match/lib/match/encryption/openssl.rb +2 -2
- data/match/lib/match/importer.rb +9 -10
- data/match/lib/match/migrate.rb +2 -3
- data/match/lib/match/module.rb +1 -0
- data/match/lib/match/nuke.rb +10 -10
- data/match/lib/match/options.rb +5 -4
- data/match/lib/match/runner.rb +12 -12
- data/match/lib/match/spaceship_ensure.rb +3 -0
- data/match/lib/match/storage/google_cloud_storage.rb +2 -2
- data/match/lib/match/storage/s3_storage.rb +2 -2
- data/pem/lib/pem/commands_generator.rb +2 -1
- data/pilot/lib/pilot/build_manager.rb +45 -15
- data/pilot/lib/pilot/commands_generator.rb +2 -1
- data/pilot/lib/pilot/manager.rb +14 -9
- data/pilot/lib/pilot/options.rb +39 -11
- data/pilot/lib/pilot/tester_exporter.rb +0 -1
- data/pilot/lib/pilot/tester_manager.rb +0 -1
- data/pilot/lib/pilot.rb +0 -1
- data/precheck/lib/precheck/commands_generator.rb +2 -1
- data/precheck/lib/precheck/module.rb +2 -0
- data/precheck/lib/precheck/options.rb +7 -6
- data/precheck/lib/precheck/runner.rb +13 -8
- data/produce/lib/produce/commands_generator.rb +129 -28
- data/produce/lib/produce/developer_center.rb +42 -4
- data/produce/lib/produce/options.rb +1 -1
- data/produce/lib/produce/service.rb +285 -179
- data/scan/lib/scan/commands_generator.rb +2 -1
- data/scan/lib/scan/detect_values.rb +26 -14
- data/scan/lib/scan/module.rb +1 -0
- data/scan/lib/scan/options.rb +32 -6
- data/scan/lib/scan/runner.rb +81 -1
- data/scan/lib/scan/test_command_generator.rb +37 -12
- data/scan/lib/scan/xcpretty_reporter_options_generator.rb +1 -1
- data/screengrab/lib/screengrab/android_environment.rb +5 -53
- data/screengrab/lib/screengrab/commands_generator.rb +2 -1
- data/screengrab/lib/screengrab/dependency_checker.rb +0 -20
- data/screengrab/lib/screengrab/options.rb +5 -2
- data/screengrab/lib/screengrab/runner.rb +110 -109
- data/sigh/lib/assets/resign.sh +81 -61
- data/sigh/lib/sigh/commands_generator.rb +2 -1
- data/sigh/lib/sigh/download_all.rb +4 -8
- data/sigh/lib/sigh/options.rb +6 -4
- data/sigh/lib/sigh/runner.rb +8 -8
- data/snapshot/lib/assets/SnapfileTemplate +3 -2
- data/snapshot/lib/assets/SnapfileTemplate.swift +2 -1
- data/snapshot/lib/assets/SnapshotHelper.swift +14 -10
- data/snapshot/lib/snapshot/commands_generator.rb +3 -1
- data/snapshot/lib/snapshot/options.rb +5 -0
- data/snapshot/lib/snapshot/reports_generator.rb +7 -1
- data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +1 -1
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +12 -6
- data/snapshot/lib/snapshot/test_command_generator.rb +17 -3
- data/spaceship/README.md +4 -14
- data/spaceship/lib/spaceship/base.rb +2 -2
- data/spaceship/lib/spaceship/client.rb +37 -20
- data/spaceship/lib/spaceship/commands_generator.rb +4 -2
- data/spaceship/lib/spaceship/connect_api/api_client.rb +80 -8
- data/spaceship/lib/spaceship/connect_api/model.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +36 -4
- data/spaceship/lib/spaceship/connect_api/models/app.rb +10 -2
- data/spaceship/lib/spaceship/connect_api/models/app_info.rb +10 -0
- data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +2 -3
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +6 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +8 -1
- data/spaceship/lib/spaceship/connect_api/models/beta_tester.rb +3 -1
- data/spaceship/lib/spaceship/connect_api/models/build.rb +14 -1
- data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +8 -0
- data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +32 -0
- data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +84 -21
- data/spaceship/lib/spaceship/connect_api/models/capabilities.rb +27 -0
- data/spaceship/lib/spaceship/connect_api/models/profile.rb +6 -0
- data/spaceship/lib/spaceship/connect_api/models/user.rb +17 -3
- data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +37 -3
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +104 -2
- data/spaceship/lib/spaceship/connect_api/testflight/client.rb +3 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +72 -5
- data/spaceship/lib/spaceship/connect_api/token.rb +19 -4
- data/spaceship/lib/spaceship/connect_api/tunes/client.rb +3 -0
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +19 -2
- data/spaceship/lib/spaceship/connect_api/users/client.rb +3 -0
- data/spaceship/lib/spaceship/connect_api/users/users.rb +58 -3
- data/spaceship/lib/spaceship/connect_api.rb +1 -0
- data/spaceship/lib/spaceship/playground.rb +2 -2
- data/spaceship/lib/spaceship/spaceauth_runner.rb +38 -15
- data/spaceship/lib/spaceship/tunes/members.rb +1 -1
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +5 -2
- data/spaceship/lib/spaceship/two_step_or_factor_client.rb +42 -29
- data/spaceship/lib/spaceship/ui.rb +2 -2
- data/supply/lib/supply/client.rb +45 -4
- data/supply/lib/supply/commands_generator.rb +2 -1
- data/supply/lib/supply/options.rb +14 -2
- data/supply/lib/supply/uploader.rb +13 -9
- metadata +119 -98
- data/fastlane/lib/fastlane/.erb_template_helper.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.git_commit.rb.swp +0 -0
- data/pilot/lib/pilot/features.rb +0 -0
- data/pilot/lib/pilot/tester_util.rb +0 -0
- data/spaceship/lib/spaceship/.DS_Store +0 -0
@@ -6,12 +6,6 @@ require_relative 'module'
|
|
6
6
|
|
7
7
|
module Screengrab
|
8
8
|
class Runner
|
9
|
-
NEEDED_PERMISSIONS = [
|
10
|
-
'android.permission.READ_EXTERNAL_STORAGE',
|
11
|
-
'android.permission.WRITE_EXTERNAL_STORAGE',
|
12
|
-
'android.permission.CHANGE_CONFIGURATION'
|
13
|
-
].freeze
|
14
|
-
|
15
9
|
attr_accessor :number_of_retries
|
16
10
|
|
17
11
|
def initialize(executor = FastlaneCore::CommandExecutor,
|
@@ -25,7 +19,6 @@ module Screengrab
|
|
25
19
|
|
26
20
|
def run
|
27
21
|
# Standardize the locales
|
28
|
-
@config[:locales].map! { |locale| locale.gsub("_", "-") }
|
29
22
|
FastlaneCore::PrintTable.print_values(config: @config, hide_keys: [], title: "Summary for screengrab #{Fastlane::VERSION}")
|
30
23
|
|
31
24
|
app_apk_path = @config.fetch(:app_apk_path, ask: false)
|
@@ -59,14 +52,14 @@ module Screengrab
|
|
59
52
|
device_serial = select_device
|
60
53
|
|
61
54
|
device_screenshots_paths = [
|
62
|
-
determine_external_screenshots_path(device_serial, @config[:locales]),
|
63
|
-
determine_internal_screenshots_paths(@config[:app_package_name], @config[:locales])
|
64
|
-
].flatten
|
55
|
+
determine_external_screenshots_path(device_serial, @config[:app_package_name], @config[:locales]),
|
56
|
+
determine_internal_screenshots_paths(device_serial, @config[:app_package_name], @config[:locales])
|
57
|
+
].flatten(1)
|
65
58
|
|
66
59
|
# Root is needed to access device paths at /data
|
67
60
|
if @config[:use_adb_root]
|
68
|
-
run_adb_command("-s #{device_serial} root", print_all: false, print_command: true)
|
69
|
-
run_adb_command("-s #{device_serial} wait-for-device", print_all: false, print_command: true)
|
61
|
+
run_adb_command("-s #{device_serial.shellescape} root", print_all: false, print_command: true)
|
62
|
+
run_adb_command("-s #{device_serial.shellescape} wait-for-device", print_all: false, print_command: true)
|
70
63
|
end
|
71
64
|
|
72
65
|
clear_device_previous_screenshots(@config[:app_package_name], device_serial, device_screenshots_paths)
|
@@ -74,9 +67,7 @@ module Screengrab
|
|
74
67
|
app_apk_path ||= select_app_apk(discovered_apk_paths)
|
75
68
|
tests_apk_path ||= select_tests_apk(discovered_apk_paths)
|
76
69
|
|
77
|
-
|
78
|
-
|
79
|
-
number_of_screenshots = run_tests(device_type_dir_name, device_screenshots_paths, device_serial, app_apk_path, tests_apk_path, test_classes_to_use, test_packages_to_use, @config[:launch_arguments])
|
70
|
+
number_of_screenshots = run_tests(device_type_dir_name, device_serial, app_apk_path, tests_apk_path, test_classes_to_use, test_packages_to_use, @config[:launch_arguments])
|
80
71
|
|
81
72
|
ReportsGenerator.new.generate
|
82
73
|
|
@@ -133,72 +124,71 @@ module Screengrab
|
|
133
124
|
Dir.glob(File.join(output_directory, '**', device_type, '*.png'), File::FNM_CASEFOLD)
|
134
125
|
end
|
135
126
|
|
136
|
-
def
|
127
|
+
def get_device_environment_variable(device_serial, variable_name)
|
137
128
|
# macOS evaluates $foo in `echo $foo` before executing the command,
|
138
129
|
# Windows doesn't - hence the double backslash vs. single backslash
|
139
|
-
command = Helper.windows? ? "shell echo
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
130
|
+
command = Helper.windows? ? "shell echo \$#{variable_name.shellescape.shellescape}" : "shell echo \\$#{variable_name.shellescape.shellescape}"
|
131
|
+
value = run_adb_command("-s #{device_serial.shellescape} #{command}",
|
132
|
+
print_all: true,
|
133
|
+
print_command: true)
|
134
|
+
return value.strip
|
135
|
+
end
|
136
|
+
|
137
|
+
# Don't need to use to use run-as if external
|
138
|
+
def use_adb_run_as?(path, device_serial)
|
139
|
+
device_ext_storage = get_device_environment_variable(device_serial, "EXTERNAL_STORAGE")
|
140
|
+
return !path.start_with?(device_ext_storage)
|
141
|
+
end
|
142
|
+
|
143
|
+
def determine_external_screenshots_path(device_serial, app_package_name, locales)
|
144
|
+
device_ext_storage = get_device_environment_variable(device_serial, "EXTERNAL_STORAGE")
|
144
145
|
return locales.map do |locale|
|
145
|
-
|
146
|
-
|
146
|
+
[
|
147
|
+
File.join(device_ext_storage, app_package_name, 'screengrab', locale, "images", "screenshots"),
|
148
|
+
File.join(device_ext_storage, "Android", "data", app_package_name, 'files', 'screengrab', locale, "images", "screenshots")
|
149
|
+
]
|
150
|
+
end.flatten.map { |path| [path, false] }
|
147
151
|
end
|
148
152
|
|
149
|
-
def determine_internal_screenshots_paths(app_package_name, locales)
|
153
|
+
def determine_internal_screenshots_paths(device_serial, app_package_name, locales)
|
154
|
+
device_data = get_device_environment_variable(device_serial, "ANDROID_DATA")
|
150
155
|
return locales.map do |locale|
|
151
156
|
[
|
152
|
-
"/
|
157
|
+
"#{device_data}/user/0/#{app_package_name}/files/#{app_package_name}/screengrab/#{locale}/images/screenshots",
|
153
158
|
|
154
159
|
# https://github.com/fastlane/fastlane/issues/15653#issuecomment-578541663
|
155
|
-
"/data
|
160
|
+
"#{device_data}/data/#{app_package_name}/files/#{app_package_name}/screengrab/#{locale}/images/screenshots",
|
156
161
|
|
157
|
-
"/data
|
158
|
-
"/data
|
162
|
+
"#{device_data}/data/#{app_package_name}/app_screengrab/#{locale}/images/screenshots",
|
163
|
+
"#{device_data}/data/#{app_package_name}/screengrab/#{locale}/images/screenshots"
|
159
164
|
]
|
160
|
-
end.flatten
|
165
|
+
end.flatten.map { |path| [path, true] }
|
161
166
|
end
|
162
167
|
|
163
168
|
def clear_device_previous_screenshots(app_package_name, device_serial, device_screenshots_paths)
|
164
169
|
UI.message('Cleaning screenshots on device')
|
165
170
|
|
166
|
-
device_screenshots_paths.each do |device_path|
|
167
|
-
if_device_path_exists(app_package_name, device_serial, device_path) do |path|
|
168
|
-
|
171
|
+
device_screenshots_paths.each do |(device_path, needs_run_as)|
|
172
|
+
if_device_path_exists(app_package_name, device_serial, device_path, needs_run_as) do |path|
|
173
|
+
# Determine if path needs the run-as permission
|
174
|
+
run_as = needs_run_as ? " run-as #{app_package_name.shellescape.shellescape}" : ""
|
175
|
+
|
176
|
+
run_adb_command("-s #{device_serial.shellescape} shell#{run_as} rm -rf #{path.shellescape.shellescape}",
|
169
177
|
print_all: true,
|
170
178
|
print_command: true)
|
171
179
|
end
|
172
180
|
end
|
173
181
|
end
|
174
182
|
|
175
|
-
def validate_apk(app_apk_path)
|
176
|
-
unless @android_env.aapt_path
|
177
|
-
UI.important("The `aapt` command could not be found on your system, so your app APK could not be validated")
|
178
|
-
return
|
179
|
-
end
|
180
|
-
|
181
|
-
UI.message('Validating app APK')
|
182
|
-
apk_permissions = @executor.execute(command: "#{@android_env.aapt_path} dump permissions #{app_apk_path}",
|
183
|
-
print_all: true,
|
184
|
-
print_command: true)
|
185
|
-
|
186
|
-
missing_permissions = NEEDED_PERMISSIONS.reject { |needed| apk_permissions.include?(needed) }
|
187
|
-
|
188
|
-
if missing_permissions.any?
|
189
|
-
UI.user_error!("The needed permission(s) #{missing_permissions.join(', ')} could not be found in your app APK")
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
183
|
def install_apks(device_serial, app_apk_path, tests_apk_path)
|
194
184
|
UI.message('Installing app APK')
|
195
|
-
apk_install_output = run_adb_command("-s #{device_serial} install -t -r #{app_apk_path.shellescape}",
|
185
|
+
apk_install_output = run_adb_command("-s #{device_serial.shellescape} install -t -r #{app_apk_path.shellescape}",
|
196
186
|
print_all: true,
|
197
187
|
print_command: true)
|
198
188
|
UI.user_error!("App APK could not be installed") if apk_install_output.include?("Failure [")
|
199
189
|
|
200
190
|
UI.message('Installing tests APK')
|
201
|
-
apk_install_output = run_adb_command("-s #{device_serial} install -t -r #{tests_apk_path.shellescape}",
|
191
|
+
apk_install_output = run_adb_command("-s #{device_serial.shellescape} install -t -r #{tests_apk_path.shellescape}",
|
202
192
|
print_all: true,
|
203
193
|
print_command: true)
|
204
194
|
UI.user_error!("Tests APK could not be installed") if apk_install_output.include?("Failure [")
|
@@ -209,14 +199,14 @@ module Screengrab
|
|
209
199
|
|
210
200
|
if packages.include?(app_package_name.to_s)
|
211
201
|
UI.message('Uninstalling app APK')
|
212
|
-
run_adb_command("-s #{device_serial} uninstall #{app_package_name}",
|
202
|
+
run_adb_command("-s #{device_serial.shellescape} uninstall #{app_package_name.shellescape}",
|
213
203
|
print_all: true,
|
214
204
|
print_command: true)
|
215
205
|
end
|
216
206
|
|
217
207
|
if packages.include?(tests_package_name.to_s)
|
218
208
|
UI.message('Uninstalling tests APK')
|
219
|
-
run_adb_command("-s #{device_serial} uninstall #{tests_package_name}",
|
209
|
+
run_adb_command("-s #{device_serial.shellescape} uninstall #{tests_package_name.shellescape}",
|
220
210
|
print_all: true,
|
221
211
|
print_command: true)
|
222
212
|
end
|
@@ -224,26 +214,37 @@ module Screengrab
|
|
224
214
|
|
225
215
|
def grant_permissions(device_serial)
|
226
216
|
UI.message('Granting the permission necessary to change locales on the device')
|
227
|
-
run_adb_command("-s #{device_serial} shell pm grant #{@config[:app_package_name]} android.permission.CHANGE_CONFIGURATION",
|
217
|
+
run_adb_command("-s #{device_serial.shellescape} shell pm grant #{@config[:app_package_name].shellescape.shellescape} android.permission.CHANGE_CONFIGURATION",
|
228
218
|
print_all: true,
|
229
|
-
print_command: true
|
219
|
+
print_command: true,
|
220
|
+
raise_errors: false)
|
230
221
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
222
|
+
UI.message('Granting the permissions necessary to access device external storage')
|
223
|
+
run_adb_command("-s #{device_serial.shellescape} shell pm grant #{@config[:app_package_name].shellescape.shellescape} android.permission.WRITE_EXTERNAL_STORAGE",
|
224
|
+
print_all: true,
|
225
|
+
print_command: true,
|
226
|
+
raise_errors: false)
|
227
|
+
run_adb_command("-s #{device_serial.shellescape} shell pm grant #{@config[:app_package_name].shellescape.shellescape} android.permission.READ_EXTERNAL_STORAGE",
|
228
|
+
print_all: true,
|
229
|
+
print_command: true,
|
230
|
+
raise_errors: false)
|
231
|
+
end
|
232
|
+
|
233
|
+
def kill_app(device_serial, package_name)
|
234
|
+
run_adb_command("-s #{device_serial.shellescape} shell am force-stop #{package_name.shellescape.shellescape}.test",
|
235
|
+
print_all: true,
|
236
|
+
print_command: true)
|
237
|
+
run_adb_command("-s #{device_serial.shellescape} shell am force-stop #{package_name.shellescape.shellescape}",
|
238
|
+
print_all: true,
|
239
|
+
print_command: true)
|
240
240
|
end
|
241
241
|
|
242
|
-
def run_tests(device_type_dir_name,
|
242
|
+
def run_tests(device_type_dir_name, device_serial, app_apk_path, tests_apk_path, test_classes_to_use, test_packages_to_use, launch_arguments)
|
243
|
+
sdk_version = device_api_version(device_serial)
|
243
244
|
unless @config[:reinstall_app]
|
244
245
|
install_apks(device_serial, app_apk_path, tests_apk_path)
|
245
246
|
grant_permissions(device_serial)
|
246
|
-
enable_clean_status_bar(device_serial,
|
247
|
+
enable_clean_status_bar(device_serial, sdk_version)
|
247
248
|
end
|
248
249
|
|
249
250
|
number_of_screenshots = 0
|
@@ -253,25 +254,28 @@ module Screengrab
|
|
253
254
|
uninstall_apks(device_serial, @config[:app_package_name], @config[:tests_package_name])
|
254
255
|
install_apks(device_serial, app_apk_path, tests_apk_path)
|
255
256
|
grant_permissions(device_serial)
|
256
|
-
|
257
|
+
else
|
258
|
+
kill_app(device_serial, @config[:app_package_name])
|
257
259
|
end
|
258
|
-
number_of_screenshots += run_tests_for_locale(device_type_dir_name,
|
260
|
+
number_of_screenshots += run_tests_for_locale(device_type_dir_name, locale, device_serial, test_classes_to_use, test_packages_to_use, launch_arguments, sdk_version)
|
259
261
|
end
|
260
262
|
|
261
263
|
number_of_screenshots
|
262
264
|
end
|
263
265
|
|
264
|
-
def run_tests_for_locale(device_type_dir_name,
|
266
|
+
def run_tests_for_locale(device_type_dir_name, locale, device_serial, test_classes_to_use, test_packages_to_use, launch_arguments, sdk_version)
|
265
267
|
UI.message("Running tests for locale: #{locale}")
|
266
268
|
|
267
|
-
instrument_command = ["-s #{device_serial} shell am instrument --no-window-animation -w",
|
268
|
-
"-e testLocale #{locale.
|
269
|
-
|
269
|
+
instrument_command = ["-s #{device_serial.shellescape} shell am instrument --no-window-animation -w",
|
270
|
+
"-e testLocale #{locale.shellescape.shellescape}"]
|
271
|
+
if sdk_version >= 28
|
272
|
+
instrument_command << "--no-hidden-api-checks"
|
273
|
+
end
|
270
274
|
instrument_command << "-e appendTimestamp #{@config[:use_timestamp_suffix]}"
|
271
|
-
instrument_command << "-e class #{test_classes_to_use.join(',')}" if test_classes_to_use
|
272
|
-
instrument_command << "-e package #{test_packages_to_use.join(',')}" if test_packages_to_use
|
275
|
+
instrument_command << "-e class #{test_classes_to_use.join(',').shellescape.shellescape}" if test_classes_to_use
|
276
|
+
instrument_command << "-e package #{test_packages_to_use.join(',').shellescape.shellescape}" if test_packages_to_use
|
273
277
|
instrument_command << launch_arguments.map { |item| '-e ' + item }.join(' ') if launch_arguments
|
274
|
-
instrument_command << "#{@config[:tests_package_name]}/#{@config[:test_instrumentation_runner]}"
|
278
|
+
instrument_command << "#{@config[:tests_package_name].shellescape.shellescape}/#{@config[:test_instrumentation_runner].shellescape.shellescape}"
|
275
279
|
|
276
280
|
test_output = run_adb_command(instrument_command.join(" \\\n"),
|
277
281
|
print_all: true,
|
@@ -285,30 +289,40 @@ module Screengrab
|
|
285
289
|
end
|
286
290
|
end
|
287
291
|
|
288
|
-
pull_screenshots_from_device(locale, device_serial,
|
292
|
+
pull_screenshots_from_device(locale, device_serial, device_type_dir_name)
|
289
293
|
end
|
290
294
|
|
291
|
-
def pull_screenshots_from_device(locale, device_serial,
|
295
|
+
def pull_screenshots_from_device(locale, device_serial, device_type_dir_name)
|
292
296
|
UI.message("Pulling captured screenshots for locale #{locale} from the device")
|
293
297
|
starting_screenshot_count = screenshot_file_names_in(@config[:output_directory], device_type_dir_name).length
|
294
298
|
|
295
299
|
UI.verbose("Starting screenshot count is: #{starting_screenshot_count}")
|
296
300
|
|
301
|
+
device_screenshots_paths = [
|
302
|
+
determine_external_screenshots_path(device_serial, @config[:app_package_name], [locale]),
|
303
|
+
determine_internal_screenshots_paths(device_serial, @config[:app_package_name], [locale])
|
304
|
+
].flatten(1)
|
305
|
+
|
297
306
|
# Make a temp directory into which to pull the screenshots before they are moved to their final location.
|
298
307
|
# This makes directory cleanup easier, as the temp directory will be removed when the block completes.
|
299
308
|
|
300
309
|
Dir.mktmpdir do |tempdir|
|
301
|
-
device_screenshots_paths.each do |device_path|
|
302
|
-
if_device_path_exists(@config[:app_package_name], device_serial, device_path) do |path|
|
310
|
+
device_screenshots_paths.each do |(device_path, needs_run_as)|
|
311
|
+
if_device_path_exists(@config[:app_package_name], device_serial, device_path, needs_run_as) do |path|
|
312
|
+
UI.message(path)
|
303
313
|
next unless path.include?(locale)
|
304
|
-
out = run_adb_command("-s #{device_serial} pull #{path} #{tempdir}",
|
314
|
+
out = run_adb_command("-s #{device_serial.shellescape} pull #{path.shellescape} #{tempdir.shellescape}",
|
305
315
|
print_all: false,
|
306
316
|
print_command: true,
|
307
317
|
raise_errors: false)
|
308
318
|
if out =~ /Permission denied/
|
309
319
|
dir = File.dirname(path)
|
310
320
|
base = File.basename(path)
|
311
|
-
|
321
|
+
|
322
|
+
# Determine if path needs the run-as permission
|
323
|
+
run_as = needs_run_as ? " run-as #{@config[:app_package_name].shellescape.shellescape}" : ""
|
324
|
+
|
325
|
+
run_adb_command("-s #{device_serial.shellescape} shell#{run_as} \"tar -cC #{dir} #{base}\" | tar -xv -f- -C #{tempdir}",
|
312
326
|
print_all: false,
|
313
327
|
print_command: true)
|
314
328
|
end
|
@@ -372,8 +386,11 @@ module Screengrab
|
|
372
386
|
|
373
387
|
# Some device commands fail if executed against a device path that does not exist, so this helper method
|
374
388
|
# provides a way to conditionally execute a block only if the provided path exists on the device.
|
375
|
-
def if_device_path_exists(app_package_name, device_serial, device_path)
|
376
|
-
|
389
|
+
def if_device_path_exists(app_package_name, device_serial, device_path, needs_run_as)
|
390
|
+
# Determine if path needs the run-as permission
|
391
|
+
run_as = needs_run_as ? " run-as #{app_package_name.shellescape.shellescape}" : ""
|
392
|
+
|
393
|
+
return if run_adb_command("-s #{device_serial.shellescape} shell#{run_as} ls #{device_path.shellescape.shellescape}",
|
377
394
|
print_all: false,
|
378
395
|
print_command: false).include?('No such file')
|
379
396
|
|
@@ -385,20 +402,19 @@ module Screengrab
|
|
385
402
|
|
386
403
|
# Return an array of packages that are installed on the device
|
387
404
|
def installed_packages(device_serial)
|
388
|
-
packages = run_adb_command("-s #{device_serial} shell pm list packages",
|
405
|
+
packages = run_adb_command("-s #{device_serial.shellescape} shell pm list packages",
|
389
406
|
print_all: true,
|
390
407
|
print_command: true)
|
391
408
|
packages.split("\n").map { |package| package.gsub("package:", "") }
|
392
409
|
end
|
393
410
|
|
394
411
|
def run_adb_command(command, print_all: false, print_command: false, raise_errors: true)
|
395
|
-
adb_path = @android_env.adb_path.chomp("adb")
|
396
412
|
adb_host = @config[:adb_host]
|
397
|
-
host = adb_host.nil? ? '' : "-H #{adb_host} "
|
413
|
+
host = adb_host.nil? ? '' : "-H #{adb_host.shellescape} "
|
398
414
|
output = ''
|
399
415
|
begin
|
400
416
|
errout = nil
|
401
|
-
cmdout = @executor.execute(command: adb_path + "
|
417
|
+
cmdout = @executor.execute(command: @android_env.adb_path + " " + host + command,
|
402
418
|
print_all: print_all,
|
403
419
|
print_command: print_command,
|
404
420
|
error: raise_errors ? nil : proc { |out, status| errout = out }) || ''
|
@@ -415,36 +431,21 @@ module Screengrab
|
|
415
431
|
end
|
416
432
|
|
417
433
|
def device_api_version(device_serial)
|
418
|
-
run_adb_command("-s #{device_serial} shell getprop ro.build.version.sdk",
|
434
|
+
run_adb_command("-s #{device_serial.shellescape} shell getprop ro.build.version.sdk",
|
419
435
|
print_all: true, print_command: true).to_i
|
420
436
|
end
|
421
437
|
|
422
|
-
def enable_clean_status_bar(device_serial,
|
423
|
-
return unless
|
424
|
-
|
425
|
-
unless @android_env.aapt_path
|
426
|
-
UI.error("The `aapt` command could not be found, so status bar could not be cleaned. Make sure android_home is configured for screengrab or ANDROID_HOME is set in the environment")
|
427
|
-
return
|
428
|
-
end
|
429
|
-
|
430
|
-
# Check if the app wants to use the clean status bar feature
|
431
|
-
badging_dump = @executor.execute(command: "#{@android_env.aapt_path} dump badging #{app_apk_path}",
|
432
|
-
print_all: true, print_command: true)
|
433
|
-
return unless badging_dump.include?('uses-feature: name=\'tools.fastlane.screengrab.cleanstatusbar\'')
|
438
|
+
def enable_clean_status_bar(device_serial, sdk_version)
|
439
|
+
return unless sdk_version >= 23
|
434
440
|
|
435
441
|
UI.message('Enabling clean status bar')
|
436
442
|
|
437
|
-
# Make sure the app requests the DUMP permission
|
438
|
-
unless badging_dump.include?('uses-permission: name=\'android.permission.DUMP\'')
|
439
|
-
UI.user_error!("The clean status bar feature requires the android.permission.DUMP permission but it could not be found in your app APK")
|
440
|
-
end
|
441
|
-
|
442
443
|
# Grant the DUMP permission
|
443
|
-
run_adb_command("-s #{device_serial} shell pm grant #{@config[:app_package_name]} android.permission.DUMP",
|
444
|
-
print_all: true, print_command: true)
|
444
|
+
run_adb_command("-s #{device_serial.shellescape} shell pm grant #{@config[:app_package_name].shellescape.shellescape} android.permission.DUMP",
|
445
|
+
print_all: true, print_command: true, raise_errors: false)
|
445
446
|
|
446
447
|
# Enable the SystemUI demo mode
|
447
|
-
run_adb_command("-s #{device_serial} shell settings put global sysui_demo_allowed 1",
|
448
|
+
run_adb_command("-s #{device_serial.shellescape} shell settings put global sysui_demo_allowed 1",
|
448
449
|
print_all: true, print_command: true)
|
449
450
|
end
|
450
451
|
end
|