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
@@ -59,7 +59,7 @@ module Frameit
|
|
59
59
|
output_path = screenshot.path.gsub('.png', '_framed.png').gsub('.PNG', '_framed.png')
|
60
60
|
image.format("png")
|
61
61
|
image.write(output_path)
|
62
|
-
UI.success
|
62
|
+
UI.success("Added frame: '#{File.expand_path(output_path)}'")
|
63
63
|
end
|
64
64
|
|
65
65
|
# puts the screenshot into the frame
|
@@ -72,8 +72,8 @@ module Frameit
|
|
72
72
|
@image.rotate(-rotation)
|
73
73
|
|
74
74
|
@image = frame.composite(image, "png") do |c|
|
75
|
-
c.compose
|
76
|
-
c.geometry
|
75
|
+
c.compose("DstOver")
|
76
|
+
c.geometry(offset['offset'])
|
77
77
|
end
|
78
78
|
|
79
79
|
# Revert the rotation from above
|
@@ -89,7 +89,7 @@ module Frameit
|
|
89
89
|
if @offset_information and (@offset_information['offset'] or @offset_information['offset'])
|
90
90
|
return @offset_information
|
91
91
|
end
|
92
|
-
UI.user_error!
|
92
|
+
UI.user_error!("Could not find offset_information for '#{screenshot}'")
|
93
93
|
end
|
94
94
|
|
95
95
|
#########################################################################################
|
@@ -139,11 +139,11 @@ module Frameit
|
|
139
139
|
image_width = [frame_width, @image.width].min
|
140
140
|
image_height = [frame_height, image_width / image_aspect_ratio].min
|
141
141
|
image_width = image_height * image_aspect_ratio
|
142
|
-
@image.resize
|
142
|
+
@image.resize("#{image_width}x#{image_height}") if image_width < @image.width || image_height < @image.height
|
143
143
|
else
|
144
144
|
# the screenshot size is only limited by width.
|
145
145
|
# If higher than the frame, the screenshot is cut off at the bottom
|
146
|
-
@image.resize
|
146
|
+
@image.resize("#{frame_width}x") if frame_width < @image.width
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
@@ -184,8 +184,8 @@ module Frameit
|
|
184
184
|
background = MiniMagick::Image.open(fetch_config['background'])
|
185
185
|
|
186
186
|
if background.height != screenshot.size[1]
|
187
|
-
background.resize
|
188
|
-
background.merge!
|
187
|
+
background.resize("#{screenshot.size[0]}x#{screenshot.size[1]}^") # `^` says it should fill area
|
188
|
+
background.merge!(["-gravity", "center", "-crop", "#{screenshot.size[0]}x#{screenshot.size[1]}+0+0"]) # crop from center
|
189
189
|
end
|
190
190
|
background
|
191
191
|
end
|
@@ -195,13 +195,13 @@ module Frameit
|
|
195
195
|
title_below_image = fetch_config['title_below_image']
|
196
196
|
|
197
197
|
@image = background.composite(image, "png") do |c|
|
198
|
-
c.compose
|
198
|
+
c.compose("Over")
|
199
199
|
if title_below_image
|
200
200
|
show_complete_frame = fetch_config['show_complete_frame']
|
201
|
-
c.geometry
|
202
|
-
c.geometry
|
201
|
+
c.geometry("+#{left_space}+#{background.height - image.height - space_to_device}") unless show_complete_frame
|
202
|
+
c.geometry("+#{left_space}+#{vertical_frame_padding}") if show_complete_frame
|
203
203
|
else
|
204
|
-
c.geometry
|
204
|
+
c.geometry("+#{left_space}+#{space_to_device}")
|
205
205
|
end
|
206
206
|
end
|
207
207
|
|
@@ -214,7 +214,7 @@ module Frameit
|
|
214
214
|
|
215
215
|
multiplicator = (screenshot_width.to_f / offset['width'].to_f) # by how much do we have to change this?
|
216
216
|
new_frame_width = multiplicator * frame.width # the new width for the frame
|
217
|
-
frame.resize
|
217
|
+
frame.resize("#{new_frame_width.round}x") # resize it to the calculated width
|
218
218
|
modify_offset(multiplicator) # modify the offset to properly insert the screenshot into the frame later
|
219
219
|
end
|
220
220
|
|
@@ -224,7 +224,7 @@ module Frameit
|
|
224
224
|
if ratio > 1.0
|
225
225
|
# too large - resizing now
|
226
226
|
smaller = (1.0 / ratio)
|
227
|
-
text.resize
|
227
|
+
text.resize("#{(smaller * text.width).round}x")
|
228
228
|
end
|
229
229
|
end
|
230
230
|
|
@@ -248,16 +248,16 @@ module Frameit
|
|
248
248
|
title_below_image = fetch_config['title_below_image']
|
249
249
|
# keyword
|
250
250
|
background = background.composite(keyword, "png") do |c|
|
251
|
-
c.compose
|
252
|
-
c.geometry
|
253
|
-
c.geometry
|
251
|
+
c.compose("Over")
|
252
|
+
c.geometry("+#{keyword_left_space}+#{keyword_top_space}") unless title_below_image
|
253
|
+
c.geometry("+#{keyword_left_space}+#{background.height - space_to_device + keyword_top_space}") if title_below_image
|
254
254
|
end
|
255
255
|
# Then, put the title on top of the screenshot next to the keyword
|
256
256
|
# Then, put the title above/below of the screenshot next to the keyword
|
257
257
|
background = background.composite(title, "png") do |c|
|
258
|
-
c.compose
|
259
|
-
c.geometry
|
260
|
-
c.geometry
|
258
|
+
c.compose("Over")
|
259
|
+
c.geometry("+#{title_left_space}+#{title_top_space}") unless title_below_image
|
260
|
+
c.geometry("+#{title_left_space}+#{background.height - space_to_device + title_top_space}") if title_below_image
|
261
261
|
end
|
262
262
|
background
|
263
263
|
end
|
@@ -286,8 +286,8 @@ module Frameit
|
|
286
286
|
|
287
287
|
UI.verbose("Text for image #{self.screenshot.path} is quite long, reducing font size by #{(ratio - 1.0).round(2)}")
|
288
288
|
|
289
|
-
title.resize
|
290
|
-
keyword.resize
|
289
|
+
title.resize("#{(smaller * title.width).round}x")
|
290
|
+
keyword.resize("#{(smaller * keyword.width).round}x") if keyword
|
291
291
|
sum_width *= smaller
|
292
292
|
end
|
293
293
|
|
@@ -301,9 +301,9 @@ module Frameit
|
|
301
301
|
# First, put the keyword on top of the screenshot, if we have one
|
302
302
|
if keyword
|
303
303
|
background = background.composite(keyword, "png") do |c|
|
304
|
-
c.compose
|
305
|
-
c.geometry
|
306
|
-
c.geometry
|
304
|
+
c.compose("Over")
|
305
|
+
c.geometry("+#{left_space}+#{top_space}") unless title_below_image
|
306
|
+
c.geometry("+#{left_space}+#{background.height - space_to_device + top_space}") if title_below_image
|
307
307
|
end
|
308
308
|
|
309
309
|
left_space += keyword.width + (keyword_padding * smaller)
|
@@ -311,9 +311,9 @@ module Frameit
|
|
311
311
|
|
312
312
|
# Then, put the title on top of the screenshot next to the keyword
|
313
313
|
background = background.composite(title, "png") do |c|
|
314
|
-
c.compose
|
315
|
-
c.geometry
|
316
|
-
c.geometry
|
314
|
+
c.compose("Over")
|
315
|
+
c.geometry("+#{left_space}+#{top_space}") unless title_below_image
|
316
|
+
c.geometry("+#{left_space}+#{background.height - space_to_device + top_space}") if title_below_image
|
317
317
|
end
|
318
318
|
background
|
319
319
|
end
|
@@ -342,7 +342,7 @@ module Frameit
|
|
342
342
|
image_height = max_height # gets trimmed afterwards anyway, and on the iPad the `y` would get cut
|
343
343
|
title_image.combine_options do |i|
|
344
344
|
# Oversize as the text might be larger than the actual image. We're trimming afterwards anyway
|
345
|
-
i.resize
|
345
|
+
i.resize("#{max_width * 5.0}x#{image_height}!") # `!` says it should ignore the ratio
|
346
346
|
end
|
347
347
|
|
348
348
|
current_font = font(key)
|
@@ -350,19 +350,19 @@ module Frameit
|
|
350
350
|
UI.verbose("Using #{current_font} as font the #{key} of #{screenshot.path}") if current_font
|
351
351
|
UI.verbose("Adding text '#{text}'")
|
352
352
|
|
353
|
-
text.gsub!
|
353
|
+
text.gsub!('\n', "\n")
|
354
354
|
text.gsub!(/(?<!\\)(')/) { |s| "\\#{s}" } # escape unescaped apostrophes with a backslash
|
355
355
|
|
356
356
|
interline_spacing = fetch_config['interline_spacing']
|
357
357
|
|
358
358
|
# Add the actual title
|
359
359
|
title_image.combine_options do |i|
|
360
|
-
i.font
|
361
|
-
i.gravity
|
362
|
-
i.pointsize
|
363
|
-
i.draw
|
364
|
-
i.interline_spacing
|
365
|
-
i.fill
|
360
|
+
i.font(current_font) if current_font
|
361
|
+
i.gravity("Center")
|
362
|
+
i.pointsize(actual_font_size)
|
363
|
+
i.draw("text 0,0 '#{text}'")
|
364
|
+
i.interline_spacing(interline_spacing) if interline_spacing
|
365
|
+
i.fill(fetch_config[key.to_s]['color'])
|
366
366
|
end
|
367
367
|
|
368
368
|
results[key] = title_image
|
@@ -435,13 +435,13 @@ module Frameit
|
|
435
435
|
|
436
436
|
# Fetches the title + keyword for this particular screenshot
|
437
437
|
def fetch_text(type)
|
438
|
-
UI.user_error!
|
438
|
+
UI.user_error!("Valid parameters :keyword, :title") unless [:keyword, :title].include?(type)
|
439
439
|
|
440
440
|
# Try to get it from a keyword.strings or title.strings file
|
441
441
|
strings_path = File.join(File.expand_path("..", screenshot.path), "#{type}.strings")
|
442
|
-
if File.exist?
|
442
|
+
if File.exist?(strings_path)
|
443
443
|
parsed = StringsParser.parse(strings_path)
|
444
|
-
result = parsed.find { |k, v| screenshot.path.upcase.include?
|
444
|
+
result = parsed.find { |k, v| screenshot.path.upcase.include?(k.upcase) }
|
445
445
|
return result.last if result
|
446
446
|
end
|
447
447
|
|
@@ -451,7 +451,7 @@ module Frameit
|
|
451
451
|
|
452
452
|
if type == :title and !result
|
453
453
|
# title is mandatory
|
454
|
-
UI.user_error!
|
454
|
+
UI.user_error!("Could not get title for screenshot #{screenshot.path}. Please provide one in your Framefile.json")
|
455
455
|
end
|
456
456
|
|
457
457
|
return result
|
@@ -467,7 +467,7 @@ module Frameit
|
|
467
467
|
fonts.each do |font|
|
468
468
|
if font['supported']
|
469
469
|
font['supported'].each do |language|
|
470
|
-
if screenshot.path.include?
|
470
|
+
if screenshot.path.include?(language)
|
471
471
|
return font["font"]
|
472
472
|
end
|
473
473
|
end
|
@@ -52,18 +52,18 @@ module Frameit
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def print_disclaimer
|
55
|
-
UI.header
|
56
|
-
UI.important
|
57
|
-
UI.message
|
58
|
-
UI.message
|
59
|
-
UI.message
|
60
|
-
UI.message
|
61
|
-
UI.message
|
62
|
-
UI.message
|
63
|
-
UI.message
|
64
|
-
UI.message
|
65
|
-
UI.message
|
66
|
-
UI.message
|
55
|
+
UI.header("Device frames disclaimer")
|
56
|
+
UI.important("All used device frames are available via Facebook Design: http://facebook.design/devices")
|
57
|
+
UI.message("----------------------------------------")
|
58
|
+
UI.message("While Facebook has redrawn and shares these assets for the benefit")
|
59
|
+
UI.message("of the design community, Facebook does not own any of the underlying")
|
60
|
+
UI.message("product or user interface designs.")
|
61
|
+
UI.message("By accessing these assets, you agree to obtain all necessary permissions")
|
62
|
+
UI.message("from the underlying rights holders and/or adhere to any applicable brand")
|
63
|
+
UI.message("use guidelines before using them.")
|
64
|
+
UI.message("Facebook disclaims all express or implied warranties with respect to these assets, including")
|
65
|
+
UI.message("non-infringement of intellectual property rights.")
|
66
|
+
UI.message("----------------------------------------")
|
67
67
|
end
|
68
68
|
|
69
69
|
private
|
@@ -13,8 +13,8 @@ module Frameit
|
|
13
13
|
self.top_space_above_device = offset['titleHeight'] # needed for centering the title
|
14
14
|
|
15
15
|
@image = background.composite(image, "png") do |c|
|
16
|
-
c.compose
|
17
|
-
c.geometry
|
16
|
+
c.compose("Over")
|
17
|
+
c.geometry(offset['offset'])
|
18
18
|
end
|
19
19
|
|
20
20
|
return image
|
@@ -30,7 +30,7 @@ module Frameit
|
|
30
30
|
optional: true,
|
31
31
|
verify_block: proc do |value|
|
32
32
|
available = ['iPhone_6_Plus', 'iPhone_5s', 'iPhone_4', 'iPad_mini', 'Mac']
|
33
|
-
unless available.include?
|
33
|
+
unless available.include?(value)
|
34
34
|
UI.user_error!("Invalid device type '#{value}'. Available values: #{available}")
|
35
35
|
end
|
36
36
|
end),
|
@@ -26,11 +26,11 @@ module Frameit
|
|
26
26
|
|
27
27
|
if screenshots.count > 0
|
28
28
|
screenshots.each do |full_path|
|
29
|
-
next if full_path.include?
|
30
|
-
next if full_path.include?
|
31
|
-
next if full_path.include?
|
29
|
+
next if full_path.include?("_framed.png")
|
30
|
+
next if full_path.include?(".itmsp/") # a package file, we don't want to modify that
|
31
|
+
next if full_path.include?("device_frames/") # these are the device frames the user is using
|
32
32
|
device = full_path.rpartition('/').last.partition('-').first # extract device name
|
33
|
-
if device.downcase.include?
|
33
|
+
if device.downcase.include?("watch")
|
34
34
|
UI.error("Apple Watch screenshots are not framed: '#{full_path}'")
|
35
35
|
next # we don't care about watches right now
|
36
36
|
end
|
@@ -41,12 +41,12 @@ module Frameit
|
|
41
41
|
screenshot = Screenshot.new(full_path, color)
|
42
42
|
screenshot.frame!
|
43
43
|
rescue => ex
|
44
|
-
UI.error
|
45
|
-
UI.error
|
44
|
+
UI.error(ex.to_s)
|
45
|
+
UI.error("Backtrace:\n\t#{ex.backtrace.join("\n\t")}") if FastlaneCore::Globals.verbose?
|
46
46
|
end
|
47
47
|
end
|
48
48
|
else
|
49
|
-
UI.error
|
49
|
+
UI.error("Could not find screenshots in current directory: '#{File.expand_path(path)}'")
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
@@ -16,7 +16,7 @@ module Frameit
|
|
16
16
|
# path: Path to screenshot
|
17
17
|
# color: Color to use for the frame
|
18
18
|
def initialize(path, color)
|
19
|
-
UI.user_error!("Couldn't find file at path '#{path}'") unless File.exist?
|
19
|
+
UI.user_error!("Couldn't find file at path '#{path}'") unless File.exist?(path)
|
20
20
|
@color = color
|
21
21
|
@path = path
|
22
22
|
@size = FastImage.size(path)
|
@@ -26,7 +26,7 @@ module Frameit
|
|
26
26
|
|
27
27
|
# Device name for a given screen size. Used to use the correct template
|
28
28
|
def device_name
|
29
|
-
# rubocop:disable
|
29
|
+
# rubocop:disable Require/MissingRequireStatement
|
30
30
|
sizes = Deliver::AppScreenshot::ScreenSize
|
31
31
|
case @screen_size
|
32
32
|
when sizes::IOS_58
|
@@ -46,9 +46,9 @@ module Frameit
|
|
46
46
|
when sizes::MAC
|
47
47
|
return 'MacBook'
|
48
48
|
else
|
49
|
-
UI.error
|
49
|
+
UI.error("Unknown device type for size #{@screen_size} for path '#{path}'")
|
50
50
|
end
|
51
|
-
# rubocop:enable
|
51
|
+
# rubocop:enable Require/MissingRequireStatement
|
52
52
|
end
|
53
53
|
|
54
54
|
def color
|
@@ -89,7 +89,7 @@ module Frameit
|
|
89
89
|
valid = [:landscape_left, :landscape_right, :portrait, nil]
|
90
90
|
UI.user_error("orientation_block must return #{valid[0..-2].join(', ')} or nil") unless valid.include?(orientation)
|
91
91
|
|
92
|
-
puts
|
92
|
+
puts("Forced orientation: #{orientation}")
|
93
93
|
end
|
94
94
|
|
95
95
|
return orientation unless orientation.nil?
|
@@ -4,8 +4,8 @@ module Frameit
|
|
4
4
|
# This class will parse the .string files
|
5
5
|
class StringsParser
|
6
6
|
def self.parse(path)
|
7
|
-
UI.user_error!
|
8
|
-
UI.user_error!
|
7
|
+
UI.user_error!("Couldn't find strings file at path '#{path}'") unless File.exist?(path)
|
8
|
+
UI.user_error!("Must be .strings file, only got '#{path}'") unless path.end_with?(".strings")
|
9
9
|
|
10
10
|
result = {}
|
11
11
|
|
@@ -15,20 +15,20 @@ module Frameit
|
|
15
15
|
content.split("\n").each_with_index do |line, index|
|
16
16
|
begin
|
17
17
|
# We don't care about comments and empty lines
|
18
|
-
if line.start_with?
|
18
|
+
if line.start_with?('"')
|
19
19
|
key = line.match(/"(.*)" \= /)[1]
|
20
20
|
value = line.match(/ \= "(.*)"/)[1]
|
21
21
|
|
22
22
|
result[key] = value
|
23
23
|
end
|
24
24
|
rescue => ex
|
25
|
-
UI.error
|
26
|
-
UI.verbose
|
25
|
+
UI.error("Error parsing #{path} line #{index + 1}: '#{line}'")
|
26
|
+
UI.verbose("#{ex.message}\n#{ex.backtrace.join('\n')}")
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
if result.empty?
|
31
|
-
UI.error
|
31
|
+
UI.error("Empty parsing result for #{path}. Please make sure the file is valid and UTF16 Big-endian encoded")
|
32
32
|
end
|
33
33
|
|
34
34
|
result
|
@@ -15,12 +15,12 @@ module Frameit
|
|
15
15
|
|
16
16
|
templates = Dir["#{FrameDownloader.templates_path}/#{filename}.{png,jpg}"] # ~/.frameit folder
|
17
17
|
|
18
|
-
UI.verbose
|
18
|
+
UI.verbose("Looking for #{filename} and found #{templates.count} template(s)")
|
19
19
|
|
20
20
|
if templates.count == 0
|
21
21
|
if screenshot.screen_size == Deliver::AppScreenshot::ScreenSize::IOS_35
|
22
|
-
UI.important
|
23
|
-
UI.error
|
22
|
+
UI.important("Unfortunately 3.5\" device frames were discontinued. Skipping screen '#{screenshot.path}'")
|
23
|
+
UI.error("Looked for: '#{filename}.png'")
|
24
24
|
elsif screenshot.color == Frameit::Color::ROSE_GOLD || screenshot.color == Frameit::Color::GOLD
|
25
25
|
# Unfortunately not every device type is available in rose gold or gold
|
26
26
|
# This is why we can't have nice things #yatusabes
|
@@ -51,12 +51,12 @@ module Gym
|
|
51
51
|
c.action do |args, options|
|
52
52
|
containing = FastlaneCore::Helper.fastlane_enabled_folder_path
|
53
53
|
path = File.join(containing, Gym.gymfile_name)
|
54
|
-
UI.user_error!
|
54
|
+
UI.user_error!("Gymfile already exists") if File.exist?(path)
|
55
55
|
|
56
56
|
is_swift_fastfile = args.include?("swift")
|
57
57
|
if is_swift_fastfile
|
58
58
|
path = File.join(containing, Gym.gymfile_name + ".swift")
|
59
|
-
UI.user_error!
|
59
|
+
UI.user_error!("Gymfile.swift already exists") if File.exist?(path)
|
60
60
|
end
|
61
61
|
|
62
62
|
if is_swift_fastfile
|
@@ -66,11 +66,11 @@ module Gym
|
|
66
66
|
end
|
67
67
|
|
68
68
|
File.write(path, template)
|
69
|
-
UI.success
|
69
|
+
UI.success("Successfully created '#{path}'. Open the file using a code editor.")
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
default_command
|
73
|
+
default_command(:build)
|
74
74
|
|
75
75
|
run!
|
76
76
|
end
|
@@ -126,7 +126,7 @@ module Gym
|
|
126
126
|
if config[:configuration]
|
127
127
|
# Verify the configuration is available
|
128
128
|
unless configurations.include?(config[:configuration])
|
129
|
-
UI.error
|
129
|
+
UI.error("Couldn't find specified configuration '#{config[:configuration]}'.")
|
130
130
|
config[:configuration] = nil
|
131
131
|
end
|
132
132
|
end
|
@@ -13,46 +13,46 @@ module Gym
|
|
13
13
|
# The order of the handling below is important
|
14
14
|
case output
|
15
15
|
when /Your build settings specify a provisioning profile with the UUID/
|
16
|
-
print
|
17
|
-
print
|
18
|
-
print
|
19
|
-
print
|
16
|
+
print("Invalid code signing settings")
|
17
|
+
print("Your project defines a provisioning profile which doesn't exist on your local machine")
|
18
|
+
print("You can use sigh (https://docs.fastlane.tools/actions/sigh/) to download and install the provisioning profile")
|
19
|
+
print("Follow this guide: https://docs.fastlane.tools/codesigning/GettingStarted/")
|
20
20
|
when /Provisioning profile does not match bundle identifier/
|
21
|
-
print
|
22
|
-
print
|
23
|
-
print
|
24
|
-
print
|
25
|
-
print
|
21
|
+
print("Invalid code signing settings")
|
22
|
+
print("Your project defines a provisioning profile that doesn't match the bundle identifier of your app")
|
23
|
+
print("Make sure you use the correct provisioning profile for this app")
|
24
|
+
print("Take a look at the ouptput above for more information")
|
25
|
+
print("You can follow this guide: https://docs.fastlane.tools/codesigning/GettingStarted/")
|
26
26
|
when /provisioning profiles matching the bundle identifier .(.*)./ # the . around the (.*) are for the strange "
|
27
|
-
print
|
28
|
-
print
|
29
|
-
print
|
30
|
-
print
|
27
|
+
print("You don't have the provisioning profile for '#{$1}' installed on the local machine")
|
28
|
+
print("Make sure you have the profile on this computer and it's properly installed")
|
29
|
+
print("You can use sigh (https://docs.fastlane.tools/actions/sigh/) to download and install the provisioning profile")
|
30
|
+
print("Follow this guide: https://docs.fastlane.tools/codesigning/GettingStarted/")
|
31
31
|
when /matching the bundle identifier .(.*). were found/ # the . around the (.*) are for the strange "
|
32
|
-
print
|
33
|
-
print
|
34
|
-
print
|
35
|
-
print
|
32
|
+
print("You don't have a provisioning profile for the bundle identifier '#{$1}' installed on the local machine")
|
33
|
+
print("Make sure you have the profile on this computer and it's properly installed")
|
34
|
+
print("You can use sigh (https://docs.fastlane.tools/actions/sigh/) to download and install the provisioning profile")
|
35
|
+
print("Follow this guide: https://docs.fastlane.tools/codesigning/GettingStarted/")
|
36
36
|
|
37
37
|
# Insert more code signing specific errors here
|
38
38
|
when /code signing is required/
|
39
|
-
print
|
40
|
-
print
|
41
|
-
print
|
42
|
-
print
|
39
|
+
print("Your project settings define invalid code signing settings")
|
40
|
+
print("To generate an ipa file you need to enable code signing for your project")
|
41
|
+
print("Additionally make sure you have a code signing identity set")
|
42
|
+
print("Follow this guide: https://docs.fastlane.tools/codesigning/GettingStarted/")
|
43
43
|
when /US\-ASCII/
|
44
|
-
print
|
45
|
-
print
|
46
|
-
print
|
47
|
-
print
|
48
|
-
print
|
49
|
-
print
|
50
|
-
print
|
51
|
-
print
|
52
|
-
print
|
53
|
-
print
|
54
|
-
print
|
55
|
-
print
|
44
|
+
print("Your shell environment is not correctly configured")
|
45
|
+
print("Instead of UTF-8 your shell uses US-ASCII")
|
46
|
+
print("Please add the following to your '~/.bashrc':")
|
47
|
+
print("")
|
48
|
+
print(" export LANG=en_US.UTF-8")
|
49
|
+
print(" export LANGUAGE=en_US.UTF-8")
|
50
|
+
print(" export LC_ALL=en_US.UTF-8")
|
51
|
+
print("")
|
52
|
+
print("You'll have to restart your shell session after updating the file.")
|
53
|
+
print("If you are using zshell or another shell, make sure to edit the correct bash file.")
|
54
|
+
print("For more information visit this stackoverflow answer:")
|
55
|
+
print("https://stackoverflow.com/a/17031697/445598")
|
56
56
|
end
|
57
57
|
print_xcode_path_instructions
|
58
58
|
print_xcode_version
|
@@ -63,11 +63,11 @@ module Gym
|
|
63
63
|
# This error is rather common and should be below the other (a little noisy) output
|
64
64
|
case output
|
65
65
|
when /Code signing is required for product/
|
66
|
-
print
|
67
|
-
print
|
66
|
+
print("Seems like Xcode is not happy with the code signing setup")
|
67
|
+
print("Please make sure to check out the raw `xcodebuild` output")
|
68
68
|
UI.important(Gym::BuildCommandGenerator.xcodebuild_log_path)
|
69
|
-
print
|
70
|
-
print
|
69
|
+
print("The very bottom of the file will tell you the raw Xcode error message")
|
70
|
+
print("indicating on why the code signing step failed")
|
71
71
|
end
|
72
72
|
|
73
73
|
UI.build_failure!("Error building the application - see the log above", error_info: output)
|
@@ -78,31 +78,31 @@ module Gym
|
|
78
78
|
def handle_package_error(output)
|
79
79
|
case output
|
80
80
|
when /single\-bundle/
|
81
|
-
print
|
82
|
-
print
|
81
|
+
print("Your project does not contain a single–bundle application or contains multiple products")
|
82
|
+
print("Please read the documentation provided by Apple: https://developer.apple.com/library/ios/technotes/tn2215/_index.html")
|
83
83
|
when /no signing identity matches '(.*)'/
|
84
|
-
print
|
85
|
-
print
|
86
|
-
print
|
87
|
-
print
|
88
|
-
print
|
84
|
+
print("Could not find code signing identity '#{$1}'")
|
85
|
+
print("Make sure the name of the code signing identity is correct")
|
86
|
+
print("and it matches a locally installed code signing identity")
|
87
|
+
print("You can pass the name of the code signing identity using the")
|
88
|
+
print("`codesigning_identity` option")
|
89
89
|
when /no provisioning profile matches '(.*)'/
|
90
|
-
print
|
91
|
-
print
|
92
|
-
print
|
90
|
+
print("Could not find provisioning profile with the name '#{$1}'")
|
91
|
+
print("Make sure the name of the provisioning profile is correct")
|
92
|
+
print("and it matches a locally installed profile")
|
93
93
|
when /mismatch between specified provisioning profile and signing identity/
|
94
|
-
print
|
95
|
-
print
|
96
|
-
print
|
97
|
-
print
|
94
|
+
print("Mismatch between provisioning profile and code signing identity")
|
95
|
+
print("This means, the specified provisioning profile was not created using")
|
96
|
+
print("the specified certificate.")
|
97
|
+
print("Run cert and sigh before gym to make sure to have all signing resources ready")
|
98
98
|
when /requires a provisioning profile/
|
99
|
-
print
|
100
|
-
print
|
101
|
-
print
|
99
|
+
print("No provisioning profile provided")
|
100
|
+
print("Make sure to pass a valid provisioning for each required target")
|
101
|
+
print("Check out the docs on how to fix this: https://docs.fastlane.tools/actions/gym/#export-options")
|
102
102
|
# insert more specific code signing errors here
|
103
103
|
when /Codesign check fails/
|
104
|
-
print
|
105
|
-
print
|
104
|
+
print("A general code signing error occurred. Make sure you passed a valid")
|
105
|
+
print("provisioning profile and code signing identity.")
|
106
106
|
end
|
107
107
|
print_xcode_version
|
108
108
|
print_full_log_path
|
@@ -113,17 +113,17 @@ module Gym
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def handle_empty_archive
|
116
|
-
print
|
117
|
-
print
|
118
|
-
print
|
119
|
-
print
|
120
|
-
print
|
121
|
-
print
|
122
|
-
print
|
123
|
-
print
|
124
|
-
print
|
125
|
-
print
|
126
|
-
print
|
116
|
+
print("The generated archive is invalid, this can have various reasons:")
|
117
|
+
print("Usually it's caused by the `Skip Install` option in Xcode, set it to `NO`")
|
118
|
+
print("For more information visit https://developer.apple.com/library/ios/technotes/tn2215/_index.html")
|
119
|
+
print("Also, make sure to have a valid code signing identity and provisioning profile installed")
|
120
|
+
print("Follow this guide to setup code signing https://docs.fastlane.tools/codesigning/GettingStarted/")
|
121
|
+
print("If your intention was only to export an ipa be sure to provide a valid archive at the archive path.")
|
122
|
+
print("This error might also happen if your workspace/project file is not in the root directory of your project.")
|
123
|
+
print("To workaround that issue, you can wrap your calls to gym with")
|
124
|
+
print("`Dir.chdir('../path/to/dir/containing/proj') do`")
|
125
|
+
print("For an example you can check out")
|
126
|
+
print("https://github.com/artsy/emission-nebula/commit/44fe51a7fea8f7d52f0f77d6c3084827fe5dd59e")
|
127
127
|
UI.build_failure!("Archive invalid")
|
128
128
|
end
|
129
129
|
|
@@ -131,7 +131,7 @@ module Gym
|
|
131
131
|
|
132
132
|
# Just to make things easier
|
133
133
|
def print(text)
|
134
|
-
UI.error
|
134
|
+
UI.error(text)
|
135
135
|
end
|
136
136
|
|
137
137
|
def print_full_log_path
|
@@ -196,25 +196,25 @@ module Gym
|
|
196
196
|
|
197
197
|
xcode_installations_in_default_path = Dir[File.join(default_xcode_path, "Xcode*.app")]
|
198
198
|
return unless xcode_installations_in_default_path.count > 1
|
199
|
-
UI.message
|
200
|
-
UI.important
|
201
|
-
UI.important
|
202
|
-
UI.important
|
203
|
-
UI.important
|
204
|
-
UI.important
|
205
|
-
UI.message
|
199
|
+
UI.message("")
|
200
|
+
UI.important("Maybe the error shown is caused by using the wrong version of Xcode")
|
201
|
+
UI.important("Found multiple versions of Xcode in '#{default_xcode_path}'")
|
202
|
+
UI.important("Make sure you selected the right version for your project")
|
203
|
+
UI.important("This build process was executed using '#{xcode_path}'")
|
204
|
+
UI.important("If you want to update your Xcode path, either")
|
205
|
+
UI.message("")
|
206
206
|
|
207
|
-
UI.message
|
208
|
-
UI.command_output
|
209
|
-
UI.message
|
207
|
+
UI.message("- Specify the Xcode version in your Fastfile")
|
208
|
+
UI.command_output("xcversion(version: \"8.1\") # Selects Xcode 8.1.0")
|
209
|
+
UI.message("")
|
210
210
|
|
211
|
-
UI.message
|
212
|
-
UI.command_output
|
213
|
-
UI.message
|
211
|
+
UI.message("- Specify an absolute path to your Xcode installation in your Fastfile")
|
212
|
+
UI.command_output("xcode_select \"/Applications/Xcode8.app\"")
|
213
|
+
UI.message("")
|
214
214
|
|
215
|
-
UI.message
|
216
|
-
UI.command_output
|
217
|
-
UI.message
|
215
|
+
UI.message("- Manually update the path using")
|
216
|
+
UI.command_output("sudo xcode-select -s /Applications/Xcode.app")
|
217
|
+
UI.message("")
|
218
218
|
end
|
219
219
|
|
220
220
|
def print_environment_information
|