fastlane_hotfix 2.165.0 → 2.187.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +106 -86
- data/cert/lib/cert/commands_generator.rb +2 -1
- data/cert/lib/cert/options.rb +6 -5
- data/cert/lib/cert/runner.rb +8 -8
- data/deliver/lib/assets/summary.html.erb +10 -10
- data/deliver/lib/deliver/app_screenshot.rb +17 -11
- data/deliver/lib/deliver/app_screenshot_validator.rb +108 -0
- data/deliver/lib/deliver/commands_generator.rb +4 -3
- data/deliver/lib/deliver/detect_values.rb +5 -3
- data/deliver/lib/deliver/download_screenshots.rb +2 -3
- data/deliver/lib/deliver/html_generator.rb +2 -2
- data/deliver/lib/deliver/languages.rb +1 -1
- data/deliver/lib/deliver/loader.rb +123 -21
- data/deliver/lib/deliver/module.rb +6 -0
- data/deliver/lib/deliver/options.rb +41 -55
- data/deliver/lib/deliver/runner.rb +19 -14
- data/deliver/lib/deliver/setup.rb +9 -5
- data/deliver/lib/deliver/submit_for_review.rb +4 -4
- data/deliver/lib/deliver/upload_metadata.rb +32 -21
- data/deliver/lib/deliver/upload_price_tier.rb +1 -1
- data/deliver/lib/deliver/upload_screenshots.rb +14 -76
- data/fastlane/lib/fastlane/actions/actions_helper.rb +3 -3
- data/fastlane/lib/fastlane/actions/adb.rb +2 -5
- data/fastlane/lib/fastlane/actions/adb_devices.rb +0 -1
- data/fastlane/lib/fastlane/actions/add_git_tag.rb +22 -6
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +17 -17
- data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +21 -7
- data/fastlane/lib/fastlane/actions/appaloosa.rb +7 -2
- data/fastlane/lib/fastlane/actions/appetize.rb +13 -8
- data/fastlane/lib/fastlane/actions/appetize_viewing_url_generator.rb +0 -11
- data/fastlane/lib/fastlane/actions/appium.rb +40 -65
- data/fastlane/lib/fastlane/actions/appledoc.rb +46 -46
- data/fastlane/lib/fastlane/actions/apteligent.rb +3 -2
- data/fastlane/lib/fastlane/actions/artifactory.rb +41 -9
- data/fastlane/lib/fastlane/actions/automatic_code_signing.rb +7 -13
- data/fastlane/lib/fastlane/actions/backup_file.rb +1 -1
- data/fastlane/lib/fastlane/actions/backup_xcarchive.rb +3 -3
- data/fastlane/lib/fastlane/actions/badge.rb +9 -13
- data/fastlane/lib/fastlane/actions/build_and_upload_to_appetize.rb +11 -5
- data/fastlane/lib/fastlane/actions/build_app.rb +7 -1
- data/fastlane/lib/fastlane/actions/bundle_install.rb +8 -10
- data/fastlane/lib/fastlane/actions/carthage.rb +22 -14
- data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +8 -17
- data/fastlane/lib/fastlane/actions/chatwork.rb +3 -2
- data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +9 -1
- data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +0 -1
- data/fastlane/lib/fastlane/actions/clean_cocoapods_cache.rb +0 -1
- data/fastlane/lib/fastlane/actions/clipboard.rb +3 -6
- data/fastlane/lib/fastlane/actions/cloc.rb +9 -13
- data/fastlane/lib/fastlane/actions/cocoapods.rb +23 -15
- data/fastlane/lib/fastlane/actions/commit_github_file.rb +12 -4
- data/fastlane/lib/fastlane/actions/commit_version_bump.rb +6 -7
- data/fastlane/lib/fastlane/actions/copy_artifacts.rb +3 -4
- data/fastlane/lib/fastlane/actions/crashlytics.rb +7 -11
- data/fastlane/lib/fastlane/actions/create_app_on_managed_play_store.rb +70 -76
- data/fastlane/lib/fastlane/actions/create_keychain.rb +13 -11
- data/fastlane/lib/fastlane/actions/create_pull_request.rb +15 -9
- data/fastlane/lib/fastlane/actions/create_xcframework.rb +123 -0
- data/fastlane/lib/fastlane/actions/danger.rb +13 -12
- data/fastlane/lib/fastlane/actions/deploygate.rb +1 -2
- data/fastlane/lib/fastlane/actions/docs/build_app.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +27 -28
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +7 -3
- data/fastlane/lib/fastlane/actions/docs/create_app_online.md +171 -67
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +20 -3
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +9 -3
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +39 -16
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +15 -5
- data/fastlane/lib/fastlane/actions/download_app_privacy_details_from_app_store.rb +142 -0
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +8 -20
- data/fastlane/lib/fastlane/actions/dsym_zip.rb +1 -1
- data/fastlane/lib/fastlane/actions/ensure_env_vars.rb +2 -6
- data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +0 -1
- data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +3 -4
- data/fastlane/lib/fastlane/actions/ensure_no_debug_code.rb +3 -5
- data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +1 -2
- data/fastlane/lib/fastlane/actions/environment_variable.rb +13 -21
- data/fastlane/lib/fastlane/actions/erb.rb +2 -5
- data/fastlane/lib/fastlane/actions/get_build_number_repository.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_certificates.rb +5 -1
- data/fastlane/lib/fastlane/actions/get_github_release.rb +11 -1
- data/fastlane/lib/fastlane/actions/get_ipa_info_plist_value.rb +0 -1
- data/fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb +32 -35
- data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +9 -1
- data/fastlane/lib/fastlane/actions/get_push_certificate.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_version_number.rb +17 -10
- data/fastlane/lib/fastlane/actions/git_add.rb +5 -10
- data/fastlane/lib/fastlane/actions/git_branch.rb +4 -10
- data/fastlane/lib/fastlane/actions/git_commit.rb +12 -10
- data/fastlane/lib/fastlane/actions/git_pull.rb +4 -10
- data/fastlane/lib/fastlane/actions/git_remote_branch.rb +57 -0
- data/fastlane/lib/fastlane/actions/git_submodule_update.rb +16 -8
- data/fastlane/lib/fastlane/actions/git_tag_exists.rb +4 -0
- data/fastlane/lib/fastlane/actions/github_api.rb +17 -8
- data/fastlane/lib/fastlane/actions/gradle.rb +12 -20
- data/fastlane/lib/fastlane/actions/hg_commit_version_bump.rb +1 -1
- data/fastlane/lib/fastlane/actions/hg_push.rb +1 -1
- data/fastlane/lib/fastlane/actions/hipchat.rb +6 -6
- data/fastlane/lib/fastlane/actions/hockey.rb +5 -12
- data/fastlane/lib/fastlane/actions/ifttt.rb +3 -6
- data/fastlane/lib/fastlane/actions/import_from_git.rb +7 -9
- data/fastlane/lib/fastlane/actions/increment_build_number.rb +8 -2
- data/fastlane/lib/fastlane/actions/install_on_device.rb +3 -6
- data/fastlane/lib/fastlane/actions/install_provisioning_profile.rb +4 -0
- data/fastlane/lib/fastlane/actions/installr.rb +22 -25
- data/fastlane/lib/fastlane/actions/ipa.rb +2 -2
- data/fastlane/lib/fastlane/actions/jazzy.rb +11 -8
- data/fastlane/lib/fastlane/actions/jira.rb +61 -14
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +6 -6
- data/fastlane/lib/fastlane/actions/lcov.rb +0 -4
- data/fastlane/lib/fastlane/actions/mailgun.rb +21 -27
- data/fastlane/lib/fastlane/actions/make_changelog_from_jenkins.rb +1 -1
- data/fastlane/lib/fastlane/actions/match_nuke.rb +59 -0
- data/fastlane/lib/fastlane/actions/modify_services.rb +59 -24
- data/fastlane/lib/fastlane/actions/nexus_upload.rb +3 -2
- data/fastlane/lib/fastlane/actions/notarize.rb +98 -54
- data/fastlane/lib/fastlane/actions/notification.rb +1 -1
- data/fastlane/lib/fastlane/actions/number_of_commits.rb +1 -1
- data/fastlane/lib/fastlane/actions/oclint.rb +15 -14
- data/fastlane/lib/fastlane/actions/onesignal.rb +13 -3
- data/fastlane/lib/fastlane/actions/pod_push.rb +9 -2
- data/fastlane/lib/fastlane/actions/podio_item.rb +0 -7
- data/fastlane/lib/fastlane/actions/prompt.rb +3 -4
- data/fastlane/lib/fastlane/actions/push_git_tags.rb +1 -1
- data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +14 -3
- data/fastlane/lib/fastlane/actions/puts.rb +1 -2
- data/fastlane/lib/fastlane/actions/register_device.rb +10 -13
- data/fastlane/lib/fastlane/actions/register_devices.rb +11 -14
- data/fastlane/lib/fastlane/actions/reset_git_repo.rb +5 -8
- data/fastlane/lib/fastlane/actions/reset_simulator_contents.rb +0 -2
- data/fastlane/lib/fastlane/actions/resign.rb +2 -9
- data/fastlane/lib/fastlane/actions/restore_file.rb +1 -1
- data/fastlane/lib/fastlane/actions/rsync.rb +3 -6
- data/fastlane/lib/fastlane/actions/run_tests.rb +1 -1
- data/fastlane/lib/fastlane/actions/s3.rb +1 -1
- data/fastlane/lib/fastlane/actions/say.rb +2 -3
- data/fastlane/lib/fastlane/actions/scp.rb +4 -10
- data/fastlane/lib/fastlane/actions/set_build_number_repository.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_changelog.rb +10 -13
- data/fastlane/lib/fastlane/actions/set_github_release.rb +23 -16
- data/fastlane/lib/fastlane/actions/set_info_plist_value.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_pod_key.rb +3 -4
- data/fastlane/lib/fastlane/actions/setup_ci.rb +1 -2
- data/fastlane/lib/fastlane/actions/setup_circle_ci.rb +1 -1
- data/fastlane/lib/fastlane/actions/setup_jenkins.rb +7 -12
- data/fastlane/lib/fastlane/actions/setup_travis.rb +1 -1
- data/fastlane/lib/fastlane/actions/sh.rb +2 -4
- data/fastlane/lib/fastlane/actions/slack.rb +164 -145
- data/fastlane/lib/fastlane/actions/slather.rb +5 -21
- data/fastlane/lib/fastlane/actions/sonar.rb +12 -19
- data/fastlane/lib/fastlane/actions/sourcedocs.rb +128 -0
- data/fastlane/lib/fastlane/actions/spaceship_logs.rb +1 -1
- data/fastlane/lib/fastlane/actions/splunkmint.rb +2 -2
- data/fastlane/lib/fastlane/actions/spm.rb +8 -2
- data/fastlane/lib/fastlane/actions/ssh.rb +5 -10
- data/fastlane/lib/fastlane/actions/swiftlint.rb +21 -19
- data/fastlane/lib/fastlane/actions/sync_code_signing.rb +6 -1
- data/fastlane/lib/fastlane/actions/testfairy.rb +0 -1
- data/fastlane/lib/fastlane/actions/tryouts.rb +2 -3
- data/fastlane/lib/fastlane/actions/twitter.rb +0 -5
- data/fastlane/lib/fastlane/actions/unlock_keychain.rb +3 -3
- data/fastlane/lib/fastlane/actions/update_app_group_identifiers.rb +1 -4
- data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +8 -15
- data/fastlane/lib/fastlane/actions/update_fastlane.rb +31 -10
- data/fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb +1 -4
- data/fastlane/lib/fastlane/actions/update_info_plist.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_keychain_access_groups.rb +1 -4
- data/fastlane/lib/fastlane/actions/update_plist.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +3 -4
- data/fastlane/lib/fastlane/actions/update_urban_airship_configuration.rb +0 -1
- data/fastlane/lib/fastlane/actions/update_url_schemes.rb +15 -26
- data/fastlane/lib/fastlane/actions/upload_app_privacy_details_to_app_store.rb +290 -0
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +8 -7
- data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +3 -10
- data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +8 -4
- data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +7 -2
- data/fastlane/lib/fastlane/actions/validate_play_store_json_key.rb +40 -44
- data/fastlane/lib/fastlane/actions/version_get_podspec.rb +1 -2
- data/fastlane/lib/fastlane/actions/xcode_install.rb +8 -5
- data/fastlane/lib/fastlane/actions/xcode_server_get_assets.rb +3 -3
- data/fastlane/lib/fastlane/actions/xcodebuild.rb +5 -5
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +6 -3
- data/fastlane/lib/fastlane/commands_generator.rb +2 -1
- data/fastlane/lib/fastlane/documentation/actions_list.rb +2 -2
- data/fastlane/lib/fastlane/documentation/docs_generator.rb +1 -1
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +1 -1
- data/fastlane/lib/fastlane/environment_printer.rb +1 -0
- data/fastlane/lib/fastlane/erb_template_helper.rb +7 -1
- data/fastlane/lib/fastlane/fast_file.rb +19 -7
- data/fastlane/lib/fastlane/fastlane_require.rb +7 -1
- data/fastlane/lib/fastlane/features.rb +1 -1
- data/fastlane/lib/fastlane/helper/adb_helper.rb +1 -1
- data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +4 -4
- data/fastlane/lib/fastlane/helper/gem_helper.rb +2 -2
- data/fastlane/lib/fastlane/helper/git_helper.rb +34 -5
- data/fastlane/lib/fastlane/lane_manager.rb +3 -2
- data/fastlane/lib/fastlane/notification/slack.rb +56 -0
- data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +1 -2
- data/fastlane/lib/fastlane/plugins/plugin_info.rb +2 -2
- data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +1 -2
- data/fastlane/lib/fastlane/plugins/plugin_manager.rb +2 -3
- data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +7 -6
- data/fastlane/lib/fastlane/plugins/template/.circleci/config.yml +1 -1
- data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +1 -1
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +31 -35
- data/fastlane/lib/fastlane/plugins/template/spec/spec_helper.rb.erb +1 -1
- data/fastlane/lib/fastlane/setup/setup.rb +23 -10
- data/fastlane/lib/fastlane/setup/setup_ios.rb +3 -3
- data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +3 -0
- data/fastlane/lib/fastlane/swift_fastlane_function.rb +44 -16
- data/fastlane/lib/fastlane/swift_runner_upgrader.rb +2 -0
- data/fastlane/lib/fastlane/version.rb +2 -2
- data/fastlane/swift/Actions.swift +1 -1
- data/fastlane/swift/Appfile.swift +1 -1
- data/fastlane/swift/ArgumentProcessor.swift +1 -1
- data/fastlane/swift/ControlCommand.swift +1 -1
- data/fastlane/swift/Deliverfile.swift +2 -2
- data/fastlane/swift/DeliverfileProtocol.swift +23 -23
- data/fastlane/swift/Fastfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +7965 -4213
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +4 -0
- data/fastlane/swift/Gymfile.swift +2 -2
- data/fastlane/swift/GymfileProtocol.swift +15 -3
- data/fastlane/swift/LaneFileProtocol.swift +12 -6
- data/fastlane/swift/MainProcess.swift +3 -1
- data/fastlane/swift/Matchfile.swift +2 -2
- data/fastlane/swift/MatchfileProtocol.swift +4 -4
- data/fastlane/swift/OptionalConfigValue.swift +101 -0
- data/fastlane/swift/Plugins.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +2 -2
- data/fastlane/swift/PrecheckfileProtocol.swift +8 -4
- data/fastlane/swift/RubyCommand.swift +2 -2
- data/fastlane/swift/RubyCommandable.swift +1 -1
- data/fastlane/swift/Runner.swift +3 -3
- data/fastlane/swift/RunnerArgument.swift +1 -1
- data/fastlane/swift/Scanfile.swift +2 -2
- data/fastlane/swift/ScanfileProtocol.swift +34 -2
- data/fastlane/swift/Screengrabfile.swift +2 -2
- data/fastlane/swift/ScreengrabfileProtocol.swift +5 -5
- data/fastlane/swift/Snapshotfile.swift +2 -2
- data/fastlane/swift/SnapshotfileProtocol.swift +19 -3
- data/fastlane/swift/SocketClient.swift +4 -3
- data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
- data/fastlane/swift/SocketResponse.swift +5 -3
- data/fastlane/swift/formatting/Brewfile.lock.json +24 -16
- data/fastlane/swift/main.swift +1 -1
- data/fastlane/swift/upgrade_manifest.json +1 -1
- data/fastlane_core/lib/fastlane_core.rb +22 -20
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +89 -12
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +12 -7
- data/fastlane_core/lib/fastlane_core/clipboard.rb +20 -0
- data/fastlane_core/lib/fastlane_core/command_executor.rb +3 -9
- data/fastlane_core/lib/fastlane_core/configuration/commander_generator.rb +6 -1
- data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +41 -3
- data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +14 -8
- data/fastlane_core/lib/fastlane_core/device_manager.rb +1 -1
- data/fastlane_core/lib/fastlane_core/helper.rb +78 -14
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +41 -16
- data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +3 -2
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +20 -15
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +1 -1
- data/fastlane_core/lib/fastlane_core/languages.rb +2 -2
- data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +3 -2
- data/fastlane_core/lib/fastlane_core/print_table.rb +5 -3
- data/fastlane_core/lib/fastlane_core/project.rb +48 -28
- data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +3 -1
- data/{deliver/lib/deliver → fastlane_core/lib/fastlane_core}/queue_worker.rb +4 -4
- data/fastlane_core/lib/fastlane_core/swag.rb +1 -1
- data/fastlane_core/lib/fastlane_core/ui/disable_colors.rb +8 -0
- data/fastlane_core/lib/fastlane_core/ui/help.erb +35 -0
- data/fastlane_core/lib/fastlane_core/ui/help_formatter.rb +16 -0
- data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +16 -2
- data/fastlane_core/lib/fastlane_core/ui/interface.rb +1 -1
- data/fastlane_core/lib/fastlane_core/update_checker/update_checker.rb +2 -2
- data/frameit/lib/frameit/commands_generator.rb +2 -1
- data/frameit/lib/frameit/config_parser.rb +2 -2
- data/frameit/lib/frameit/device_types.rb +7 -1
- data/frameit/lib/frameit/frame_downloader.rb +2 -1
- data/gym/lib/gym/code_signing_mapping.rb +3 -3
- data/gym/lib/gym/commands_generator.rb +2 -1
- data/gym/lib/gym/error_handler.rb +8 -0
- data/gym/lib/gym/generators/build_command_generator.rb +3 -0
- data/gym/lib/gym/generators/package_command_generator.rb +4 -0
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +21 -15
- data/gym/lib/gym/options.rb +19 -3
- data/gym/lib/gym/runner.rb +15 -4
- data/match/lib/match/change_password.rb +3 -3
- data/match/lib/match/commands_generator.rb +2 -1
- data/match/lib/match/encryption/interface.rb +1 -1
- data/match/lib/match/encryption/openssl.rb +5 -3
- data/match/lib/match/importer.rb +9 -10
- data/match/lib/match/migrate.rb +2 -3
- data/match/lib/match/module.rb +2 -1
- data/match/lib/match/nuke.rb +19 -15
- data/match/lib/match/options.rb +4 -3
- data/match/lib/match/runner.rb +3 -4
- data/match/lib/match/spaceship_ensure.rb +3 -0
- data/match/lib/match/storage/git_storage.rb +14 -10
- data/match/lib/match/storage/google_cloud_storage.rb +2 -2
- data/match/lib/match/storage/s3_storage.rb +2 -2
- data/pem/lib/pem/commands_generator.rb +2 -1
- data/pilot/lib/pilot.rb +0 -1
- data/pilot/lib/pilot/build_manager.rb +41 -15
- data/pilot/lib/pilot/commands_generator.rb +2 -1
- data/pilot/lib/pilot/manager.rb +11 -8
- data/pilot/lib/pilot/options.rb +18 -9
- data/pilot/lib/pilot/tester_exporter.rb +0 -1
- data/pilot/lib/pilot/tester_manager.rb +0 -1
- data/precheck/lib/precheck/commands_generator.rb +2 -1
- data/precheck/lib/precheck/options.rb +9 -3
- data/precheck/lib/precheck/rule_processor.rb +1 -1
- data/precheck/lib/precheck/runner.rb +14 -9
- data/produce/lib/produce/commands_generator.rb +101 -28
- data/produce/lib/produce/developer_center.rb +42 -4
- data/produce/lib/produce/options.rb +1 -1
- data/produce/lib/produce/service.rb +270 -179
- data/scan/lib/scan/commands_generator.rb +2 -1
- data/scan/lib/scan/detect_values.rb +7 -2
- data/scan/lib/scan/module.rb +4 -0
- data/scan/lib/scan/options.rb +46 -1
- data/scan/lib/scan/runner.rb +88 -3
- data/scan/lib/scan/slack_poster.rb +4 -1
- data/scan/lib/scan/test_command_generator.rb +13 -8
- data/screengrab/lib/screengrab/android_environment.rb +5 -53
- data/screengrab/lib/screengrab/commands_generator.rb +2 -1
- data/screengrab/lib/screengrab/dependency_checker.rb +0 -20
- data/screengrab/lib/screengrab/options.rb +5 -2
- data/screengrab/lib/screengrab/runner.rb +111 -108
- data/sigh/lib/assets/resign.sh +81 -61
- data/sigh/lib/sigh/commands_generator.rb +2 -1
- data/sigh/lib/sigh/download_all.rb +4 -8
- data/sigh/lib/sigh/options.rb +3 -2
- data/sigh/lib/sigh/runner.rb +9 -9
- data/snapshot/lib/assets/SnapfileTemplate +3 -2
- data/snapshot/lib/assets/SnapfileTemplate.swift +2 -1
- data/snapshot/lib/assets/SnapshotHelper.swift +20 -12
- data/snapshot/lib/snapshot/commands_generator.rb +3 -1
- data/snapshot/lib/snapshot/options.rb +22 -2
- data/snapshot/lib/snapshot/reports_generator.rb +7 -1
- data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +1 -1
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +10 -5
- data/snapshot/lib/snapshot/test_command_generator.rb +18 -4
- data/snapshot/lib/snapshot/test_command_generator_base.rb +3 -1
- data/snapshot/lib/snapshot/test_command_generator_xcode_8.rb +1 -1
- data/snapshot/lib/snapshot/update.rb +1 -1
- data/spaceship/README.md +4 -14
- data/spaceship/lib/spaceship/base.rb +2 -2
- data/spaceship/lib/spaceship/client.rb +44 -16
- data/spaceship/lib/spaceship/commands_generator.rb +4 -2
- data/spaceship/lib/spaceship/connect_api.rb +6 -0
- data/spaceship/lib/spaceship/connect_api/api_client.rb +67 -9
- data/spaceship/lib/spaceship/connect_api/model.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +39 -6
- data/spaceship/lib/spaceship/connect_api/models/app.rb +95 -55
- data/spaceship/lib/spaceship/connect_api/models/app_data_usage.rb +59 -0
- data/spaceship/lib/spaceship/connect_api/models/app_data_usage_category.rb +65 -0
- data/spaceship/lib/spaceship/connect_api/models/app_data_usage_data_protection.rb +27 -0
- data/spaceship/lib/spaceship/connect_api/models/app_data_usage_grouping.rb +18 -0
- data/spaceship/lib/spaceship/connect_api/models/app_data_usage_purposes.rb +37 -0
- data/spaceship/lib/spaceship/connect_api/models/app_data_usages_publish_state.rb +36 -0
- data/spaceship/lib/spaceship/connect_api/models/app_info.rb +26 -10
- data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +8 -4
- data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +15 -11
- data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +18 -9
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +10 -8
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +20 -11
- data/spaceship/lib/spaceship/connect_api/models/app_store_review_attachment.rb +7 -5
- data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +6 -4
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +62 -38
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +27 -14
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_submission.rb +3 -2
- data/spaceship/lib/spaceship/connect_api/models/beta_app_review_submission.rb +3 -2
- data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +6 -4
- data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +29 -3
- data/spaceship/lib/spaceship/connect_api/models/beta_tester.rb +15 -9
- data/spaceship/lib/spaceship/connect_api/models/build.rb +34 -17
- data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/build_delivery.rb +3 -2
- data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +41 -6
- data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +86 -21
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +12 -8
- data/spaceship/lib/spaceship/connect_api/models/device.rb +36 -4
- data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +6 -4
- data/spaceship/lib/spaceship/connect_api/models/profile.rb +18 -8
- data/spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb +3 -2
- data/spaceship/lib/spaceship/connect_api/models/sandbox_tester.rb +9 -6
- data/spaceship/lib/spaceship/connect_api/models/territory.rb +3 -2
- data/spaceship/lib/spaceship/connect_api/models/user.rb +6 -4
- data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +22 -6
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +99 -2
- data/spaceship/lib/spaceship/connect_api/response.rb +3 -1
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +50 -0
- data/spaceship/lib/spaceship/connect_api/token.rb +15 -3
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +122 -2
- data/spaceship/lib/spaceship/errors.rb +19 -0
- data/spaceship/lib/spaceship/playground.rb +2 -2
- data/spaceship/lib/spaceship/spaceauth_runner.rb +38 -15
- data/spaceship/lib/spaceship/tunes/iap_detail.rb +1 -1
- data/spaceship/lib/spaceship/tunes/members.rb +1 -1
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +4 -4
- data/spaceship/lib/spaceship/two_step_or_factor_client.rb +59 -33
- data/spaceship/lib/spaceship/ui.rb +2 -2
- data/spaceship/lib/spaceship/upgrade_2fa_later_client.rb +91 -0
- data/supply/lib/supply.rb +1 -1
- data/supply/lib/supply/client.rb +5 -3
- data/supply/lib/supply/commands_generator.rb +2 -1
- data/supply/lib/supply/options.rb +3 -3
- data/supply/lib/supply/uploader.rb +6 -4
- metadata +124 -92
- data/pilot/lib/pilot/features.rb +0 -0
- data/pilot/lib/pilot/tester_util.rb +0 -0
@@ -22,7 +22,7 @@ module FastlaneCore
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def self.installed_identies(in_keychain: nil)
|
25
|
-
|
25
|
+
install_wwdr_certificates unless wwdr_certificates_installed?
|
26
26
|
|
27
27
|
available = list_available_identities(in_keychain: in_keychain)
|
28
28
|
# Match for this text against word boundaries to avoid edge cases around multiples of 10 identities!
|
@@ -81,16 +81,21 @@ module FastlaneCore
|
|
81
81
|
`#{commands.join(' ')}`
|
82
82
|
end
|
83
83
|
|
84
|
-
def self.
|
84
|
+
def self.wwdr_certificates_installed?
|
85
85
|
certificate_name = "Apple Worldwide Developer Relations Certification Authority"
|
86
86
|
keychain = wwdr_keychain
|
87
|
-
response = Helper.backticks("security find-certificate -c '#{certificate_name}' #{keychain.shellescape}", print: FastlaneCore::Globals.verbose?)
|
88
|
-
|
87
|
+
response = Helper.backticks("security find-certificate -a -c '#{certificate_name}' #{keychain.shellescape}", print: FastlaneCore::Globals.verbose?)
|
88
|
+
certs = response.split("keychain: \"#{keychain}\"").drop(1)
|
89
|
+
certs.count == 2
|
89
90
|
end
|
90
91
|
|
91
|
-
def self.
|
92
|
-
|
93
|
-
|
92
|
+
def self.install_wwdr_certificates
|
93
|
+
install_wwdr_certificate('https://developer.apple.com/certificationauthority/AppleWWDRCA.cer')
|
94
|
+
install_wwdr_certificate('https://www.apple.com/certificateauthority/AppleWWDRCAG3.cer')
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.install_wwdr_certificate(url)
|
98
|
+
file = Tempfile.new(File.basename(url))
|
94
99
|
filename = file.path
|
95
100
|
keychain = wwdr_keychain
|
96
101
|
keychain = "-k #{keychain.shellescape}" unless keychain.empty?
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'fastlane_core'
|
2
|
+
require 'open3'
|
3
|
+
|
4
|
+
module FastlaneCore
|
5
|
+
class Clipboard
|
6
|
+
def self.copy(content: nil)
|
7
|
+
return UI.crash!("'pbcopy' or 'pbpaste' command not found.") unless is_supported?
|
8
|
+
Open3.popen3('pbcopy') { |input, _, _| input << content }
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.paste
|
12
|
+
return UI.crash!("'pbcopy' or 'pbpaste' command not found.") unless is_supported?
|
13
|
+
return `pbpaste`
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.is_supported?
|
17
|
+
return `which pbcopy`.length > 0 && `which pbpaste`.length > 0
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -13,16 +13,10 @@ module FastlaneCore
|
|
13
13
|
#
|
14
14
|
# Derived from https://stackoverflow.com/a/5471032/3005
|
15
15
|
def which(cmd)
|
16
|
-
# PATHEXT contains the list of file extensions that Windows considers executable, semicolon separated.
|
17
|
-
# e.g. ".COM;.EXE;.BAT;.CMD"
|
18
|
-
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : []
|
19
|
-
exts << '' # Always have an empty string (= no file extension)
|
20
|
-
|
21
16
|
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
17
|
+
cmd_path = File.join(path, cmd)
|
18
|
+
executable_path = Helper.get_executable_path(cmd_path)
|
19
|
+
return executable_path if Helper.executable?(executable_path)
|
26
20
|
end
|
27
21
|
|
28
22
|
return nil
|
@@ -30,6 +30,11 @@ module FastlaneCore
|
|
30
30
|
type = option.is_string ? String : nil
|
31
31
|
end
|
32
32
|
|
33
|
+
# OptionParser doesn't like symbol but a symbol and string can be easily cast with `to_sym` and `to_s`
|
34
|
+
if type == Symbol
|
35
|
+
type = String
|
36
|
+
end
|
37
|
+
|
33
38
|
# Boolean is a fastlane thing, it's either TrueClass, or FalseClass, but we won't know
|
34
39
|
# that until runtime, so nil is the best we get
|
35
40
|
if type == Fastlane::Boolean
|
@@ -67,7 +72,7 @@ module FastlaneCore
|
|
67
72
|
long_switch = "--#{option.key} #{value_appendix}"
|
68
73
|
|
69
74
|
description = option.description
|
70
|
-
description += " (#{option.
|
75
|
+
description += " (#{option.env_names.join(', ')})" unless option.env_names.empty?
|
71
76
|
|
72
77
|
# We compact this array here to remove the short_switch variable if it is nil.
|
73
78
|
# Passing a nil value to global_option has been shown to create problems with
|
@@ -12,6 +12,9 @@ module FastlaneCore
|
|
12
12
|
# [String] the name of the environment variable, which is only used if no other values were found
|
13
13
|
attr_accessor :env_name
|
14
14
|
|
15
|
+
# [Array] the names of the environment variables, which is only used if no other values were found
|
16
|
+
attr_accessor :env_names
|
17
|
+
|
15
18
|
# [String] A description shown to the user
|
16
19
|
attr_accessor :description
|
17
20
|
|
@@ -71,6 +74,7 @@ module FastlaneCore
|
|
71
74
|
# Creates a new option
|
72
75
|
# @param key (Symbol) the key which is used as command parameters or key in the fastlane tools
|
73
76
|
# @param env_name (String) the name of the environment variable, which is only used if no other values were found
|
77
|
+
# @param env_names (Array) the names of the environment variables, which is only used if no other values were found
|
74
78
|
# @param description (String) A description shown to the user
|
75
79
|
# @param short_option (String) A string of length 1 which is used for the command parameters (e.g. -f)
|
76
80
|
# @param default_value the value which is used if there was no given values and no environment values
|
@@ -88,8 +92,10 @@ module FastlaneCore
|
|
88
92
|
# @param sensitive (Boolean) Set if the variable is sensitive, such as a password or API token, to prevent echoing when prompted for the parameter
|
89
93
|
# @param display_in_shell (Boolean) Set if the variable can be used from shell
|
90
94
|
# rubocop:disable Metrics/ParameterLists
|
95
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
91
96
|
def initialize(key: nil,
|
92
97
|
env_name: nil,
|
98
|
+
env_names: nil,
|
93
99
|
description: nil,
|
94
100
|
short_option: nil,
|
95
101
|
default_value: nil,
|
@@ -109,6 +115,11 @@ module FastlaneCore
|
|
109
115
|
UI.user_error!("key must be a symbol") unless key.kind_of?(Symbol)
|
110
116
|
UI.user_error!("env_name must be a String") unless (env_name || '').kind_of?(String)
|
111
117
|
|
118
|
+
UI.user_error!("env_names must be an Array") unless (env_names || []).kind_of?(Array)
|
119
|
+
(env_names || []).each do |name|
|
120
|
+
UI.user_error!("env_names must only contain String") unless (name || '').kind_of?(String)
|
121
|
+
end
|
122
|
+
|
112
123
|
if short_option
|
113
124
|
UI.user_error!("short_option for key :#{key} must of type String") unless short_option.kind_of?(String)
|
114
125
|
UI.user_error!("short_option for key :#{key} must be a string of length 1") unless short_option.delete('-').length == 1
|
@@ -138,6 +149,7 @@ module FastlaneCore
|
|
138
149
|
|
139
150
|
@key = key
|
140
151
|
@env_name = env_name
|
152
|
+
@env_names = [env_name].compact + (env_names || [])
|
141
153
|
@description = description
|
142
154
|
@short_option = short_option
|
143
155
|
@default_value = default_value
|
@@ -160,6 +172,7 @@ module FastlaneCore
|
|
160
172
|
|
161
173
|
update_code_gen_default_value_if_able!
|
162
174
|
end
|
175
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
163
176
|
# rubocop:enable Metrics/ParameterLists
|
164
177
|
|
165
178
|
# if code_gen_default_value is nil, use the default value if it isn't a `code_gen_sensitive` value
|
@@ -203,6 +216,17 @@ module FastlaneCore
|
|
203
216
|
end
|
204
217
|
end
|
205
218
|
|
219
|
+
def ensure_array_type_passes_validation(value)
|
220
|
+
if @skip_type_validation
|
221
|
+
return
|
222
|
+
end
|
223
|
+
|
224
|
+
# Arrays can be an either be an array or string that gets split by comma in auto_convert_type
|
225
|
+
if !value.kind_of?(Array) && !value.kind_of?(String)
|
226
|
+
UI.user_error!("'#{self.key}' value must be either `Array` or `comma-separated String`! Found #{value.class} instead.")
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
206
230
|
# Make sure, the value is valid (based on the verify block)
|
207
231
|
# Raises an exception if the value is invalid
|
208
232
|
def valid?(value)
|
@@ -212,6 +236,8 @@ module FastlaneCore
|
|
212
236
|
# Verify that value is the type that we're expecting, if we are expecting a type
|
213
237
|
if data_type == Fastlane::Boolean
|
214
238
|
ensure_boolean_type_passes_validation(value)
|
239
|
+
elsif data_type == Array
|
240
|
+
ensure_array_type_passes_validation(value)
|
215
241
|
else
|
216
242
|
ensure_generic_type_passes_validation(value)
|
217
243
|
end
|
@@ -228,6 +254,16 @@ module FastlaneCore
|
|
228
254
|
true
|
229
255
|
end
|
230
256
|
|
257
|
+
def fetch_env_value
|
258
|
+
env_names.each do |name|
|
259
|
+
next if ENV[name].nil?
|
260
|
+
# verify! before using (see https://github.com/fastlane/fastlane/issues/14449)
|
261
|
+
return ENV[name].dup if verify!(auto_convert_value(ENV[name]))
|
262
|
+
end
|
263
|
+
|
264
|
+
return nil
|
265
|
+
end
|
266
|
+
|
231
267
|
# rubocop:disable Metrics/PerceivedComplexity
|
232
268
|
# Returns an updated value type (if necessary)
|
233
269
|
def auto_convert_value(value)
|
@@ -239,6 +275,8 @@ module FastlaneCore
|
|
239
275
|
return value.to_i if value.to_i.to_s == value.to_s
|
240
276
|
elsif data_type == Float
|
241
277
|
return value.to_f if value.to_f.to_s == value.to_s
|
278
|
+
elsif data_type == Symbol
|
279
|
+
return value.to_sym if value.to_sym.to_s == value.to_s
|
242
280
|
elsif allow_shell_conversion
|
243
281
|
return value.shelljoin if value.kind_of?(Array)
|
244
282
|
return value.map { |k, v| "#{k.to_s.shellescape}=#{v.shellescape}" }.join(' ') if value.kind_of?(Hash)
|
@@ -249,11 +287,11 @@ module FastlaneCore
|
|
249
287
|
rescue JSON::ParserError
|
250
288
|
end
|
251
289
|
elsif data_type != String
|
252
|
-
# Special treatment if the user specified true, false or YES, NO
|
290
|
+
# Special treatment if the user specified true, false, on, off or YES, NO
|
253
291
|
# There is no boolean type, so we just do it here
|
254
|
-
if %w(YES
|
292
|
+
if %w(yes YES true TRUE on ON).include?(value)
|
255
293
|
return true
|
256
|
-
elsif %w(NO
|
294
|
+
elsif %w(no NO false FALSE off OFF).include?(value)
|
257
295
|
return false
|
258
296
|
end
|
259
297
|
end
|
@@ -208,19 +208,19 @@ module FastlaneCore
|
|
208
208
|
#####################################################
|
209
209
|
|
210
210
|
# Returns the value for a certain key. fastlane_core tries to fetch the value from different sources
|
211
|
-
# if 'ask' is true and the value is not present, the user will be prompted to provide a value
|
211
|
+
# if 'ask' is true and the value is not present, the user will be prompted to provide a value if optional
|
212
|
+
# if 'force_ask' is true, the option is not required to be optional to ask
|
212
213
|
# rubocop:disable Metrics/PerceivedComplexity
|
213
|
-
def fetch(key, ask: true)
|
214
|
-
UI.crash!("Key '#{key}' must be a symbol. Example
|
214
|
+
def fetch(key, ask: true, force_ask: false)
|
215
|
+
UI.crash!("Key '#{key}' must be a symbol. Example :#{key}") unless key.kind_of?(Symbol)
|
215
216
|
|
216
217
|
option = verify_options_key!(key)
|
217
218
|
|
218
219
|
# Same order as https://docs.fastlane.tools/advanced/#priorities-of-parameters-and-options
|
219
220
|
value = if @values.key?(key) && !@values[key].nil?
|
220
221
|
@values[key]
|
221
|
-
elsif
|
222
|
-
|
223
|
-
ENV[option.env_name].dup if option.verify!(option.auto_convert_value(ENV[option.env_name]))
|
222
|
+
elsif (env_value = option.fetch_env_value)
|
223
|
+
env_value
|
224
224
|
elsif self.config_file_options.key?(key)
|
225
225
|
self.config_file_options[key]
|
226
226
|
else
|
@@ -229,7 +229,7 @@ module FastlaneCore
|
|
229
229
|
|
230
230
|
value = option.auto_convert_value(value)
|
231
231
|
value = nil if value.nil? && !option.string? # by default boolean flags are false
|
232
|
-
return value unless value.nil? && !option.optional && ask
|
232
|
+
return value unless value.nil? && (!option.optional || force_ask) && ask
|
233
233
|
|
234
234
|
# fallback to asking
|
235
235
|
if Helper.test? || !UI.interactive?
|
@@ -243,11 +243,17 @@ module FastlaneCore
|
|
243
243
|
while value.nil?
|
244
244
|
UI.important("To not be asked about this value, you can specify it using '#{option.key}'") if ENV["FASTLANE_ONBOARDING_IN_PROCESS"].to_s.length == 0
|
245
245
|
value = option.sensitive ? UI.password("#{option.description}: ") : UI.input("#{option.description}: ")
|
246
|
+
|
247
|
+
# ConfigItem allows to specify a type for the item but UI.password and
|
248
|
+
# UI.input return String values. Try to convert the String input to
|
249
|
+
# the option's type before passing it along.
|
250
|
+
value = option.auto_convert_value(value)
|
251
|
+
|
246
252
|
# Also store this value to use it from now on
|
247
253
|
begin
|
248
254
|
set(key, value)
|
249
255
|
rescue => ex
|
250
|
-
|
256
|
+
UI.error(ex)
|
251
257
|
value = nil
|
252
258
|
end
|
253
259
|
end
|
@@ -118,7 +118,7 @@ module FastlaneCore
|
|
118
118
|
discover_devices(child_item, device_types, discovered_device_udids)
|
119
119
|
end
|
120
120
|
|
121
|
-
is_supported_device = device_types.any?
|
121
|
+
is_supported_device = device_types.any?(usb_item['_name'])
|
122
122
|
serial_num = usb_item['serial_num'] || ''
|
123
123
|
has_serial_number = serial_num.length == 40 || serial_num.length == 24
|
124
124
|
|
@@ -14,7 +14,7 @@ module FastlaneCore
|
|
14
14
|
|
15
15
|
def self.fastlane_enabled?
|
16
16
|
# This is called from the root context on the first start
|
17
|
-
|
17
|
+
!FastlaneCore::FastlaneFolder.path.nil?
|
18
18
|
end
|
19
19
|
|
20
20
|
# Checks if fastlane is enabled for this project and returns the folder where the configuration lives
|
@@ -74,8 +74,8 @@ module FastlaneCore
|
|
74
74
|
return true if self.is_circle_ci?
|
75
75
|
|
76
76
|
# Check for Jenkins, Travis CI, ... environment variables
|
77
|
-
['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CI', 'APPCENTER_BUILD_ID', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS', 'TF_BUILD', 'GITHUB_ACTION', 'GITHUB_ACTIONS', 'BITRISE_IO'].each do |current|
|
78
|
-
return true if
|
77
|
+
['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CI', 'APPCENTER_BUILD_ID', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS', 'TF_BUILD', 'GITHUB_ACTION', 'GITHUB_ACTIONS', 'BITRISE_IO', 'BUDDY'].each do |current|
|
78
|
+
return true if FastlaneCore::Env.truthy?(current)
|
79
79
|
end
|
80
80
|
return false
|
81
81
|
end
|
@@ -107,7 +107,7 @@ module FastlaneCore
|
|
107
107
|
|
108
108
|
# Do we want to disable the colored output?
|
109
109
|
def self.colors_disabled?
|
110
|
-
FastlaneCore::Env.truthy?("FASTLANE_DISABLE_COLORS")
|
110
|
+
FastlaneCore::Env.truthy?("FASTLANE_DISABLE_COLORS") || ENV.key?("NO_COLOR")
|
111
111
|
end
|
112
112
|
|
113
113
|
# Does the user use the Mac stock terminal
|
@@ -167,11 +167,23 @@ module FastlaneCore
|
|
167
167
|
@xcode_version
|
168
168
|
end
|
169
169
|
|
170
|
-
# @return true if Xcode version is
|
170
|
+
# @return true if installed Xcode version is 'greater than or equal to' the input parameter version
|
171
171
|
def self.xcode_at_least?(version)
|
172
|
-
|
173
|
-
|
174
|
-
Gem::Version.new(
|
172
|
+
installed_xcode_version = xcode_version
|
173
|
+
UI.user_error!("Unable to locate Xcode. Please make sure to have Xcode installed on your machine") if installed_xcode_version.nil?
|
174
|
+
Gem::Version.new(installed_xcode_version) >= Gem::Version.new(version)
|
175
|
+
end
|
176
|
+
|
177
|
+
# Swift
|
178
|
+
#
|
179
|
+
|
180
|
+
# @return Swift version
|
181
|
+
def self.swift_version
|
182
|
+
if system("which swift > /dev/null 2>&1")
|
183
|
+
output = `swift --version`
|
184
|
+
return output.split("\n").first.match(/version ([0-9.]+)/).captures.first
|
185
|
+
end
|
186
|
+
return nil
|
175
187
|
end
|
176
188
|
|
177
189
|
# iTMSTransporter
|
@@ -203,9 +215,17 @@ module FastlaneCore
|
|
203
215
|
return File.join(self.itms_path, 'iTMSTransporter')
|
204
216
|
end
|
205
217
|
|
218
|
+
def self.user_defined_itms_path?
|
219
|
+
return FastlaneCore::Env.truthy?("FASTLANE_ITUNES_TRANSPORTER_PATH")
|
220
|
+
end
|
221
|
+
|
222
|
+
def self.user_defined_itms_path
|
223
|
+
return ENV["FASTLANE_ITUNES_TRANSPORTER_PATH"] if self.user_defined_itms_path?
|
224
|
+
end
|
225
|
+
|
206
226
|
# @return the full path to the iTMSTransporter executable
|
207
227
|
def self.itms_path
|
208
|
-
return
|
228
|
+
return self.user_defined_itms_path if FastlaneCore::Env.truthy?("FASTLANE_ITUNES_TRANSPORTER_PATH")
|
209
229
|
|
210
230
|
if self.mac?
|
211
231
|
# First check for manually install iTMSTransporter
|
@@ -360,8 +380,37 @@ module FastlaneCore
|
|
360
380
|
|
361
381
|
# checks if a given path is an executable file
|
362
382
|
def self.executable?(cmd_path)
|
363
|
-
|
364
|
-
|
383
|
+
if !cmd_path || File.directory?(cmd_path)
|
384
|
+
return false
|
385
|
+
end
|
386
|
+
|
387
|
+
return File.exist?(get_executable_path(cmd_path))
|
388
|
+
end
|
389
|
+
|
390
|
+
# returns the path of the executable with the correct extension on Windows
|
391
|
+
def self.get_executable_path(cmd_path)
|
392
|
+
cmd_path = localize_file_path(cmd_path)
|
393
|
+
|
394
|
+
if self.windows?
|
395
|
+
# PATHEXT contains the list of file extensions that Windows considers executable, semicolon separated.
|
396
|
+
# e.g. ".COM;.EXE;.BAT;.CMD"
|
397
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : []
|
398
|
+
|
399
|
+
# no executable files on Windows, so existing is enough there
|
400
|
+
# also check if command + ext is present
|
401
|
+
exts.each do |ext|
|
402
|
+
executable_path = "#{cmd_path}#{ext.downcase}"
|
403
|
+
return executable_path if File.exist?(executable_path)
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
return cmd_path
|
408
|
+
end
|
409
|
+
|
410
|
+
# returns the path with the platform-specific path separator (`/` on UNIX, `\` on Windows)
|
411
|
+
def self.localize_file_path(path)
|
412
|
+
# change `/` to `\` on Windows
|
413
|
+
return self.windows? ? path.gsub('/', '\\') : path
|
365
414
|
end
|
366
415
|
|
367
416
|
# checks if given file is a valid json file
|
@@ -417,20 +466,35 @@ module FastlaneCore
|
|
417
466
|
UI.current.log
|
418
467
|
end
|
419
468
|
|
420
|
-
def self.ask_password(message: "Passphrase: ", confirm: nil)
|
469
|
+
def self.ask_password(message: "Passphrase: ", confirm: nil, confirmation_message: "Type passphrase again: ")
|
421
470
|
raise "This code should only run in interactive mode" unless UI.interactive?
|
422
471
|
|
423
472
|
loop do
|
424
473
|
password = UI.password(message)
|
425
474
|
if confirm
|
426
|
-
password2 = UI.password(
|
475
|
+
password2 = UI.password(confirmation_message)
|
427
476
|
if password == password2
|
428
477
|
return password
|
429
478
|
end
|
430
479
|
else
|
431
480
|
return password
|
432
481
|
end
|
433
|
-
UI.error("
|
482
|
+
UI.error("Your entries do not match. Please try again")
|
483
|
+
end
|
484
|
+
end
|
485
|
+
|
486
|
+
# URI.open added by `require 'open-uri'` is not available in Ruby 2.4. This helper lets you open a URI
|
487
|
+
# by choosing appropriate interface to do so depending on Ruby version. This helper is subject to be removed
|
488
|
+
# when fastlane drops Ruby 2.4 support.
|
489
|
+
def self.open_uri(*rest, &block)
|
490
|
+
require 'open-uri'
|
491
|
+
|
492
|
+
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.5')
|
493
|
+
dup = rest.dup
|
494
|
+
uri = dup.shift
|
495
|
+
URI.parse(uri).open(*dup, &block)
|
496
|
+
else
|
497
|
+
URI.open(*rest, &block)
|
434
498
|
end
|
435
499
|
end
|
436
500
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'open3'
|
1
2
|
require 'zip'
|
2
3
|
|
3
4
|
require_relative 'core_ext/cfpropertylist'
|
@@ -37,27 +38,51 @@ module FastlaneCore
|
|
37
38
|
|
38
39
|
def self.fetch_info_plist_file(path)
|
39
40
|
UI.user_error!("Could not find file at path '#{path}'") unless File.exist?(path)
|
40
|
-
|
41
|
-
|
42
|
-
|
41
|
+
plist_data = self.fetch_info_plist_with_rubyzip(path)
|
42
|
+
if plist_data.nil?
|
43
|
+
# Xcode produces invalid zip files for IPAs larger than 4GB. RubyZip
|
44
|
+
# can't read them, but the unzip command is able to work around this.
|
45
|
+
plist_data = self.fetch_info_plist_with_unzip(path)
|
46
|
+
end
|
47
|
+
return nil if plist_data.nil?
|
43
48
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
end
|
49
|
+
# Creates a temporary directory with a unique name tagged with 'fastlane'
|
50
|
+
# The directory is deleted automatically at the end of the block
|
51
|
+
Dir.mktmpdir("fastlane") do |tmp|
|
52
|
+
# The XML file has to be properly unpacked first
|
53
|
+
tmp_path = File.join(tmp, "Info.plist")
|
54
|
+
File.open(tmp_path, 'wb') do |output|
|
55
|
+
output.write(plist_data)
|
56
|
+
end
|
57
|
+
result = CFPropertyList.native_types(CFPropertyList::List.new(file: tmp_path).value)
|
58
|
+
|
59
|
+
if result['CFBundleIdentifier'] || result['CFBundleVersion']
|
60
|
+
return result
|
57
61
|
end
|
58
62
|
end
|
59
63
|
|
60
64
|
return nil
|
61
65
|
end
|
66
|
+
|
67
|
+
def self.fetch_info_plist_with_rubyzip(path)
|
68
|
+
Zip::File.open(path, "rb") do |zipfile|
|
69
|
+
file = zipfile.glob('**/Payload/*.app/Info.plist').first
|
70
|
+
return nil unless file
|
71
|
+
zipfile.read(file)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.fetch_info_plist_with_unzip(path)
|
76
|
+
list, error, = Open3.capture3("unzip", "-Z", "-1", path)
|
77
|
+
UI.command_output(error) unless error.empty?
|
78
|
+
return nil if list.empty?
|
79
|
+
entry = list.chomp.split("\n").find do |e|
|
80
|
+
File.fnmatch("**/Payload/*.app/Info.plist", e, File::FNM_PATHNAME)
|
81
|
+
end
|
82
|
+
data, error, = Open3.capture3("unzip", "-p", path, entry)
|
83
|
+
UI.command_output(error) unless error.empty?
|
84
|
+
return nil if data.empty?
|
85
|
+
data
|
86
|
+
end
|
62
87
|
end
|
63
88
|
end
|