fastlane 2.74.1 → 2.75.0.beta.20180109010003
Sign up to get free protection for your applications and to get access to all the features.
- 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
|