fastlane 2.74.1 → 2.75.0.beta.20180109010003
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.
- checksums.yaml +4 -4
- data/bin/bin-proxy +2 -2
- data/bin/fastlane +5 -5
- data/cert/lib/cert/commands_generator.rb +1 -1
- data/cert/lib/cert/runner.rb +14 -14
- data/credentials_manager/lib/credentials_manager/account_manager.rb +11 -11
- data/credentials_manager/lib/credentials_manager/appfile_config.rb +11 -11
- data/credentials_manager/lib/credentials_manager/cli.rb +4 -4
- data/deliver/lib/deliver/app_screenshot.rb +19 -2
- data/deliver/lib/deliver/commands_generator.rb +2 -2
- data/deliver/lib/deliver/loader.rb +2 -2
- data/deliver/lib/deliver/options.rb +2 -2
- data/deliver/lib/deliver/setup.rb +1 -1
- data/deliver/lib/deliver/submit_for_review.rb +1 -1
- data/fastlane/lib/fastlane/action.rb +2 -2
- data/fastlane/lib/fastlane/actions/actions_helper.rb +5 -5
- data/fastlane/lib/fastlane/actions/add_extra_platforms.rb +2 -2
- data/fastlane/lib/fastlane/actions/add_git_tag.rb +1 -1
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/appaloosa.rb +4 -4
- data/fastlane/lib/fastlane/actions/appetize.rb +3 -3
- data/fastlane/lib/fastlane/actions/appetize_viewing_url_generator.rb +2 -2
- data/fastlane/lib/fastlane/actions/appium.rb +2 -2
- data/fastlane/lib/fastlane/actions/appledoc.rb +3 -3
- data/fastlane/lib/fastlane/actions/apteligent.rb +2 -2
- data/fastlane/lib/fastlane/actions/artifactory.rb +2 -2
- data/fastlane/lib/fastlane/actions/backup_xcarchive.rb +1 -1
- data/fastlane/lib/fastlane/actions/build_ios_app.rb +1 -1
- data/fastlane/lib/fastlane/actions/capture_ios_screenshots.rb +1 -1
- data/fastlane/lib/fastlane/actions/carthage.rb +4 -4
- data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +4 -4
- data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +1 -1
- data/fastlane/lib/fastlane/actions/clean_cocoapods_cache.rb +1 -1
- data/fastlane/lib/fastlane/actions/cloc.rb +1 -1
- data/fastlane/lib/fastlane/actions/cocoapods.rb +1 -1
- data/fastlane/lib/fastlane/actions/commit_github_file.rb +4 -4
- data/fastlane/lib/fastlane/actions/commit_version_bump.rb +7 -7
- data/fastlane/lib/fastlane/actions/copy_artifacts.rb +1 -1
- data/fastlane/lib/fastlane/actions/crashlytics.rb +2 -2
- data/fastlane/lib/fastlane/actions/debug.rb +2 -2
- data/fastlane/lib/fastlane/actions/delete_keychain.rb +1 -1
- data/fastlane/lib/fastlane/actions/deploygate.rb +7 -7
- data/fastlane/lib/fastlane/actions/docs/cert.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/deliver.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/frameit.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/gym.md +1 -3
- data/fastlane/lib/fastlane/actions/docs/match.md +4 -4
- data/fastlane/lib/fastlane/actions/docs/pem.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/precheck.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/produce.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/scan.md +0 -2
- data/fastlane/lib/fastlane/actions/docs/sigh.md +6 -6
- data/fastlane/lib/fastlane/actions/docs/snapshot.md +4 -4
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +1 -1
- data/fastlane/lib/fastlane/actions/dsym_zip.rb +1 -1
- data/fastlane/lib/fastlane/actions/ensure_no_debug_code.rb +1 -1
- data/fastlane/lib/fastlane/actions/flock.rb +7 -7
- data/fastlane/lib/fastlane/actions/frame_screenshots.rb +1 -1
- data/fastlane/lib/fastlane/actions/gcovr.rb +5 -5
- data/fastlane/lib/fastlane/actions/get_build_number.rb +2 -2
- data/fastlane/lib/fastlane/actions/get_build_number_repository.rb +9 -9
- data/fastlane/lib/fastlane/actions/get_github_release.rb +2 -2
- data/fastlane/lib/fastlane/actions/get_info_plist_value.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_version_number.rb +7 -7
- data/fastlane/lib/fastlane/actions/github_api.rb +2 -2
- data/fastlane/lib/fastlane/actions/hg_commit_version_bump.rb +2 -2
- data/fastlane/lib/fastlane/actions/hockey.rb +5 -5
- data/fastlane/lib/fastlane/actions/ifttt.rb +4 -4
- data/fastlane/lib/fastlane/actions/increment_build_number.rb +3 -3
- data/fastlane/lib/fastlane/actions/increment_version_number.rb +4 -4
- data/fastlane/lib/fastlane/actions/install_on_device.rb +2 -2
- data/fastlane/lib/fastlane/actions/install_xcode_plugin.rb +2 -2
- data/fastlane/lib/fastlane/actions/installr.rb +6 -6
- data/fastlane/lib/fastlane/actions/ipa.rb +1 -1
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/lcov.rb +1 -1
- data/fastlane/lib/fastlane/actions/mailgun.rb +3 -3
- data/fastlane/lib/fastlane/actions/modify_services.rb +1 -1
- 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/onesignal.rb +1 -1
- data/fastlane/lib/fastlane/actions/pod_push.rb +1 -1
- data/fastlane/lib/fastlane/actions/podio_item.rb +6 -6
- data/fastlane/lib/fastlane/actions/puts.rb +1 -1
- data/fastlane/lib/fastlane/actions/read_podspec.rb +1 -1
- data/fastlane/lib/fastlane/actions/recreate_schemes.rb +1 -1
- data/fastlane/lib/fastlane/actions/reset_git_repo.rb +1 -1
- data/fastlane/lib/fastlane/actions/restore_file.rb +1 -1
- data/fastlane/lib/fastlane/actions/rocket.rb +2 -2
- data/fastlane/lib/fastlane/actions/run_tests.rb +1 -1
- data/fastlane/lib/fastlane/actions/s3.rb +1 -1
- data/fastlane/lib/fastlane/actions/scp.rb +2 -2
- data/fastlane/lib/fastlane/actions/set_build_number_repository.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_changelog.rb +2 -2
- data/fastlane/lib/fastlane/actions/set_github_release.rb +4 -4
- data/fastlane/lib/fastlane/actions/set_info_plist_value.rb +2 -2
- data/fastlane/lib/fastlane/actions/set_pod_key.rb +1 -1
- data/fastlane/lib/fastlane/actions/setup_circle_ci.rb +4 -4
- data/fastlane/lib/fastlane/actions/setup_jenkins.rb +6 -6
- data/fastlane/lib/fastlane/actions/setup_travis.rb +2 -2
- data/fastlane/lib/fastlane/actions/slack.rb +3 -3
- data/fastlane/lib/fastlane/actions/slather.rb +2 -2
- data/fastlane/lib/fastlane/actions/spm.rb +2 -2
- data/fastlane/lib/fastlane/actions/ssh.rb +1 -1
- data/fastlane/lib/fastlane/actions/team_id.rb +1 -1
- data/fastlane/lib/fastlane/actions/team_name.rb +1 -1
- data/fastlane/lib/fastlane/actions/testfairy.rb +7 -7
- data/fastlane/lib/fastlane/actions/tryouts.rb +6 -6
- data/fastlane/lib/fastlane/actions/update_app_group_identifiers.rb +2 -2
- data/fastlane/lib/fastlane/actions/update_fastlane.rb +5 -5
- data/fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb +10 -10
- data/fastlane/lib/fastlane/actions/update_info_plist.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_url_schemes.rb +1 -1
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +4 -4
- data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +4 -4
- data/fastlane/lib/fastlane/actions/verify_build.rb +6 -6
- data/fastlane/lib/fastlane/actions/verify_pod_keys.rb +1 -1
- data/fastlane/lib/fastlane/actions/version_bump_podspec.rb +3 -3
- data/fastlane/lib/fastlane/actions/version_get_podspec.rb +2 -2
- data/fastlane/lib/fastlane/actions/xcode_select.rb +2 -2
- data/fastlane/lib/fastlane/actions/xcode_server_get_assets.rb +3 -3
- data/fastlane/lib/fastlane/actions/xcov.rb +1 -1
- data/fastlane/lib/fastlane/actions/xctool.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcversion.rb +1 -1
- data/fastlane/lib/fastlane/actions/zip.rb +3 -3
- data/fastlane/lib/fastlane/auto_complete.rb +15 -15
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +15 -15
- data/fastlane/lib/fastlane/command_line_handler.rb +1 -1
- data/fastlane/lib/fastlane/commands_generator.rb +26 -26
- data/fastlane/lib/fastlane/configuration_helper.rb +2 -2
- data/fastlane/lib/fastlane/documentation/actions_list.rb +47 -47
- data/fastlane/lib/fastlane/documentation/docs_generator.rb +1 -1
- data/fastlane/lib/fastlane/environment_printer.rb +5 -5
- data/fastlane/lib/fastlane/fast_file.rb +5 -5
- data/fastlane/lib/fastlane/fastlane_require.rb +2 -2
- data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +3 -3
- data/fastlane/lib/fastlane/helper/podspec_helper.rb +1 -1
- data/fastlane/lib/fastlane/helper/sh_helper.rb +2 -2
- data/fastlane/lib/fastlane/helper/xcversion_helper.rb +1 -1
- data/fastlane/lib/fastlane/lane.rb +6 -6
- data/fastlane/lib/fastlane/lane_list.rb +3 -3
- data/fastlane/lib/fastlane/lane_manager.rb +7 -7
- data/fastlane/lib/fastlane/lane_manager_base.rb +15 -15
- data/fastlane/lib/fastlane/markdown_table_formatter.rb +2 -2
- data/fastlane/lib/fastlane/new_action.rb +5 -5
- data/fastlane/lib/fastlane/one_off.rb +1 -1
- data/fastlane/lib/fastlane/plugins/plugin_generator.rb +5 -5
- data/fastlane/lib/fastlane/plugins/plugin_generator_ui.rb +2 -2
- data/fastlane/lib/fastlane/plugins/plugin_manager.rb +7 -7
- data/fastlane/lib/fastlane/plugins/plugin_search.rb +5 -5
- data/fastlane/lib/fastlane/plugins/plugin_update_manager.rb +4 -4
- data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +9 -8
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +37 -2
- data/fastlane/lib/fastlane/plugins/template/Gemfile +1 -1
- data/fastlane/lib/fastlane/plugins/template/Rakefile +1 -1
- data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/actions/%plugin_name%_action.rb.erb +3 -0
- data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/helper/%plugin_name%_helper.rb.erb +4 -0
- data/fastlane/lib/fastlane/plugins/template/spec/spec_helper.rb.erb +1 -1
- data/fastlane/lib/fastlane/runner.rb +9 -9
- data/fastlane/lib/fastlane/setup/crashlytics_beta.rb +9 -9
- data/fastlane/lib/fastlane/setup/crashlytics_beta_command_line_handler.rb +7 -7
- data/fastlane/lib/fastlane/setup/crashlytics_beta_info_collector.rb +19 -19
- data/fastlane/lib/fastlane/setup/crashlytics_beta_ui.rb +3 -3
- data/fastlane/lib/fastlane/setup/setup_android.rb +4 -4
- data/fastlane/lib/fastlane/setup/setup_ios.rb +9 -9
- data/fastlane/lib/fastlane/supported_platforms.rb +1 -1
- data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +10 -6
- data/fastlane/lib/fastlane/swift_lane_manager.rb +1 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane_core/README.md +0 -26
- data/fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb +2 -2
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +1 -1
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +2 -2
- data/fastlane_core/lib/fastlane_core/command_executor.rb +3 -3
- data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +4 -4
- data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +4 -4
- data/fastlane_core/lib/fastlane_core/configuration/configuration_file.rb +4 -4
- data/fastlane_core/lib/fastlane_core/core_ext/cfpropertylist.rb +3 -3
- data/fastlane_core/lib/fastlane_core/device_manager.rb +2 -4
- data/fastlane_core/lib/fastlane_core/fastlane_folder.rb +1 -1
- data/fastlane_core/lib/fastlane_core/globals.rb +3 -3
- data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +1 -1
- data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +2 -2
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +2 -2
- data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +1 -1
- data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +1 -1
- data/fastlane_core/lib/fastlane_core/print_table.rb +5 -5
- data/fastlane_core/lib/fastlane_core/project.rb +7 -7
- data/fastlane_core/lib/fastlane_core/swag.rb +9 -9
- data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +49 -49
- data/fastlane_core/lib/fastlane_core/ui/github_issue_inspector_reporter.rb +18 -18
- data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +1 -1
- data/fastlane_core/lib/fastlane_core/update_checker/changelog.rb +7 -7
- data/fastlane_core/lib/fastlane_core/update_checker/update_checker.rb +11 -11
- data/frameit/lib/frameit/commands_generator.rb +2 -2
- data/frameit/lib/frameit/config_parser.rb +11 -11
- data/frameit/lib/frameit/dependency_checker.rb +7 -7
- data/frameit/lib/frameit/editor.rb +41 -41
- data/frameit/lib/frameit/frame_downloader.rb +12 -12
- data/frameit/lib/frameit/mac_editor.rb +2 -2
- data/frameit/lib/frameit/options.rb +1 -1
- data/frameit/lib/frameit/runner.rb +7 -7
- data/frameit/lib/frameit/screenshot.rb +5 -5
- data/frameit/lib/frameit/strings_parser.rb +6 -6
- data/frameit/lib/frameit/template_finder.rb +3 -3
- data/gym/lib/gym/commands_generator.rb +4 -4
- data/gym/lib/gym/detect_values.rb +1 -1
- data/gym/lib/gym/error_handler.rb +84 -84
- data/gym/lib/gym/generators/build_command_generator.rb +1 -1
- data/gym/lib/gym/runner.rb +24 -24
- data/gym/lib/gym/xcodebuild_fixes/generic_archive_fix.rb +2 -2
- data/match/lib/assets/READMETemplate.md +3 -3
- data/match/lib/match/commands_generator.rb +3 -3
- data/match/lib/match/encrypt.rb +10 -10
- data/match/lib/match/git_helper.rb +5 -5
- data/match/lib/match/nuke.rb +29 -29
- data/match/lib/match/runner.rb +13 -13
- data/match/lib/match/setup.rb +7 -7
- data/match/lib/match/table_printer.rb +6 -6
- data/match/lib/match/utils.rb +2 -2
- data/pem/lib/pem/commands_generator.rb +1 -1
- data/pem/lib/pem/manager.rb +9 -9
- data/pem/lib/pem/module.rb +1 -1
- data/pilot/lib/pilot/build_manager.rb +8 -8
- data/pilot/lib/pilot/commands_generator.rb +1 -1
- data/pilot/lib/pilot/manager.rb +1 -1
- data/pilot/lib/pilot/options.rb +4 -4
- data/pilot/lib/pilot/tester_manager.rb +10 -10
- data/precheck/lib/precheck/commands_generator.rb +4 -4
- data/precheck/lib/precheck/rule.rb +2 -2
- data/precheck/lib/precheck/rule_processor.rb +7 -7
- data/precheck/lib/precheck/rules/abstract_text_match_rule.rb +2 -2
- data/precheck/lib/precheck/rules/curse_words_rule.rb +3 -3
- data/precheck/lib/precheck/rules/unreachable_urls_rule.rb +3 -3
- data/precheck/lib/precheck/runner.rb +7 -7
- data/produce/lib/produce/commands_generator.rb +48 -48
- data/produce/lib/produce/developer_center.rb +4 -4
- data/produce/lib/produce/group.rb +2 -2
- data/produce/lib/produce/itunes_connect.rb +4 -4
- data/produce/lib/produce/options.rb +3 -3
- data/produce/lib/produce/service.rb +1 -1
- data/scan/lib/scan/commands_generator.rb +2 -2
- data/scan/lib/scan/error_handler.rb +12 -12
- data/scan/lib/scan/runner.rb +3 -3
- data/scan/lib/scan/slack_poster.rb +2 -2
- data/scan/lib/scan/test_command_generator.rb +1 -1
- data/screengrab/lib/screengrab/commands_generator.rb +1 -1
- data/screengrab/lib/screengrab/dependency_checker.rb +9 -9
- data/screengrab/lib/screengrab/options.rb +3 -3
- data/screengrab/lib/screengrab/reports_generator.rb +2 -2
- data/screengrab/lib/screengrab/runner.rb +32 -32
- data/sigh/lib/sigh/commands_generator.rb +18 -18
- data/sigh/lib/sigh/download_all.rb +4 -4
- data/sigh/lib/sigh/local_manage.rb +27 -27
- data/sigh/lib/sigh/manager.rb +1 -1
- data/sigh/lib/sigh/repair.rb +6 -6
- data/sigh/lib/sigh/resign.rb +7 -7
- data/sigh/lib/sigh/runner.rb +26 -26
- data/snapshot/lib/snapshot/collector.rb +7 -7
- data/snapshot/lib/snapshot/commands_generator.rb +7 -7
- data/snapshot/lib/snapshot/dependency_checker.rb +34 -19
- data/snapshot/lib/snapshot/detect_values.rb +2 -0
- data/snapshot/lib/snapshot/error_handler.rb +1 -1
- data/snapshot/lib/snapshot/fixes/hardware_keyboard_fix.rb +1 -1
- data/snapshot/lib/snapshot/fixes/simulator_zoom_fix.rb +1 -1
- data/snapshot/lib/snapshot/reports_generator.rb +2 -2
- data/snapshot/lib/snapshot/reset_simulators.rb +2 -2
- data/snapshot/lib/snapshot/runner.rb +14 -14
- data/snapshot/lib/snapshot/screenshot_flatten.rb +1 -1
- data/snapshot/lib/snapshot/screenshot_rotate.rb +6 -6
- data/snapshot/lib/snapshot/setup.rb +16 -16
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +1 -1
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +7 -7
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_xcode_8.rb +4 -4
- data/snapshot/lib/snapshot/update.rb +8 -8
- data/spaceship/lib/spaceship/base.rb +3 -3
- data/spaceship/lib/spaceship/client.rb +17 -17
- data/spaceship/lib/spaceship/commands_generator.rb +1 -1
- data/spaceship/lib/spaceship/du/du_client.rb +6 -3
- data/spaceship/lib/spaceship/globals.rb +1 -1
- data/spaceship/lib/spaceship/playground.rb +18 -18
- data/spaceship/lib/spaceship/portal/certificate.rb +5 -5
- data/spaceship/lib/spaceship/portal/device.rb +2 -2
- data/spaceship/lib/spaceship/portal/portal_client.rb +7 -7
- data/spaceship/lib/spaceship/portal/provisioning_profile.rb +7 -9
- data/spaceship/lib/spaceship/portal/ui/select_team.rb +13 -13
- data/spaceship/lib/spaceship/spaceauth_runner.rb +16 -16
- data/spaceship/lib/spaceship/test_flight/client.rb +9 -9
- data/spaceship/lib/spaceship/tunes/app_details.rb +1 -1
- data/spaceship/lib/spaceship/tunes/app_version.rb +7 -7
- data/spaceship/lib/spaceship/tunes/app_version_common.rb +1 -1
- data/spaceship/lib/spaceship/tunes/application.rb +1 -1
- data/spaceship/lib/spaceship/tunes/device_type.rb +2 -2
- data/spaceship/lib/spaceship/tunes/iap_detail.rb +1 -1
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +54 -54
- data/spaceship/lib/spaceship/two_step_client.rb +19 -19
- data/spaceship/lib/spaceship/ui.rb +1 -1
- data/supply/lib/supply/client.rb +1 -1
- data/supply/lib/supply/commands_generator.rb +1 -1
- data/supply/lib/supply/options.rb +14 -14
- data/supply/lib/supply/uploader.rb +3 -3
- metadata +31 -25
- data/fastlane/lib/.DS_Store +0 -0
- data/fastlane/lib/assets/.DS_Store +0 -0
- data/fastlane/lib/fastlane/.DS_Store +0 -0
- data/fastlane/lib/fastlane/actions/.DS_Store +0 -0
- data/fastlane/lib/fastlane/actions/docs/.DS_Store +0 -0
- data/fastlane/lib/fastlane/setup/.DS_Store +0 -0
- data/fastlane_core/lib/.DS_Store +0 -0
- data/fastlane_core/lib/fastlane_core/.DS_Store +0 -0
@@ -5,7 +5,7 @@ module Screengrab
|
|
5
5
|
require 'erb'
|
6
6
|
|
7
7
|
def generate
|
8
|
-
UI.message
|
8
|
+
UI.message("Generating HTML Report")
|
9
9
|
|
10
10
|
screens_path = Screengrab.config[:output_directory]
|
11
11
|
|
@@ -29,7 +29,7 @@ module Screengrab
|
|
29
29
|
File.write(export_path, html)
|
30
30
|
|
31
31
|
export_path = File.expand_path(export_path)
|
32
|
-
UI.success
|
32
|
+
UI.success("Successfully created HTML file with an overview of all the screenshots: '#{export_path}'")
|
33
33
|
system("open '#{export_path}'") unless Screengrab.config[:skip_open_summary]
|
34
34
|
end
|
35
35
|
end
|
@@ -32,8 +32,8 @@ module Screengrab
|
|
32
32
|
apk_paths_provided = app_apk_path && !app_apk_path.empty? && tests_apk_path && !tests_apk_path.empty?
|
33
33
|
|
34
34
|
unless apk_paths_provided || discovered_apk_paths.any?
|
35
|
-
UI.error
|
36
|
-
UI.error
|
35
|
+
UI.error('No APK paths were provided and no APKs could be found')
|
36
|
+
UI.error("Please provide APK paths with 'app_apk_path' and 'tests_apk_path' and make sure you have assembled APKs prior to running this command.")
|
37
37
|
return
|
38
38
|
end
|
39
39
|
|
@@ -41,13 +41,13 @@ module Screengrab
|
|
41
41
|
test_packages_to_use = @config[:use_tests_in_packages]
|
42
42
|
|
43
43
|
if test_classes_to_use && test_classes_to_use.any? && test_packages_to_use && test_packages_to_use.any?
|
44
|
-
UI.error
|
44
|
+
UI.error("'use_tests_in_classes' and 'use_tests_in_packages' can not be combined. Please use one or the other.")
|
45
45
|
return
|
46
46
|
end
|
47
47
|
|
48
48
|
if (test_classes_to_use.nil? || test_classes_to_use.empty?) && (test_packages_to_use.nil? || test_packages_to_use.empty?)
|
49
|
-
UI.important
|
50
|
-
UI.important
|
49
|
+
UI.important('Limiting the test classes run by `screengrab` to just those that generate screenshots can make runs faster.')
|
50
|
+
UI.important('Consider using the :use_tests_in_classes or :use_tests_in_packages option, and organize your tests accordingly.')
|
51
51
|
end
|
52
52
|
|
53
53
|
device_type_dir_name = "#{@config[:device_type]}Screenshots"
|
@@ -73,7 +73,7 @@ module Screengrab
|
|
73
73
|
|
74
74
|
ReportsGenerator.new.generate
|
75
75
|
|
76
|
-
UI.success
|
76
|
+
UI.success("Captured #{number_of_screenshots} screenshots! 📷✨")
|
77
77
|
end
|
78
78
|
|
79
79
|
def select_device
|
@@ -87,18 +87,18 @@ module Screengrab
|
|
87
87
|
'* daemon', # Messages printed when the daemon is starting up
|
88
88
|
'List of devices attached', # Header of table for data we want
|
89
89
|
"doesn't match this client" # Message printed when there is an ADB client/server version mismatch
|
90
|
-
].any? { |status| device.include?
|
90
|
+
].any? { |status| device.include?(status) }
|
91
91
|
end
|
92
92
|
|
93
|
-
UI.user_error!
|
93
|
+
UI.user_error!('There are no connected and authorized devices or emulators') if devices.empty?
|
94
94
|
|
95
95
|
devices.select! { |d| d.include?(@config[:specific_device]) } if @config[:specific_device]
|
96
96
|
|
97
|
-
UI.user_error!
|
97
|
+
UI.user_error!("No connected devices matched your criteria: #{@config[:specific_device]}") if devices.empty?
|
98
98
|
|
99
99
|
if devices.length > 1
|
100
|
-
UI.important
|
101
|
-
UI.important
|
100
|
+
UI.important("Multiple connected devices, selecting the first one")
|
101
|
+
UI.important("To specify which connected device to use, use the -s (specific_device) config option")
|
102
102
|
end
|
103
103
|
|
104
104
|
# grab the serial number. the lines of output can look like these:
|
@@ -109,18 +109,18 @@ module Screengrab
|
|
109
109
|
end
|
110
110
|
|
111
111
|
def select_app_apk(discovered_apk_paths)
|
112
|
-
UI.important
|
112
|
+
UI.important("To not be asked about this value, you can specify it using 'app_apk_path'")
|
113
113
|
UI.select('Select your debug app APK', discovered_apk_paths)
|
114
114
|
end
|
115
115
|
|
116
116
|
def select_tests_apk(discovered_apk_paths)
|
117
|
-
UI.important
|
117
|
+
UI.important("To not be asked about this value, you can specify it using 'tests_apk_path'")
|
118
118
|
UI.select('Select your debug tests APK', discovered_apk_paths)
|
119
119
|
end
|
120
120
|
|
121
121
|
def clear_local_previous_screenshots(device_type_dir_name)
|
122
122
|
if @config[:clear_previous_screenshots]
|
123
|
-
UI.message
|
123
|
+
UI.message("Clearing #{device_type_dir_name} within #{@config[:output_directory]}")
|
124
124
|
|
125
125
|
# We'll clear the temporary directory where screenshots wind up after being pulled from
|
126
126
|
# the device as well, in case those got stranded on a previous run/failure
|
@@ -147,7 +147,7 @@ module Screengrab
|
|
147
147
|
end
|
148
148
|
|
149
149
|
def clear_device_previous_screenshots(device_serial, device_screenshots_paths)
|
150
|
-
UI.message
|
150
|
+
UI.message('Cleaning screenshots on device')
|
151
151
|
|
152
152
|
device_screenshots_paths.each do |device_path|
|
153
153
|
if_device_path_exists(device_serial, device_path) do |path|
|
@@ -160,11 +160,11 @@ module Screengrab
|
|
160
160
|
|
161
161
|
def validate_apk(app_apk_path)
|
162
162
|
unless @android_env.aapt_path
|
163
|
-
UI.important
|
163
|
+
UI.important("The `aapt` command could not be found on your system, so your app APK could not be validated")
|
164
164
|
return
|
165
165
|
end
|
166
166
|
|
167
|
-
UI.message
|
167
|
+
UI.message('Validating app APK')
|
168
168
|
apk_permissions = @executor.execute(command: "#{@android_env.aapt_path} dump permissions #{app_apk_path}",
|
169
169
|
print_all: true,
|
170
170
|
print_command: true)
|
@@ -172,38 +172,38 @@ module Screengrab
|
|
172
172
|
missing_permissions = NEEDED_PERMISSIONS.reject { |needed| apk_permissions.include?(needed) }
|
173
173
|
|
174
174
|
if missing_permissions.any?
|
175
|
-
UI.user_error!
|
175
|
+
UI.user_error!("The needed permission(s) #{missing_permissions.join(', ')} could not be found in your app APK")
|
176
176
|
end
|
177
177
|
end
|
178
178
|
|
179
179
|
def install_apks(device_serial, app_apk_path, tests_apk_path)
|
180
|
-
UI.message
|
180
|
+
UI.message('Installing app APK')
|
181
181
|
apk_install_output = run_adb_command("adb -s #{device_serial} install -r #{app_apk_path.shellescape}",
|
182
182
|
print_all: true,
|
183
183
|
print_command: true)
|
184
|
-
UI.user_error!
|
184
|
+
UI.user_error!("App APK could not be installed") if apk_install_output.include?("Failure [")
|
185
185
|
|
186
|
-
UI.message
|
186
|
+
UI.message('Installing tests APK')
|
187
187
|
apk_install_output = run_adb_command("adb -s #{device_serial} install -r #{tests_apk_path.shellescape}",
|
188
188
|
print_all: true,
|
189
189
|
print_command: true)
|
190
|
-
UI.user_error!
|
190
|
+
UI.user_error!("Tests APK could not be installed") if apk_install_output.include?("Failure [")
|
191
191
|
end
|
192
192
|
|
193
193
|
def uninstall_apks(device_serial, app_package_name, tests_package_name)
|
194
|
-
UI.message
|
194
|
+
UI.message('Uninstalling app APK')
|
195
195
|
run_adb_command("adb -s #{device_serial} uninstall #{app_package_name}",
|
196
196
|
print_all: true,
|
197
197
|
print_command: true)
|
198
198
|
|
199
|
-
UI.message
|
199
|
+
UI.message('Uninstalling tests APK')
|
200
200
|
run_adb_command("adb -s #{device_serial} uninstall #{tests_package_name}",
|
201
201
|
print_all: true,
|
202
202
|
print_command: true)
|
203
203
|
end
|
204
204
|
|
205
205
|
def grant_permissions(device_serial)
|
206
|
-
UI.message
|
206
|
+
UI.message('Granting the permission necessary to change locales on the device')
|
207
207
|
run_adb_command("adb -s #{device_serial} shell pm grant #{@config[:app_package_name]} android.permission.CHANGE_CONFIGURATION",
|
208
208
|
print_all: true,
|
209
209
|
print_command: true)
|
@@ -213,7 +213,7 @@ module Screengrab
|
|
213
213
|
print_command: true).to_i
|
214
214
|
|
215
215
|
if device_api_version >= 23
|
216
|
-
UI.message
|
216
|
+
UI.message('Granting the permissions necessary to access device external storage')
|
217
217
|
run_adb_command("adb -s #{device_serial} shell pm grant #{@config[:app_package_name]} android.permission.WRITE_EXTERNAL_STORAGE",
|
218
218
|
print_all: true,
|
219
219
|
print_command: true)
|
@@ -240,7 +240,7 @@ module Screengrab
|
|
240
240
|
end
|
241
241
|
|
242
242
|
def run_tests_for_locale(locale, device_serial, test_classes_to_use, test_packages_to_use, launch_arguments)
|
243
|
-
UI.message
|
243
|
+
UI.message("Running tests for locale: #{locale}")
|
244
244
|
|
245
245
|
instrument_command = ["adb -s #{device_serial} shell am instrument --no-window-animation -w",
|
246
246
|
"-e testLocale #{locale.tr('-', '_')}",
|
@@ -264,7 +264,7 @@ module Screengrab
|
|
264
264
|
end
|
265
265
|
|
266
266
|
def pull_screenshots_from_device(device_serial, device_screenshots_paths, device_type_dir_name)
|
267
|
-
UI.message
|
267
|
+
UI.message("Pulling captured screenshots from the device")
|
268
268
|
starting_screenshot_count = screenshot_file_names_in(@config[:output_directory], device_type_dir_name).length
|
269
269
|
|
270
270
|
UI.verbose("Starting screenshot count is: #{starting_screenshot_count}")
|
@@ -295,8 +295,8 @@ module Screengrab
|
|
295
295
|
# Because we can't guarantee the screenshot output directory will be empty when we pull, we determine
|
296
296
|
# success based on whether there are more screenshots there than when we started.
|
297
297
|
if starting_screenshot_count == ending_screenshot_count
|
298
|
-
UI.error
|
299
|
-
UI.abort_with_message!
|
298
|
+
UI.error("Make sure you've used Screengrab.screenshot() in your tests and that your expected tests are being run.")
|
299
|
+
UI.abort_with_message!("No screenshots were detected 📷❌")
|
300
300
|
end
|
301
301
|
|
302
302
|
ending_screenshot_count - starting_screenshot_count
|
@@ -330,7 +330,7 @@ module Screengrab
|
|
330
330
|
|
331
331
|
FileUtils.mkdir_p(dest_dir)
|
332
332
|
FileUtils.cp_r(src_screenshots, dest_dir)
|
333
|
-
UI.success
|
333
|
+
UI.success("Screenshots copied to #{dest_dir}")
|
334
334
|
end
|
335
335
|
end
|
336
336
|
|
@@ -341,7 +341,7 @@ module Screengrab
|
|
341
341
|
print_all: false,
|
342
342
|
print_command: false).include?('No such file')
|
343
343
|
|
344
|
-
yield
|
344
|
+
yield(device_path)
|
345
345
|
rescue
|
346
346
|
# Some versions of ADB will have a non-zero exit status for this, which will cause the executor to raise.
|
347
347
|
# We can safely ignore that and treat it as if it returned 'No such file'
|
@@ -65,7 +65,7 @@ module Sigh
|
|
65
65
|
c.syntax = 'fastlane sigh download_all'
|
66
66
|
c.description = 'Downloads all valid provisioning profiles'
|
67
67
|
|
68
|
-
c.option
|
68
|
+
c.option('--download_xcode_profiles', 'Only works with `fastlane sigh download_all` command: Also download Xcode managed provisioning profiles')
|
69
69
|
|
70
70
|
FastlaneCore::CommanderGenerator.new.generate(Sigh::Options.available_options, command: c)
|
71
71
|
|
@@ -99,19 +99,19 @@ module Sigh
|
|
99
99
|
command :resign do |c|
|
100
100
|
c.syntax = 'fastlane sigh resign'
|
101
101
|
c.description = 'Resigns an existing ipa file with the given provisioning profile'
|
102
|
-
c.option
|
103
|
-
c.option
|
104
|
-
c.option
|
102
|
+
c.option('-i', '--signing_identity STRING', String, 'The signing identity to use. Must match the one defined in the provisioning profile.')
|
103
|
+
c.option('-x', '--version_number STRING', String, 'Version number to force binary and all nested binaries to use. Changes both CFBundleShortVersionString and CFBundleVersion.')
|
104
|
+
c.option('-p', '--provisioning_profile PATH', String, '(or BUNDLE_ID=PATH) The path to the provisioning profile which should be used. '\
|
105
105
|
'Can be provided multiple times if the application contains nested applications and app extensions, which need their own provisioning profile. '\
|
106
106
|
'The path may be prefixed with a identifier in order to determine which provisioning profile should be used on which app.',
|
107
|
-
&multiple_values_option_proc(c, "provisioning_profile", &proc { |value| value.split('=', 2) })
|
108
|
-
c.option
|
109
|
-
c.option
|
110
|
-
c.option
|
111
|
-
c.option
|
112
|
-
c.option
|
113
|
-
c.option
|
114
|
-
c.option
|
107
|
+
&multiple_values_option_proc(c, "provisioning_profile", &proc { |value| value.split('=', 2) }))
|
108
|
+
c.option('-d', '--display_name STRING', String, 'Display name to use')
|
109
|
+
c.option('-e', '--entitlements PATH', String, 'The path to the entitlements file to use.')
|
110
|
+
c.option('--short_version STRING', String, 'Short version string to force binary and all nested binaries to use (CFBundleShortVersionString).')
|
111
|
+
c.option('--bundle_version STRING', String, 'Bundle version to force binary and all nested binaries to use (CFBundleVersion).')
|
112
|
+
c.option('--use_app_entitlements', 'Extract app bundle codesigning entitlements and combine with entitlements from new provisionin profile.')
|
113
|
+
c.option('-g', '--new_bundle_id STRING', String, 'New application bundle ID (CFBundleIdentifier)')
|
114
|
+
c.option('--keychain_path STRING', String, 'Path to the keychain that /usr/bin/codesign should use')
|
115
115
|
|
116
116
|
c.action do |args, options|
|
117
117
|
Sigh::Resign.new.run(options, args)
|
@@ -122,18 +122,18 @@ module Sigh
|
|
122
122
|
c.syntax = 'fastlane sigh manage'
|
123
123
|
c.description = 'Manage installed provisioning profiles on your system.'
|
124
124
|
|
125
|
-
c.option
|
126
|
-
c.option
|
125
|
+
c.option('-f', '--force', 'Force remove all expired provisioning profiles. Required on CI.')
|
126
|
+
c.option('-e', '--clean_expired', 'Remove all expired provisioning profiles.')
|
127
127
|
|
128
|
-
c.option
|
129
|
-
c.example
|
128
|
+
c.option('-p', '--clean_pattern STRING', String, 'Remove any provisioning profiles that matches the regular expression.')
|
129
|
+
c.example('Remove all "iOS Team Provisioning" provisioning profiles', 'fastlane sigh manage -p "iOS\ ?Team Provisioning Profile"')
|
130
130
|
|
131
131
|
c.action do |args, options|
|
132
132
|
Sigh::LocalManage.start(options, args)
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
-
default_command
|
136
|
+
default_command(:renew)
|
137
137
|
|
138
138
|
run!
|
139
139
|
end
|
@@ -145,7 +145,7 @@ module Sigh
|
|
145
145
|
values = option[1] || []
|
146
146
|
values << value
|
147
147
|
|
148
|
-
command.proxy_options.delete
|
148
|
+
command.proxy_options.delete(option)
|
149
149
|
command.proxy_options << [name, values]
|
150
150
|
end
|
151
151
|
end
|
@@ -7,17 +7,17 @@ module Sigh
|
|
7
7
|
class DownloadAll
|
8
8
|
# Download all valid provisioning profiles
|
9
9
|
def download_all(download_xcode_profiles: false)
|
10
|
-
UI.message
|
10
|
+
UI.message("Starting login with user '#{Sigh.config[:username]}'")
|
11
11
|
Spaceship.login(Sigh.config[:username], nil)
|
12
12
|
Spaceship.select_team
|
13
|
-
UI.message
|
13
|
+
UI.message("Successfully logged in")
|
14
14
|
|
15
15
|
Spaceship.provisioning_profile.all(xcode: download_xcode_profiles).each do |profile|
|
16
16
|
if profile.valid?
|
17
|
-
UI.message
|
17
|
+
UI.message("Downloading profile '#{profile.name}'...")
|
18
18
|
download_profile(profile)
|
19
19
|
else
|
20
|
-
UI.important
|
20
|
+
UI.important("Skipping invalid/expired profile '#{profile.name}'")
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -18,7 +18,7 @@ module Sigh
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.install_profile(profile)
|
21
|
-
UI.message
|
21
|
+
UI.message("Installing provisioning profile...")
|
22
22
|
profile_path = File.expand_path("~") + "/Library/MobileDevice/Provisioning Profiles/"
|
23
23
|
uuid = ENV["SIGH_UUID"] || ENV["SIGH_UDID"]
|
24
24
|
profile_filename = uuid + ".mobileprovision"
|
@@ -30,10 +30,10 @@ module Sigh
|
|
30
30
|
end
|
31
31
|
|
32
32
|
# copy to Xcode provisioning profile directory
|
33
|
-
FileUtils.copy
|
33
|
+
FileUtils.copy(profile, destination)
|
34
34
|
|
35
|
-
if File.exist?
|
36
|
-
UI.success
|
35
|
+
if File.exist?(destination)
|
36
|
+
UI.success("Profile installed at \"#{destination}\"")
|
37
37
|
else
|
38
38
|
UI.user_error!("Failed installation of provisioning profile at location: #{destination}")
|
39
39
|
end
|
@@ -55,44 +55,44 @@ module Sigh
|
|
55
55
|
|
56
56
|
profiles_valid = profiles.select { |profile| profile["ExpirationDate"] > now && profile["ExpirationDate"] > soon }
|
57
57
|
if profiles_valid.count > 0
|
58
|
-
UI.message
|
59
|
-
UI.message
|
58
|
+
UI.message("Provisioning profiles installed")
|
59
|
+
UI.message("Valid:")
|
60
60
|
profiles_valid.each do |profile|
|
61
|
-
UI.message
|
61
|
+
UI.message(profile_info(profile).green)
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
65
|
profiles_soon = profiles.select { |profile| profile["ExpirationDate"] > now && profile["ExpirationDate"] < soon }
|
66
66
|
if profiles_soon.count > 0
|
67
|
-
UI.message
|
68
|
-
UI.message
|
67
|
+
UI.message("")
|
68
|
+
UI.message("Expiring within 30 days:")
|
69
69
|
profiles_soon.each do |profile|
|
70
|
-
UI.message
|
70
|
+
UI.message(profile_info(profile).yellow)
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
74
|
profiles_expired = profiles.select { |profile| profile["ExpirationDate"] < now }
|
75
75
|
if profiles_expired.count > 0
|
76
|
-
UI.message
|
77
|
-
UI.message
|
76
|
+
UI.message("")
|
77
|
+
UI.message("Expired:")
|
78
78
|
profiles_expired.each do |profile|
|
79
|
-
UI.message
|
79
|
+
UI.message(profile_info(profile).red)
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
-
UI.message
|
84
|
-
UI.message
|
85
|
-
UI.message
|
86
|
-
UI.message
|
87
|
-
UI.message
|
88
|
-
UI.message
|
83
|
+
UI.message("")
|
84
|
+
UI.message("Summary")
|
85
|
+
UI.message("#{profiles.count} installed profiles")
|
86
|
+
UI.message("#{profiles_expired.count} are expired".red) if profiles_expired.count > 0
|
87
|
+
UI.message("#{profiles_soon.count} are valid but will expire within 30 days".yellow)
|
88
|
+
UI.message("#{profiles_valid.count} are valid".green)
|
89
89
|
|
90
|
-
UI.message
|
90
|
+
UI.message("You can remove all expired profiles using `fastlane sigh manage -e`") if profiles_expired.count > 0
|
91
91
|
end
|
92
92
|
|
93
93
|
def self.profile_info(profile)
|
94
94
|
if FastlaneCore::Globals.verbose?
|
95
|
-
"#{profile['Name']} - #{File.basename
|
95
|
+
"#{profile['Name']} - #{File.basename(profile['Path'])}"
|
96
96
|
else
|
97
97
|
profile['Name']
|
98
98
|
end
|
@@ -103,15 +103,15 @@ module Sigh
|
|
103
103
|
|
104
104
|
profiles = load_profiles.select { |profile| (expired && profile["ExpirationDate"] < now) || (!pattern.nil? && profile["Name"] =~ pattern) }
|
105
105
|
|
106
|
-
UI.message
|
106
|
+
UI.message("The following provisioning profiles are either expired or matches your pattern:")
|
107
107
|
profiles.each do |profile|
|
108
|
-
UI.message
|
108
|
+
UI.message(profile["Name"].red)
|
109
109
|
end
|
110
110
|
|
111
111
|
delete = force
|
112
112
|
unless delete
|
113
113
|
if Helper.ci?
|
114
|
-
UI.user_error!
|
114
|
+
UI.user_error!("On a CI server, cleanup cannot be used without the --force option")
|
115
115
|
else
|
116
116
|
delete = UI.confirm("Delete these provisioning profiles #{profiles.length}?")
|
117
117
|
end
|
@@ -119,14 +119,14 @@ module Sigh
|
|
119
119
|
|
120
120
|
if delete
|
121
121
|
profiles.each do |profile|
|
122
|
-
File.delete
|
122
|
+
File.delete(profile["Path"])
|
123
123
|
end
|
124
|
-
UI.success
|
124
|
+
UI.success("\n\nDeleted #{profiles.length} profiles")
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
128
128
|
def self.load_profiles
|
129
|
-
UI.message
|
129
|
+
UI.message("Loading Provisioning profiles from ~/Library/MobileDevice/Provisioning Profiles/")
|
130
130
|
profiles_path = File.expand_path("~") + "/Library/MobileDevice/Provisioning Profiles/*.mobileprovision"
|
131
131
|
profile_paths = Dir[profiles_path]
|
132
132
|
|
data/sigh/lib/sigh/manager.rb
CHANGED
data/sigh/lib/sigh/repair.rb
CHANGED
@@ -5,10 +5,10 @@ require_relative 'module'
|
|
5
5
|
module Sigh
|
6
6
|
class Repair
|
7
7
|
def repair_all
|
8
|
-
UI.message
|
8
|
+
UI.message("Starting login with user '#{Sigh.config[:username]}'")
|
9
9
|
Spaceship.login(Sigh.config[:username], nil)
|
10
10
|
Spaceship.select_team
|
11
|
-
UI.message
|
11
|
+
UI.message("Successfully logged in")
|
12
12
|
|
13
13
|
# Select all 'Invalid' or 'Expired' provisioning profiles
|
14
14
|
broken_profiles = Spaceship.provisioning_profile.all.find_all do |profile|
|
@@ -16,19 +16,19 @@ module Sigh
|
|
16
16
|
end
|
17
17
|
|
18
18
|
if broken_profiles.count == 0
|
19
|
-
UI.success
|
19
|
+
UI.success("All provisioning profiles are valid, nothing to do")
|
20
20
|
return
|
21
21
|
end
|
22
22
|
|
23
|
-
UI.success
|
23
|
+
UI.success("Going to repair #{broken_profiles.count} provisioning profiles")
|
24
24
|
|
25
25
|
# Iterate over all broken profiles and repair them
|
26
26
|
broken_profiles.each do |profile|
|
27
|
-
UI.message
|
27
|
+
UI.message("Repairing profile '#{profile.name}'...")
|
28
28
|
profile.repair! # yes, that's all you need to repair a profile
|
29
29
|
end
|
30
30
|
|
31
|
-
UI.success
|
31
|
+
UI.success("Successfully repaired #{broken_profiles.count} provisioning profiles")
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|