fastlane_hotfix 2.165.0
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 +7 -0
- data/.yardopts +1 -0
- data/LICENSE +21 -0
- data/README.md +208 -0
- data/bin/bin-proxy +19 -0
- data/bin/fastlane +23 -0
- data/cert/README.md +17 -0
- data/cert/lib/cert.rb +4 -0
- data/cert/lib/cert/commands_generator.rb +60 -0
- data/cert/lib/cert/module.rb +16 -0
- data/cert/lib/cert/options.rb +132 -0
- data/cert/lib/cert/runner.rb +239 -0
- data/credentials_manager/README.md +64 -0
- data/credentials_manager/lib/credentials_manager.rb +7 -0
- data/credentials_manager/lib/credentials_manager/account_manager.rb +157 -0
- data/credentials_manager/lib/credentials_manager/appfile_config.rb +196 -0
- data/credentials_manager/lib/credentials_manager/cli.rb +69 -0
- data/deliver/README.md +17 -0
- data/deliver/lib/assets/DeliverfileDefault +3 -0
- data/deliver/lib/assets/DeliverfileDefault.swift +13 -0
- data/deliver/lib/assets/ScreenshotsHelp +7 -0
- data/deliver/lib/assets/summary.html.erb +299 -0
- data/deliver/lib/deliver.rb +15 -0
- data/deliver/lib/deliver/app_screenshot.rb +354 -0
- data/deliver/lib/deliver/app_screenshot_iterator.rb +95 -0
- data/deliver/lib/deliver/commands_generator.rb +190 -0
- data/deliver/lib/deliver/detect_values.rb +102 -0
- data/deliver/lib/deliver/download_screenshots.rb +76 -0
- data/deliver/lib/deliver/generate_summary.rb +13 -0
- data/deliver/lib/deliver/html_generator.rb +78 -0
- data/deliver/lib/deliver/languages.rb +7 -0
- data/deliver/lib/deliver/loader.rb +55 -0
- data/deliver/lib/deliver/module.rb +18 -0
- data/deliver/lib/deliver/options.rb +465 -0
- data/deliver/lib/deliver/queue_worker.rb +49 -0
- data/deliver/lib/deliver/runner.rb +233 -0
- data/deliver/lib/deliver/setup.rb +199 -0
- data/deliver/lib/deliver/submit_for_review.rb +214 -0
- data/deliver/lib/deliver/upload_metadata.rb +688 -0
- data/deliver/lib/deliver/upload_price_tier.rb +40 -0
- data/deliver/lib/deliver/upload_screenshots.rb +333 -0
- data/fastlane/README.md +11 -0
- data/fastlane/lib/assets/ActionDetails.md.erb +106 -0
- data/fastlane/lib/assets/Actions.md.erb +43 -0
- data/fastlane/lib/assets/AppfileTemplate +6 -0
- data/fastlane/lib/assets/AppfileTemplate.swift +7 -0
- data/fastlane/lib/assets/AppfileTemplateAndroid +2 -0
- data/fastlane/lib/assets/DefaultFastfileTemplate +20 -0
- data/fastlane/lib/assets/DefaultFastfileTemplate.swift +13 -0
- data/fastlane/lib/assets/completions/completion.bash +23 -0
- data/fastlane/lib/assets/completions/completion.fish +39 -0
- data/fastlane/lib/assets/completions/completion.sh +12 -0
- data/fastlane/lib/assets/completions/completion.zsh +23 -0
- data/fastlane/lib/assets/custom_action_template.rb +82 -0
- data/fastlane/lib/assets/mailgun_html_template.erb +142 -0
- data/fastlane/lib/assets/report_template.xml.erb +15 -0
- data/fastlane/lib/assets/s3_html_template.erb +105 -0
- data/fastlane/lib/assets/s3_plist_template.erb +31 -0
- data/fastlane/lib/assets/s3_version_template.erb +4 -0
- data/fastlane/lib/fastlane.rb +53 -0
- data/fastlane/lib/fastlane/action.rb +198 -0
- data/fastlane/lib/fastlane/action_collector.rb +35 -0
- data/fastlane/lib/fastlane/actions/README.md +5 -0
- data/fastlane/lib/fastlane/actions/actions_helper.rb +185 -0
- data/fastlane/lib/fastlane/actions/adb.rb +78 -0
- data/fastlane/lib/fastlane/actions/adb_devices.rb +71 -0
- data/fastlane/lib/fastlane/actions/add_extra_platforms.rb +45 -0
- data/fastlane/lib/fastlane/actions/add_git_tag.rb +122 -0
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +249 -0
- data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +134 -0
- data/fastlane/lib/fastlane/actions/appaloosa.rb +266 -0
- data/fastlane/lib/fastlane/actions/appetize.rb +188 -0
- data/fastlane/lib/fastlane/actions/appetize_viewing_url_generator.rb +146 -0
- data/fastlane/lib/fastlane/actions/appium.rb +206 -0
- data/fastlane/lib/fastlane/actions/appledoc.rb +226 -0
- data/fastlane/lib/fastlane/actions/appstore.rb +14 -0
- data/fastlane/lib/fastlane/actions/apteligent.rb +105 -0
- data/fastlane/lib/fastlane/actions/artifactory.rb +157 -0
- data/fastlane/lib/fastlane/actions/automatic_code_signing.rb +226 -0
- data/fastlane/lib/fastlane/actions/backup_file.rb +41 -0
- data/fastlane/lib/fastlane/actions/backup_xcarchive.rb +135 -0
- data/fastlane/lib/fastlane/actions/badge.rb +155 -0
- data/fastlane/lib/fastlane/actions/build_and_upload_to_appetize.rb +107 -0
- data/fastlane/lib/fastlane/actions/build_android_app.rb +14 -0
- data/fastlane/lib/fastlane/actions/build_app.rb +165 -0
- data/fastlane/lib/fastlane/actions/build_ios_app.rb +47 -0
- data/fastlane/lib/fastlane/actions/build_mac_app.rb +46 -0
- data/fastlane/lib/fastlane/actions/bundle_install.rb +156 -0
- data/fastlane/lib/fastlane/actions/capture_android_screenshots.rb +63 -0
- data/fastlane/lib/fastlane/actions/capture_ios_screenshots.rb +61 -0
- data/fastlane/lib/fastlane/actions/capture_screenshots.rb +14 -0
- data/fastlane/lib/fastlane/actions/carthage.rb +230 -0
- data/fastlane/lib/fastlane/actions/cert.rb +14 -0
- data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +197 -0
- data/fastlane/lib/fastlane/actions/chatwork.rb +94 -0
- data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +54 -0
- data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +72 -0
- data/fastlane/lib/fastlane/actions/clean_cocoapods_cache.rb +52 -0
- data/fastlane/lib/fastlane/actions/clear_derived_data.rb +70 -0
- data/fastlane/lib/fastlane/actions/clipboard.rb +52 -0
- data/fastlane/lib/fastlane/actions/cloc.rb +89 -0
- data/fastlane/lib/fastlane/actions/cocoapods.rb +170 -0
- data/fastlane/lib/fastlane/actions/commit_github_file.rb +186 -0
- data/fastlane/lib/fastlane/actions/commit_version_bump.rb +301 -0
- data/fastlane/lib/fastlane/actions/copy_artifacts.rb +114 -0
- data/fastlane/lib/fastlane/actions/crashlytics.rb +211 -0
- data/fastlane/lib/fastlane/actions/create_app_on_managed_play_store.rb +174 -0
- data/fastlane/lib/fastlane/actions/create_app_online.rb +75 -0
- data/fastlane/lib/fastlane/actions/create_keychain.rb +177 -0
- data/fastlane/lib/fastlane/actions/create_pull_request.rb +265 -0
- data/fastlane/lib/fastlane/actions/danger.rb +131 -0
- data/fastlane/lib/fastlane/actions/debug.rb +32 -0
- data/fastlane/lib/fastlane/actions/default_platform.rb +47 -0
- data/fastlane/lib/fastlane/actions/delete_keychain.rb +68 -0
- data/fastlane/lib/fastlane/actions/deliver.rb +14 -0
- data/fastlane/lib/fastlane/actions/deploygate.rb +210 -0
- data/fastlane/lib/fastlane/actions/device_grid/README.md +157 -0
- data/fastlane/lib/fastlane/actions/docs/build_app.md +245 -0
- data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +333 -0
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +371 -0
- data/fastlane/lib/fastlane/actions/docs/check_app_store_metadata.md +103 -0
- data/fastlane/lib/fastlane/actions/docs/create_app_online.md +282 -0
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +349 -0
- data/fastlane/lib/fastlane/actions/docs/get_certificates.md +86 -0
- data/fastlane/lib/fastlane/actions/docs/get_provisioning_profile.md +223 -0
- data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +134 -0
- data/fastlane/lib/fastlane/actions/docs/run_tests.md +151 -0
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +573 -0
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +725 -0
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +203 -0
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +250 -0
- data/fastlane/lib/fastlane/actions/dotgpg_environment.rb +57 -0
- data/fastlane/lib/fastlane/actions/download.rb +76 -0
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +369 -0
- data/fastlane/lib/fastlane/actions/download_from_play_store.rb +61 -0
- data/fastlane/lib/fastlane/actions/dsym_zip.rb +93 -0
- data/fastlane/lib/fastlane/actions/echo.rb +14 -0
- data/fastlane/lib/fastlane/actions/ensure_bundle_exec.rb +59 -0
- data/fastlane/lib/fastlane/actions/ensure_env_vars.rb +58 -0
- data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +69 -0
- data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +92 -0
- data/fastlane/lib/fastlane/actions/ensure_no_debug_code.rb +135 -0
- data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +125 -0
- data/fastlane/lib/fastlane/actions/environment_variable.rb +77 -0
- data/fastlane/lib/fastlane/actions/erb.rb +96 -0
- data/fastlane/lib/fastlane/actions/fastlane_version.rb +15 -0
- data/fastlane/lib/fastlane/actions/flock.rb +82 -0
- data/fastlane/lib/fastlane/actions/frame_screenshots.rb +64 -0
- data/fastlane/lib/fastlane/actions/frameit.rb +14 -0
- data/fastlane/lib/fastlane/actions/gcovr.rb +163 -0
- data/fastlane/lib/fastlane/actions/get_build_number.rb +106 -0
- data/fastlane/lib/fastlane/actions/get_build_number_repository.rb +120 -0
- data/fastlane/lib/fastlane/actions/get_certificates.rb +77 -0
- data/fastlane/lib/fastlane/actions/get_github_release.rb +166 -0
- data/fastlane/lib/fastlane/actions/get_info_plist_value.rb +78 -0
- data/fastlane/lib/fastlane/actions/get_ipa_info_plist_value.rb +82 -0
- data/fastlane/lib/fastlane/actions/get_managed_play_store_publishing_rights.rb +120 -0
- data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +101 -0
- data/fastlane/lib/fastlane/actions/get_push_certificate.rb +87 -0
- data/fastlane/lib/fastlane/actions/get_version_number.rb +200 -0
- data/fastlane/lib/fastlane/actions/git_add.rb +93 -0
- data/fastlane/lib/fastlane/actions/git_branch.rb +61 -0
- data/fastlane/lib/fastlane/actions/git_commit.rb +80 -0
- data/fastlane/lib/fastlane/actions/git_pull.rb +64 -0
- data/fastlane/lib/fastlane/actions/git_submodule_update.rb +52 -0
- data/fastlane/lib/fastlane/actions/git_tag_exists.rb +74 -0
- data/fastlane/lib/fastlane/actions/github_api.rb +262 -0
- data/fastlane/lib/fastlane/actions/google_play_track_release_names.rb +74 -0
- data/fastlane/lib/fastlane/actions/google_play_track_version_codes.rb +77 -0
- data/fastlane/lib/fastlane/actions/gradle.rb +329 -0
- data/fastlane/lib/fastlane/actions/gym.rb +10 -0
- data/fastlane/lib/fastlane/actions/hg_add_tag.rb +48 -0
- data/fastlane/lib/fastlane/actions/hg_commit_version_bump.rb +183 -0
- data/fastlane/lib/fastlane/actions/hg_ensure_clean_status.rb +53 -0
- data/fastlane/lib/fastlane/actions/hg_push.rb +64 -0
- data/fastlane/lib/fastlane/actions/hipchat.rb +200 -0
- data/fastlane/lib/fastlane/actions/hockey.rb +406 -0
- data/fastlane/lib/fastlane/actions/ifttt.rb +96 -0
- data/fastlane/lib/fastlane/actions/import.rb +49 -0
- data/fastlane/lib/fastlane/actions/import_certificate.rb +77 -0
- data/fastlane/lib/fastlane/actions/import_from_git.rb +83 -0
- data/fastlane/lib/fastlane/actions/increment_build_number.rb +117 -0
- data/fastlane/lib/fastlane/actions/increment_version_number.rb +180 -0
- data/fastlane/lib/fastlane/actions/install_on_device.rb +95 -0
- data/fastlane/lib/fastlane/actions/install_provisioning_profile.rb +58 -0
- data/fastlane/lib/fastlane/actions/install_xcode_plugin.rb +91 -0
- data/fastlane/lib/fastlane/actions/installr.rb +132 -0
- data/fastlane/lib/fastlane/actions/ipa.rb +246 -0
- data/fastlane/lib/fastlane/actions/is_ci.rb +51 -0
- data/fastlane/lib/fastlane/actions/jazzy.rb +56 -0
- data/fastlane/lib/fastlane/actions/jira.rb +115 -0
- data/fastlane/lib/fastlane/actions/lane_context.rb +60 -0
- data/fastlane/lib/fastlane/actions/last_git_commit.rb +58 -0
- data/fastlane/lib/fastlane/actions/last_git_tag.rb +60 -0
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +155 -0
- data/fastlane/lib/fastlane/actions/lcov.rb +102 -0
- data/fastlane/lib/fastlane/actions/mailgun.rb +197 -0
- data/fastlane/lib/fastlane/actions/make_changelog_from_jenkins.rb +81 -0
- data/fastlane/lib/fastlane/actions/match.rb +14 -0
- data/fastlane/lib/fastlane/actions/min_fastlane_version.rb +57 -0
- data/fastlane/lib/fastlane/actions/modify_services.rb +173 -0
- data/fastlane/lib/fastlane/actions/nexus_upload.rb +230 -0
- data/fastlane/lib/fastlane/actions/notarize.rb +193 -0
- data/fastlane/lib/fastlane/actions/notification.rb +75 -0
- data/fastlane/lib/fastlane/actions/notify.rb +40 -0
- data/fastlane/lib/fastlane/actions/number_of_commits.rb +75 -0
- data/fastlane/lib/fastlane/actions/oclint.rb +269 -0
- data/fastlane/lib/fastlane/actions/onesignal.rb +186 -0
- data/fastlane/lib/fastlane/actions/opt_out_crash_reporting.rb +33 -0
- data/fastlane/lib/fastlane/actions/opt_out_usage.rb +40 -0
- data/fastlane/lib/fastlane/actions/pem.rb +14 -0
- data/fastlane/lib/fastlane/actions/pilot.rb +14 -0
- data/fastlane/lib/fastlane/actions/pod_lib_lint.rb +189 -0
- data/fastlane/lib/fastlane/actions/pod_push.rb +173 -0
- data/fastlane/lib/fastlane/actions/podio_item.rb +217 -0
- data/fastlane/lib/fastlane/actions/precheck.rb +14 -0
- data/fastlane/lib/fastlane/actions/println.rb +14 -0
- data/fastlane/lib/fastlane/actions/produce.rb +14 -0
- data/fastlane/lib/fastlane/actions/prompt.rb +119 -0
- data/fastlane/lib/fastlane/actions/push_git_tags.rb +76 -0
- data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +127 -0
- data/fastlane/lib/fastlane/actions/puts.rb +68 -0
- data/fastlane/lib/fastlane/actions/read_podspec.rb +90 -0
- data/fastlane/lib/fastlane/actions/recreate_schemes.rb +46 -0
- data/fastlane/lib/fastlane/actions/register_device.rb +151 -0
- data/fastlane/lib/fastlane/actions/register_devices.rb +214 -0
- data/fastlane/lib/fastlane/actions/reset_git_repo.rb +121 -0
- data/fastlane/lib/fastlane/actions/reset_simulator_contents.rb +92 -0
- data/fastlane/lib/fastlane/actions/resign.rb +132 -0
- data/fastlane/lib/fastlane/actions/restore_file.rb +44 -0
- data/fastlane/lib/fastlane/actions/rocket.rb +83 -0
- data/fastlane/lib/fastlane/actions/rsync.rb +74 -0
- data/fastlane/lib/fastlane/actions/ruby_version.rb +56 -0
- data/fastlane/lib/fastlane/actions/run_tests.rb +114 -0
- data/fastlane/lib/fastlane/actions/s3.rb +174 -0
- data/fastlane/lib/fastlane/actions/say.rb +56 -0
- data/fastlane/lib/fastlane/actions/scan.rb +14 -0
- data/fastlane/lib/fastlane/actions/scp.rb +114 -0
- data/fastlane/lib/fastlane/actions/screengrab.rb +14 -0
- data/fastlane/lib/fastlane/actions/set_build_number_repository.rb +76 -0
- data/fastlane/lib/fastlane/actions/set_changelog.rb +204 -0
- data/fastlane/lib/fastlane/actions/set_github_release.rb +274 -0
- data/fastlane/lib/fastlane/actions/set_info_plist_value.rb +92 -0
- data/fastlane/lib/fastlane/actions/set_pod_key.rb +78 -0
- data/fastlane/lib/fastlane/actions/setup_ci.rb +132 -0
- data/fastlane/lib/fastlane/actions/setup_circle_ci.rb +58 -0
- data/fastlane/lib/fastlane/actions/setup_jenkins.rb +202 -0
- data/fastlane/lib/fastlane/actions/setup_travis.rb +57 -0
- data/fastlane/lib/fastlane/actions/sh.rb +71 -0
- data/fastlane/lib/fastlane/actions/sigh.rb +14 -0
- data/fastlane/lib/fastlane/actions/skip_docs.rb +52 -0
- data/fastlane/lib/fastlane/actions/slack.rb +288 -0
- data/fastlane/lib/fastlane/actions/slather.rb +329 -0
- data/fastlane/lib/fastlane/actions/snapshot.rb +14 -0
- data/fastlane/lib/fastlane/actions/sonar.rb +177 -0
- data/fastlane/lib/fastlane/actions/spaceship_logs.rb +135 -0
- data/fastlane/lib/fastlane/actions/spaceship_stats.rb +73 -0
- data/fastlane/lib/fastlane/actions/splunkmint.rb +156 -0
- data/fastlane/lib/fastlane/actions/spm.rb +138 -0
- data/fastlane/lib/fastlane/actions/ssh.rb +162 -0
- data/fastlane/lib/fastlane/actions/supply.rb +14 -0
- data/fastlane/lib/fastlane/actions/swiftlint.rb +240 -0
- data/fastlane/lib/fastlane/actions/sync_code_signing.rb +109 -0
- data/fastlane/lib/fastlane/actions/team_id.rb +42 -0
- data/fastlane/lib/fastlane/actions/team_name.rb +42 -0
- data/fastlane/lib/fastlane/actions/testfairy.rb +285 -0
- data/fastlane/lib/fastlane/actions/testflight.rb +14 -0
- data/fastlane/lib/fastlane/actions/tryouts.rb +149 -0
- data/fastlane/lib/fastlane/actions/twitter.rb +89 -0
- data/fastlane/lib/fastlane/actions/typetalk.rb +93 -0
- data/fastlane/lib/fastlane/actions/unlock_keychain.rb +132 -0
- data/fastlane/lib/fastlane/actions/update_app_group_identifiers.rb +91 -0
- data/fastlane/lib/fastlane/actions/update_app_identifier.rb +124 -0
- data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +203 -0
- data/fastlane/lib/fastlane/actions/update_fastlane.rb +137 -0
- data/fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb +99 -0
- data/fastlane/lib/fastlane/actions/update_info_plist.rb +143 -0
- data/fastlane/lib/fastlane/actions/update_keychain_access_groups.rb +94 -0
- data/fastlane/lib/fastlane/actions/update_plist.rb +115 -0
- data/fastlane/lib/fastlane/actions/update_project_code_signing.rb +76 -0
- data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +173 -0
- data/fastlane/lib/fastlane/actions/update_project_team.rb +95 -0
- data/fastlane/lib/fastlane/actions/update_urban_airship_configuration.rb +91 -0
- data/fastlane/lib/fastlane/actions/update_url_schemes.rb +123 -0
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +231 -0
- data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +165 -0
- data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +67 -0
- data/fastlane/lib/fastlane/actions/upload_to_play_store.rb +80 -0
- data/fastlane/lib/fastlane/actions/upload_to_play_store_internal_app_sharing.rb +78 -0
- data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +119 -0
- data/fastlane/lib/fastlane/actions/validate_play_store_json_key.rb +104 -0
- data/fastlane/lib/fastlane/actions/verify_build.rb +199 -0
- data/fastlane/lib/fastlane/actions/verify_pod_keys.rb +67 -0
- data/fastlane/lib/fastlane/actions/verify_xcode.rb +159 -0
- data/fastlane/lib/fastlane/actions/version_bump_podspec.rb +105 -0
- data/fastlane/lib/fastlane/actions/version_get_podspec.rb +71 -0
- data/fastlane/lib/fastlane/actions/xcode_install.rb +105 -0
- data/fastlane/lib/fastlane/actions/xcode_select.rb +68 -0
- data/fastlane/lib/fastlane/actions/xcode_server_get_assets.rb +312 -0
- data/fastlane/lib/fastlane/actions/xcodebuild.rb +641 -0
- data/fastlane/lib/fastlane/actions/xcov.rb +66 -0
- data/fastlane/lib/fastlane/actions/xctool.rb +55 -0
- data/fastlane/lib/fastlane/actions/xcversion.rb +55 -0
- data/fastlane/lib/fastlane/actions/zip.rb +120 -0
- data/fastlane/lib/fastlane/auto_complete.rb +82 -0
- data/fastlane/lib/fastlane/boolean.rb +5 -0
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +207 -0
- data/fastlane/lib/fastlane/command_line_handler.rb +49 -0
- data/fastlane/lib/fastlane/commands_generator.rb +369 -0
- data/fastlane/lib/fastlane/configuration_helper.rb +26 -0
- data/fastlane/lib/fastlane/core_ext/bundler_monkey_patch.rb +14 -0
- data/fastlane/lib/fastlane/documentation/actions_list.rb +214 -0
- data/fastlane/lib/fastlane/documentation/docs_generator.rb +89 -0
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +228 -0
- data/fastlane/lib/fastlane/environment_printer.rb +303 -0
- data/fastlane/lib/fastlane/erb_template_helper.rb +30 -0
- data/fastlane/lib/fastlane/fast_file.rb +439 -0
- data/fastlane/lib/fastlane/fastlane_require.rb +75 -0
- data/fastlane/lib/fastlane/features.rb +4 -0
- data/fastlane/lib/fastlane/helper/README.md +29 -0
- data/fastlane/lib/fastlane/helper/adb_helper.rb +66 -0
- data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +157 -0
- data/fastlane/lib/fastlane/helper/dotenv_helper.rb +50 -0
- data/fastlane/lib/fastlane/helper/gem_helper.rb +26 -0
- data/fastlane/lib/fastlane/helper/git_helper.rb +137 -0
- data/fastlane/lib/fastlane/helper/gradle_helper.rb +62 -0
- data/fastlane/lib/fastlane/helper/lane_helper.rb +13 -0
- data/fastlane/lib/fastlane/helper/podspec_helper.rb +75 -0
- data/fastlane/lib/fastlane/helper/s3_client_helper.rb +78 -0
- data/fastlane/lib/fastlane/helper/sh_helper.rb +134 -0
- data/fastlane/lib/fastlane/helper/xcodeproj_helper.rb +12 -0
- data/fastlane/lib/fastlane/helper/xcversion_helper.rb +25 -0
- data/fastlane/lib/fastlane/junit_generator.rb +27 -0
- data/fastlane/lib/fastlane/lane.rb +97 -0
- data/fastlane/lib/fastlane/lane_list.rb +137 -0
- data/fastlane/lib/fastlane/lane_manager.rb +130 -0
- data/fastlane/lib/fastlane/lane_manager_base.rb +92 -0
- data/fastlane/lib/fastlane/markdown_table_formatter.rb +62 -0
- data/fastlane/lib/fastlane/new_action.rb +47 -0
- data/fastlane/lib/fastlane/one_off.rb +45 -0
- data/fastlane/lib/fastlane/other_action.rb +29 -0
- data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +55 -0
- data/fastlane/lib/fastlane/plugins/plugin_generator.rb +86 -0
- data/fastlane/lib/fastlane/plugins/plugin_generator_ui.rb +19 -0
- data/fastlane/lib/fastlane/plugins/plugin_info.rb +49 -0
- data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +159 -0
- data/fastlane/lib/fastlane/plugins/plugin_manager.rb +399 -0
- data/fastlane/lib/fastlane/plugins/plugin_search.rb +46 -0
- data/fastlane/lib/fastlane/plugins/plugin_update_manager.rb +70 -0
- data/fastlane/lib/fastlane/plugins/plugins.rb +12 -0
- data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +35 -0
- data/fastlane/lib/fastlane/plugins/template/.circleci/config.yml +43 -0
- data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +29 -0
- data/fastlane/lib/fastlane/plugins/template/.gitignore +12 -0
- data/fastlane/lib/fastlane/plugins/template/.rspec +5 -0
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +188 -0
- data/fastlane/lib/fastlane/plugins/template/.travis.yml +4 -0
- data/fastlane/lib/fastlane/plugins/template/Gemfile +6 -0
- data/fastlane/lib/fastlane/plugins/template/LICENSE.erb +21 -0
- data/fastlane/lib/fastlane/plugins/template/README.md.erb +52 -0
- data/fastlane/lib/fastlane/plugins/template/Rakefile +9 -0
- data/fastlane/lib/fastlane/plugins/template/fastlane/Fastfile.erb +3 -0
- data/fastlane/lib/fastlane/plugins/template/fastlane/Pluginfile.erb +1 -0
- data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%.rb.erb +16 -0
- data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/actions/%plugin_name%_action.rb.erb +47 -0
- data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/helper/%plugin_name%_helper.rb.erb +16 -0
- data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/version.rb.erb +5 -0
- data/fastlane/lib/fastlane/plugins/template/spec/%plugin_name%_action_spec.rb.erb +9 -0
- data/fastlane/lib/fastlane/plugins/template/spec/spec_helper.rb.erb +15 -0
- data/fastlane/lib/fastlane/runner.rb +378 -0
- data/fastlane/lib/fastlane/server/action_command.rb +61 -0
- data/fastlane/lib/fastlane/server/action_command_return.rb +14 -0
- data/fastlane/lib/fastlane/server/command_executor.rb +7 -0
- data/fastlane/lib/fastlane/server/command_parser.rb +44 -0
- data/fastlane/lib/fastlane/server/control_command.rb +23 -0
- data/fastlane/lib/fastlane/server/json_return_value_processor.rb +72 -0
- data/fastlane/lib/fastlane/server/socket_server.rb +238 -0
- data/fastlane/lib/fastlane/server/socket_server_action_command_executor.rb +101 -0
- data/fastlane/lib/fastlane/setup/setup.rb +355 -0
- data/fastlane/lib/fastlane/setup/setup_android.rb +97 -0
- data/fastlane/lib/fastlane/setup/setup_ios.rb +504 -0
- data/fastlane/lib/fastlane/shells.rb +6 -0
- data/fastlane/lib/fastlane/supported_platforms.rb +28 -0
- data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +477 -0
- data/fastlane/lib/fastlane/swift_fastlane_function.rb +419 -0
- data/fastlane/lib/fastlane/swift_lane_manager.rb +296 -0
- data/fastlane/lib/fastlane/swift_runner_upgrader.rb +210 -0
- data/fastlane/lib/fastlane/tools.rb +33 -0
- data/fastlane/lib/fastlane/version.rb +6 -0
- data/fastlane/swift/Actions.swift +16 -0
- data/fastlane/swift/Appfile.swift +15 -0
- data/fastlane/swift/ArgumentProcessor.swift +89 -0
- data/fastlane/swift/ControlCommand.swift +74 -0
- data/fastlane/swift/Deliverfile.swift +20 -0
- data/fastlane/swift/DeliverfileProtocol.swift +259 -0
- data/fastlane/swift/Fastfile.swift +16 -0
- data/fastlane/swift/Fastlane.swift +9402 -0
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +434 -0
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +97 -0
- data/fastlane/swift/FastlaneSwiftRunner/README.txt +10 -0
- data/fastlane/swift/Gymfile.swift +20 -0
- data/fastlane/swift/GymfileProtocol.swift +187 -0
- data/fastlane/swift/LaneFileProtocol.swift +149 -0
- data/fastlane/swift/MainProcess.swift +77 -0
- data/fastlane/swift/Matchfile.swift +20 -0
- data/fastlane/swift/MatchfileProtocol.swift +187 -0
- data/fastlane/swift/Plugins.swift +16 -0
- data/fastlane/swift/Precheckfile.swift +20 -0
- data/fastlane/swift/PrecheckfileProtocol.swift +51 -0
- data/fastlane/swift/RubyCommand.swift +157 -0
- data/fastlane/swift/RubyCommandable.swift +43 -0
- data/fastlane/swift/Runner.swift +275 -0
- data/fastlane/swift/RunnerArgument.swift +20 -0
- data/fastlane/swift/Scanfile.swift +20 -0
- data/fastlane/swift/ScanfileProtocol.swift +263 -0
- data/fastlane/swift/Screengrabfile.swift +20 -0
- data/fastlane/swift/ScreengrabfileProtocol.swift +99 -0
- data/fastlane/swift/Snapshotfile.swift +20 -0
- data/fastlane/swift/SnapshotfileProtocol.swift +187 -0
- data/fastlane/swift/SocketClient.swift +327 -0
- data/fastlane/swift/SocketClientDelegateProtocol.swift +21 -0
- data/fastlane/swift/SocketResponse.swift +82 -0
- data/fastlane/swift/formatting/Brewfile +1 -0
- data/fastlane/swift/formatting/Brewfile.lock.json +47 -0
- data/fastlane/swift/formatting/Rakefile +18 -0
- data/fastlane/swift/main.swift +47 -0
- data/fastlane/swift/upgrade_manifest.json +1 -0
- data/fastlane_core/README.md +79 -0
- data/fastlane_core/lib/assets/XMLTemplate.xml.erb +12 -0
- data/fastlane_core/lib/fastlane_core.rb +46 -0
- data/fastlane_core/lib/fastlane_core/analytics/action_completion_context.rb +34 -0
- data/fastlane_core/lib/fastlane_core/analytics/action_launch_context.rb +38 -0
- data/fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb +23 -0
- data/fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb +54 -0
- data/fastlane_core/lib/fastlane_core/analytics/analytics_session.rb +70 -0
- data/fastlane_core/lib/fastlane_core/analytics/app_identifier_guesser.rb +64 -0
- data/fastlane_core/lib/fastlane_core/android_package_name_guesser.rb +79 -0
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +96 -0
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +144 -0
- data/fastlane_core/lib/fastlane_core/command_executor.rb +100 -0
- data/fastlane_core/lib/fastlane_core/configuration/commander_generator.rb +103 -0
- data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +321 -0
- data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +332 -0
- data/fastlane_core/lib/fastlane_core/configuration/configuration_file.rb +182 -0
- data/fastlane_core/lib/fastlane_core/core_ext/cfpropertylist.rb +23 -0
- data/fastlane_core/lib/fastlane_core/core_ext/shellwords.rb +63 -0
- data/fastlane_core/lib/fastlane_core/core_ext/string.rb +17 -0
- data/fastlane_core/lib/fastlane_core/device_manager.rb +374 -0
- data/fastlane_core/lib/fastlane_core/env.rb +9 -0
- data/fastlane_core/lib/fastlane_core/fastlane_folder.rb +72 -0
- data/fastlane_core/lib/fastlane_core/fastlane_pty.rb +57 -0
- data/fastlane_core/lib/fastlane_core/feature/feature.rb +51 -0
- data/fastlane_core/lib/fastlane_core/features.rb +4 -0
- data/fastlane_core/lib/fastlane_core/globals.rb +27 -0
- data/fastlane_core/lib/fastlane_core/helper.rb +437 -0
- data/fastlane_core/lib/fastlane_core/ios_app_identifier_guesser.rb +112 -0
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +63 -0
- data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +52 -0
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +595 -0
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +120 -0
- data/fastlane_core/lib/fastlane_core/languages.rb +16 -0
- data/fastlane_core/lib/fastlane_core/module.rb +31 -0
- data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +51 -0
- data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +48 -0
- data/fastlane_core/lib/fastlane_core/print_table.rb +131 -0
- data/fastlane_core/lib/fastlane_core/project.rb +509 -0
- data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +124 -0
- data/fastlane_core/lib/fastlane_core/string_filters.rb +51 -0
- data/fastlane_core/lib/fastlane_core/swag.rb +85 -0
- data/fastlane_core/lib/fastlane_core/tag_version.rb +31 -0
- data/fastlane_core/lib/fastlane_core/test_parser.rb +107 -0
- data/fastlane_core/lib/fastlane_core/ui/disable_colors.rb +17 -0
- data/fastlane_core/lib/fastlane_core/ui/errors.rb +1 -0
- data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_common_error.rb +19 -0
- data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_crash.rb +11 -0
- data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_error.rb +25 -0
- data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_exception.rb +19 -0
- data/fastlane_core/lib/fastlane_core/ui/errors/fastlane_shell_error.rb +11 -0
- data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +294 -0
- data/fastlane_core/lib/fastlane_core/ui/github_issue_inspector_reporter.rb +62 -0
- data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +159 -0
- data/fastlane_core/lib/fastlane_core/ui/interface.rb +205 -0
- data/fastlane_core/lib/fastlane_core/ui/ui.rb +26 -0
- data/fastlane_core/lib/fastlane_core/update_checker/changelog.rb +37 -0
- data/fastlane_core/lib/fastlane_core/update_checker/update_checker.rb +109 -0
- data/frameit/README.md +17 -0
- data/frameit/lib/assets/empty.png +0 -0
- data/frameit/lib/frameit.rb +13 -0
- data/frameit/lib/frameit/commands_generator.rb +140 -0
- data/frameit/lib/frameit/config_parser.rb +136 -0
- data/frameit/lib/frameit/dependency_checker.rb +22 -0
- data/frameit/lib/frameit/device.rb +90 -0
- data/frameit/lib/frameit/device_types.rb +144 -0
- data/frameit/lib/frameit/editor.rb +560 -0
- data/frameit/lib/frameit/frame_downloader.rb +85 -0
- data/frameit/lib/frameit/mac_editor.rb +35 -0
- data/frameit/lib/frameit/module.rb +42 -0
- data/frameit/lib/frameit/offsets.rb +28 -0
- data/frameit/lib/frameit/options.rb +112 -0
- data/frameit/lib/frameit/runner.rb +97 -0
- data/frameit/lib/frameit/screenshot.rb +134 -0
- data/frameit/lib/frameit/strings_parser.rb +46 -0
- data/frameit/lib/frameit/template_finder.rb +45 -0
- data/frameit/lib/frameit/trim_box.rb +35 -0
- data/gym/README.md +17 -0
- data/gym/lib/assets/GymfileTemplate +13 -0
- data/gym/lib/assets/GymfileTemplate.swift +13 -0
- data/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh +61 -0
- data/gym/lib/gym.rb +9 -0
- data/gym/lib/gym/code_signing_mapping.rb +210 -0
- data/gym/lib/gym/commands_generator.rb +78 -0
- data/gym/lib/gym/detect_values.rb +206 -0
- data/gym/lib/gym/error_handler.rb +306 -0
- data/gym/lib/gym/generators/README.md +1 -0
- data/gym/lib/gym/generators/build_command_generator.rb +147 -0
- data/gym/lib/gym/generators/package_command_generator.rb +68 -0
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +232 -0
- data/gym/lib/gym/manager.rb +22 -0
- data/gym/lib/gym/module.rb +74 -0
- data/gym/lib/gym/options.rb +286 -0
- data/gym/lib/gym/runner.rb +365 -0
- data/gym/lib/gym/xcode.rb +27 -0
- data/gym/lib/gym/xcodebuild_fixes/README.md +9 -0
- data/gym/lib/gym/xcodebuild_fixes/generic_archive_fix.rb +35 -0
- data/match/README.md +17 -0
- data/match/lib/assets/MatchfileTemplate +11 -0
- data/match/lib/assets/MatchfileTemplate.swift +9 -0
- data/match/lib/assets/READMETemplate.md +59 -0
- data/match/lib/match.rb +14 -0
- data/match/lib/match/change_password.rb +53 -0
- data/match/lib/match/commands_generator.rb +190 -0
- data/match/lib/match/encryption.rb +49 -0
- data/match/lib/match/encryption/interface.rb +17 -0
- data/match/lib/match/encryption/openssl.rb +161 -0
- data/match/lib/match/generator.rb +122 -0
- data/match/lib/match/importer.rb +157 -0
- data/match/lib/match/migrate.rb +109 -0
- data/match/lib/match/module.rb +32 -0
- data/match/lib/match/nuke.rb +350 -0
- data/match/lib/match/options.rb +315 -0
- data/match/lib/match/runner.rb +369 -0
- data/match/lib/match/setup.rb +40 -0
- data/match/lib/match/spaceship_ensure.rb +97 -0
- data/match/lib/match/storage.rb +46 -0
- data/match/lib/match/storage/git_storage.rb +250 -0
- data/match/lib/match/storage/google_cloud_storage.rb +382 -0
- data/match/lib/match/storage/interface.rb +119 -0
- data/match/lib/match/storage/s3_storage.rb +205 -0
- data/match/lib/match/table_printer.rb +51 -0
- data/match/lib/match/utils.rb +75 -0
- data/pem/README.md +17 -0
- data/pem/lib/pem.rb +4 -0
- data/pem/lib/pem/commands_generator.rb +47 -0
- data/pem/lib/pem/manager.rb +112 -0
- data/pem/lib/pem/module.rb +19 -0
- data/pem/lib/pem/options.rb +103 -0
- data/pilot/README.md +17 -0
- data/pilot/lib/pilot.rb +9 -0
- data/pilot/lib/pilot/build_manager.rb +546 -0
- data/pilot/lib/pilot/commands_generator.rb +174 -0
- data/pilot/lib/pilot/features.rb +0 -0
- data/pilot/lib/pilot/manager.rb +90 -0
- data/pilot/lib/pilot/module.rb +11 -0
- data/pilot/lib/pilot/options.rb +303 -0
- data/pilot/lib/pilot/tester_exporter.rb +58 -0
- data/pilot/lib/pilot/tester_importer.rb +53 -0
- data/pilot/lib/pilot/tester_manager.rb +168 -0
- data/pilot/lib/pilot/tester_util.rb +0 -0
- data/precheck/README.md +17 -0
- data/precheck/lib/assets/PrecheckfileTemplate +27 -0
- data/precheck/lib/assets/PrecheckfileTemplate.swift +19 -0
- data/precheck/lib/precheck.rb +3 -0
- data/precheck/lib/precheck/commands_generator.rb +74 -0
- data/precheck/lib/precheck/item_to_check.rb +58 -0
- data/precheck/lib/precheck/module.rb +21 -0
- data/precheck/lib/precheck/options.rb +104 -0
- data/precheck/lib/precheck/rule.rb +171 -0
- data/precheck/lib/precheck/rule_check_result.rb +19 -0
- data/precheck/lib/precheck/rule_processor.rb +265 -0
- data/precheck/lib/precheck/rules/abstract_text_match_rule.rb +80 -0
- data/precheck/lib/precheck/rules/all.rb +1 -0
- data/precheck/lib/precheck/rules/copyright_date_rule.rb +37 -0
- data/precheck/lib/precheck/rules/curse_words_rule.rb +62 -0
- data/precheck/lib/precheck/rules/custom_text_rule.rb +35 -0
- data/precheck/lib/precheck/rules/free_stuff_iap_rule.rb +31 -0
- data/precheck/lib/precheck/rules/future_functionality_rule.rb +33 -0
- data/precheck/lib/precheck/rules/negative_apple_sentiment_rule.rb +37 -0
- data/precheck/lib/precheck/rules/other_platforms_rule.rb +43 -0
- data/precheck/lib/precheck/rules/placeholder_words_rule.rb +31 -0
- data/precheck/lib/precheck/rules/rules_data/curse_word_hashes/en_us.txt +349 -0
- data/precheck/lib/precheck/rules/test_words_rule.rb +30 -0
- data/precheck/lib/precheck/rules/unreachable_urls_rule.rb +47 -0
- data/precheck/lib/precheck/runner.rb +197 -0
- data/produce/README.md +17 -0
- data/produce/lib/produce.rb +6 -0
- data/produce/lib/produce/available_default_languages.rb +51 -0
- data/produce/lib/produce/cloud_container.rb +82 -0
- data/produce/lib/produce/commands_generator.rb +236 -0
- data/produce/lib/produce/developer_center.rb +143 -0
- data/produce/lib/produce/group.rb +90 -0
- data/produce/lib/produce/itunes_connect.rb +139 -0
- data/produce/lib/produce/manager.rb +15 -0
- data/produce/lib/produce/merchant.rb +121 -0
- data/produce/lib/produce/module.rb +14 -0
- data/produce/lib/produce/options.rb +184 -0
- data/produce/lib/produce/service.rb +319 -0
- data/scan/README.md +17 -0
- data/scan/lib/assets/ScanfileTemplate +16 -0
- data/scan/lib/assets/ScanfileTemplate.swift +13 -0
- data/scan/lib/scan.rb +10 -0
- data/scan/lib/scan/commands_generator.rb +78 -0
- data/scan/lib/scan/detect_values.rb +224 -0
- data/scan/lib/scan/error_handler.rb +57 -0
- data/scan/lib/scan/manager.rb +38 -0
- data/scan/lib/scan/module.rb +32 -0
- data/scan/lib/scan/options.rb +445 -0
- data/scan/lib/scan/runner.rb +197 -0
- data/scan/lib/scan/slack_poster.rb +60 -0
- data/scan/lib/scan/test_command_generator.rb +174 -0
- data/scan/lib/scan/test_result_parser.rb +33 -0
- data/scan/lib/scan/xcpretty_reporter_options_generator.rb +85 -0
- data/screengrab/README.md +17 -0
- data/screengrab/lib/assets/ScreengrabfileTemplate +15 -0
- data/screengrab/lib/assets/ScreengrabfileTemplate.swift +15 -0
- data/screengrab/lib/screengrab.rb +7 -0
- data/screengrab/lib/screengrab/android_environment.rb +91 -0
- data/screengrab/lib/screengrab/commands_generator.rb +70 -0
- data/screengrab/lib/screengrab/dependency_checker.rb +58 -0
- data/screengrab/lib/screengrab/detect_values.rb +16 -0
- data/screengrab/lib/screengrab/module.rb +26 -0
- data/screengrab/lib/screengrab/options.rb +148 -0
- data/screengrab/lib/screengrab/page.html.erb +190 -0
- data/screengrab/lib/screengrab/reports_generator.rb +36 -0
- data/screengrab/lib/screengrab/runner.rb +449 -0
- data/screengrab/lib/screengrab/setup.rb +24 -0
- data/sigh/README.md +17 -0
- data/sigh/lib/assets/resign.sh +909 -0
- data/sigh/lib/sigh.rb +4 -0
- data/sigh/lib/sigh/commands_generator.rb +154 -0
- data/sigh/lib/sigh/download_all.rb +112 -0
- data/sigh/lib/sigh/local_manage.rb +145 -0
- data/sigh/lib/sigh/manager.rb +47 -0
- data/sigh/lib/sigh/module.rb +42 -0
- data/sigh/lib/sigh/options.rb +187 -0
- data/sigh/lib/sigh/repair.rb +34 -0
- data/sigh/lib/sigh/resign.rb +220 -0
- data/sigh/lib/sigh/runner.rb +402 -0
- data/snapshot/README.md +17 -0
- data/snapshot/lib/assets/SnapfileTemplate +37 -0
- data/snapshot/lib/assets/SnapfileTemplate.swift +41 -0
- data/snapshot/lib/assets/SnapshotHelper.swift +301 -0
- data/snapshot/lib/assets/SnapshotHelperXcode8.swift +172 -0
- data/snapshot/lib/snapshot.rb +19 -0
- data/snapshot/lib/snapshot/collector.rb +140 -0
- data/snapshot/lib/snapshot/commands_generator.rb +115 -0
- data/snapshot/lib/snapshot/dependency_checker.rb +69 -0
- data/snapshot/lib/snapshot/detect_values.rb +86 -0
- data/snapshot/lib/snapshot/error_handler.rb +24 -0
- data/snapshot/lib/snapshot/fixes/README.md +5 -0
- data/snapshot/lib/snapshot/fixes/hardware_keyboard_fix.rb +27 -0
- data/snapshot/lib/snapshot/fixes/simulator_shared_pasteboard.rb +16 -0
- data/snapshot/lib/snapshot/fixes/simulator_zoom_fix.rb +27 -0
- data/snapshot/lib/snapshot/latest_os_version.rb +34 -0
- data/snapshot/lib/snapshot/module.rb +44 -0
- data/snapshot/lib/snapshot/options.rb +290 -0
- data/snapshot/lib/snapshot/page.html.erb +285 -0
- data/snapshot/lib/snapshot/reports_generator.rb +139 -0
- data/snapshot/lib/snapshot/reset_simulators.rb +122 -0
- data/snapshot/lib/snapshot/runner.rb +146 -0
- data/snapshot/lib/snapshot/screenshot_flatten.rb +20 -0
- data/snapshot/lib/snapshot/screenshot_rotate.rb +36 -0
- data/snapshot/lib/snapshot/setup.rb +58 -0
- data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +62 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +219 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +200 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_xcode_8.rb +113 -0
- data/snapshot/lib/snapshot/test_command_generator.rb +108 -0
- data/snapshot/lib/snapshot/test_command_generator_base.rb +128 -0
- data/snapshot/lib/snapshot/test_command_generator_xcode_8.rb +70 -0
- data/snapshot/lib/snapshot/update.rb +38 -0
- data/spaceship/README.md +183 -0
- data/spaceship/lib/assets/displayFamilies.json +181 -0
- data/spaceship/lib/assets/languageMapping.json +306 -0
- data/spaceship/lib/assets/languageMappingReadable.json +30 -0
- data/spaceship/lib/spaceship.rb +30 -0
- data/spaceship/lib/spaceship/base.rb +310 -0
- data/spaceship/lib/spaceship/client.rb +913 -0
- data/spaceship/lib/spaceship/commands_generator.rb +53 -0
- data/spaceship/lib/spaceship/connect_api.rb +116 -0
- data/spaceship/lib/spaceship/connect_api/api_client.rb +279 -0
- data/spaceship/lib/spaceship/connect_api/client.rb +216 -0
- data/spaceship/lib/spaceship/connect_api/file_uploader.rb +99 -0
- data/spaceship/lib/spaceship/connect_api/model.rb +172 -0
- data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +114 -0
- data/spaceship/lib/spaceship/connect_api/models/app.rb +388 -0
- data/spaceship/lib/spaceship/connect_api/models/app_category.rb +94 -0
- data/spaceship/lib/spaceship/connect_api/models/app_info.rb +95 -0
- data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +39 -0
- data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +131 -0
- data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +100 -0
- data/spaceship/lib/spaceship/connect_api/models/app_price.rb +22 -0
- data/spaceship/lib/spaceship/connect_api/models/app_price_point.rb +26 -0
- data/spaceship/lib/spaceship/connect_api/models/app_price_tier.rb +12 -0
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +187 -0
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +153 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_review_attachment.rb +71 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +51 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +217 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +85 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_phased_release.rb +57 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_release_request.rb +12 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_submission.rb +26 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_app_localization.rb +28 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_app_review_detail.rb +32 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_app_review_submission.rb +26 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_build_localization.rb +20 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_build_metric.rb +24 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +75 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +41 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_screenshot.rb +18 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_tester.rb +57 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_tester_metric.rb +44 -0
- data/spaceship/lib/spaceship/connect_api/models/build.rb +172 -0
- data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +61 -0
- data/spaceship/lib/spaceship/connect_api/models/build_delivery.rb +36 -0
- data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +58 -0
- data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +71 -0
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +102 -0
- data/spaceship/lib/spaceship/connect_api/models/custom_app_organization.rb +43 -0
- data/spaceship/lib/spaceship/connect_api/models/custom_app_user.rb +41 -0
- data/spaceship/lib/spaceship/connect_api/models/device.rb +58 -0
- data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +41 -0
- data/spaceship/lib/spaceship/connect_api/models/pre_release_version.rb +20 -0
- data/spaceship/lib/spaceship/connect_api/models/profile.rb +97 -0
- data/spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb +26 -0
- data/spaceship/lib/spaceship/connect_api/models/sandbox_tester.rb +64 -0
- data/spaceship/lib/spaceship/connect_api/models/territory.rb +27 -0
- data/spaceship/lib/spaceship/connect_api/models/user.rb +51 -0
- data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +59 -0
- data/spaceship/lib/spaceship/connect_api/provisioning/client.rb +92 -0
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +143 -0
- data/spaceship/lib/spaceship/connect_api/response.rb +67 -0
- data/spaceship/lib/spaceship/connect_api/spaceship.rb +102 -0
- data/spaceship/lib/spaceship/connect_api/testflight/client.rb +24 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +391 -0
- data/spaceship/lib/spaceship/connect_api/token.rb +102 -0
- data/spaceship/lib/spaceship/connect_api/token_refresh_middleware.rb +24 -0
- data/spaceship/lib/spaceship/connect_api/tunes/client.rb +24 -0
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +1045 -0
- data/spaceship/lib/spaceship/connect_api/users/client.rb +24 -0
- data/spaceship/lib/spaceship/connect_api/users/users.rb +80 -0
- data/spaceship/lib/spaceship/du/du_client.rb +138 -0
- data/spaceship/lib/spaceship/du/upload_file.rb +58 -0
- data/spaceship/lib/spaceship/du/utilities.rb +99 -0
- data/spaceship/lib/spaceship/errors.rb +82 -0
- data/spaceship/lib/spaceship/globals.rb +12 -0
- data/spaceship/lib/spaceship/helper/net_http_generic_request.rb +20 -0
- data/spaceship/lib/spaceship/helper/plist_middleware.rb +16 -0
- data/spaceship/lib/spaceship/helper/rels_middleware.rb +28 -0
- data/spaceship/lib/spaceship/launcher.rb +99 -0
- data/spaceship/lib/spaceship/module.rb +8 -0
- data/spaceship/lib/spaceship/playground.rb +75 -0
- data/spaceship/lib/spaceship/portal/app.rb +201 -0
- data/spaceship/lib/spaceship/portal/app_group.rb +73 -0
- data/spaceship/lib/spaceship/portal/app_service.rb +87 -0
- data/spaceship/lib/spaceship/portal/certificate.rb +365 -0
- data/spaceship/lib/spaceship/portal/cloud_container.rb +74 -0
- data/spaceship/lib/spaceship/portal/device.rb +191 -0
- data/spaceship/lib/spaceship/portal/invite.rb +53 -0
- data/spaceship/lib/spaceship/portal/key.rb +101 -0
- data/spaceship/lib/spaceship/portal/legacy_wrapper.rb +21 -0
- data/spaceship/lib/spaceship/portal/merchant.rb +86 -0
- data/spaceship/lib/spaceship/portal/passbook.rb +78 -0
- data/spaceship/lib/spaceship/portal/person.rb +62 -0
- data/spaceship/lib/spaceship/portal/persons.rb +67 -0
- data/spaceship/lib/spaceship/portal/portal.rb +17 -0
- data/spaceship/lib/spaceship/portal/portal_base.rb +16 -0
- data/spaceship/lib/spaceship/portal/portal_client.rb +862 -0
- data/spaceship/lib/spaceship/portal/provisioning_profile.rb +559 -0
- data/spaceship/lib/spaceship/portal/provisioning_profile_template.rb +52 -0
- data/spaceship/lib/spaceship/portal/spaceship.rb +154 -0
- data/spaceship/lib/spaceship/portal/ui/select_team.rb +116 -0
- data/spaceship/lib/spaceship/portal/website_push.rb +88 -0
- data/spaceship/lib/spaceship/provider.rb +13 -0
- data/spaceship/lib/spaceship/spaceauth_runner.rb +74 -0
- data/spaceship/lib/spaceship/stats_middleware.rb +65 -0
- data/spaceship/lib/spaceship/test_flight.rb +10 -0
- data/spaceship/lib/spaceship/test_flight/app_test_info.rb +40 -0
- data/spaceship/lib/spaceship/test_flight/base.rb +39 -0
- data/spaceship/lib/spaceship/test_flight/beta_review_info.rb +19 -0
- data/spaceship/lib/spaceship/test_flight/build.rb +242 -0
- data/spaceship/lib/spaceship/test_flight/build_trains.rb +50 -0
- data/spaceship/lib/spaceship/test_flight/client.rb +361 -0
- data/spaceship/lib/spaceship/test_flight/export_compliance.rb +12 -0
- data/spaceship/lib/spaceship/test_flight/group.rb +131 -0
- data/spaceship/lib/spaceship/test_flight/test_info.rb +56 -0
- data/spaceship/lib/spaceship/test_flight/tester.rb +136 -0
- data/spaceship/lib/spaceship/tunes/app_analytics.rb +168 -0
- data/spaceship/lib/spaceship/tunes/app_details.rb +147 -0
- data/spaceship/lib/spaceship/tunes/app_image.rb +51 -0
- data/spaceship/lib/spaceship/tunes/app_ratings.rb +58 -0
- data/spaceship/lib/spaceship/tunes/app_review.rb +55 -0
- data/spaceship/lib/spaceship/tunes/app_review_attachment.rb +49 -0
- data/spaceship/lib/spaceship/tunes/app_screenshot.rb +12 -0
- data/spaceship/lib/spaceship/tunes/app_status.rb +63 -0
- data/spaceship/lib/spaceship/tunes/app_submission.rb +161 -0
- data/spaceship/lib/spaceship/tunes/app_trailer.rb +64 -0
- data/spaceship/lib/spaceship/tunes/app_version.rb +970 -0
- data/spaceship/lib/spaceship/tunes/app_version_common.rb +35 -0
- data/spaceship/lib/spaceship/tunes/app_version_generated_promocodes.rb +28 -0
- data/spaceship/lib/spaceship/tunes/app_version_history.rb +52 -0
- data/spaceship/lib/spaceship/tunes/app_version_promocodes.rb +27 -0
- data/spaceship/lib/spaceship/tunes/app_version_ref.rb +15 -0
- data/spaceship/lib/spaceship/tunes/app_version_states_history.rb +27 -0
- data/spaceship/lib/spaceship/tunes/application.rb +453 -0
- data/spaceship/lib/spaceship/tunes/availability.rb +164 -0
- data/spaceship/lib/spaceship/tunes/b2b_organization.rb +50 -0
- data/spaceship/lib/spaceship/tunes/b2b_user.rb +30 -0
- data/spaceship/lib/spaceship/tunes/build.rb +263 -0
- data/spaceship/lib/spaceship/tunes/build_details.rb +184 -0
- data/spaceship/lib/spaceship/tunes/build_train.rb +181 -0
- data/spaceship/lib/spaceship/tunes/developer_response.rb +23 -0
- data/spaceship/lib/spaceship/tunes/device_type.rb +17 -0
- data/spaceship/lib/spaceship/tunes/display_family.rb +84 -0
- data/spaceship/lib/spaceship/tunes/errors.rb +17 -0
- data/spaceship/lib/spaceship/tunes/iap.rb +168 -0
- data/spaceship/lib/spaceship/tunes/iap_detail.rb +264 -0
- data/spaceship/lib/spaceship/tunes/iap_families.rb +68 -0
- data/spaceship/lib/spaceship/tunes/iap_family_details.rb +90 -0
- data/spaceship/lib/spaceship/tunes/iap_family_list.rb +28 -0
- data/spaceship/lib/spaceship/tunes/iap_list.rb +76 -0
- data/spaceship/lib/spaceship/tunes/iap_status.rb +56 -0
- data/spaceship/lib/spaceship/tunes/iap_subscription_pricing_info.rb +46 -0
- data/spaceship/lib/spaceship/tunes/iap_subscription_pricing_tier.rb +25 -0
- data/spaceship/lib/spaceship/tunes/iap_type.rb +45 -0
- data/spaceship/lib/spaceship/tunes/language_converter.rb +65 -0
- data/spaceship/lib/spaceship/tunes/language_item.rb +61 -0
- data/spaceship/lib/spaceship/tunes/legacy_wrapper.rb +13 -0
- data/spaceship/lib/spaceship/tunes/member.rb +84 -0
- data/spaceship/lib/spaceship/tunes/members.rb +35 -0
- data/spaceship/lib/spaceship/tunes/pricing_info.rb +42 -0
- data/spaceship/lib/spaceship/tunes/pricing_tier.rb +25 -0
- data/spaceship/lib/spaceship/tunes/sandbox_tester.rb +74 -0
- data/spaceship/lib/spaceship/tunes/spaceship.rb +39 -0
- data/spaceship/lib/spaceship/tunes/territory.rb +39 -0
- data/spaceship/lib/spaceship/tunes/transit_app_file.rb +23 -0
- data/spaceship/lib/spaceship/tunes/tunes.rb +35 -0
- data/spaceship/lib/spaceship/tunes/tunes_base.rb +17 -0
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +1644 -0
- data/spaceship/lib/spaceship/tunes/user_detail.rb +15 -0
- data/spaceship/lib/spaceship/tunes/version_set.rb +26 -0
- data/spaceship/lib/spaceship/two_step_or_factor_client.rb +346 -0
- data/spaceship/lib/spaceship/ui.rb +27 -0
- data/supply/README.md +17 -0
- data/supply/lib/supply.rb +53 -0
- data/supply/lib/supply/apk_listing.rb +14 -0
- data/supply/lib/supply/client.rb +551 -0
- data/supply/lib/supply/commands_generator.rb +67 -0
- data/supply/lib/supply/languages.rb +88 -0
- data/supply/lib/supply/listing.rb +32 -0
- data/supply/lib/supply/options.rb +324 -0
- data/supply/lib/supply/reader.rb +41 -0
- data/supply/lib/supply/release_listing.rb +18 -0
- data/supply/lib/supply/setup.rb +122 -0
- data/supply/lib/supply/uploader.rb +480 -0
- metadata +1832 -0
@@ -0,0 +1,120 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
require 'open3'
|
3
|
+
require 'security'
|
4
|
+
|
5
|
+
module FastlaneCore
|
6
|
+
class KeychainImporter
|
7
|
+
def self.import_file(path, keychain_path, keychain_password: nil, certificate_password: "", skip_set_partition_list: false, output: FastlaneCore::Globals.verbose?)
|
8
|
+
UI.user_error!("Could not find file '#{path}'") unless File.exist?(path)
|
9
|
+
|
10
|
+
command = "security import #{path.shellescape} -k '#{keychain_path.shellescape}'"
|
11
|
+
command << " -P #{certificate_password.shellescape}"
|
12
|
+
command << " -T /usr/bin/codesign" # to not be asked for permission when running a tool like `gym` (before Sierra)
|
13
|
+
command << " -T /usr/bin/security"
|
14
|
+
command << " -T /usr/bin/productbuild" # to not be asked for permission when using an installer cert for macOS
|
15
|
+
command << " 1> /dev/null" unless output
|
16
|
+
|
17
|
+
UI.command(command) if output
|
18
|
+
Open3.popen3(command) do |stdin, stdout, stderr, thrd|
|
19
|
+
UI.command_output(stdout.read.to_s) if output
|
20
|
+
|
21
|
+
# Set partition list only if success since it can be a time consuming process if a lot of keys are installed
|
22
|
+
if thrd.value.success? && !skip_set_partition_list
|
23
|
+
keychain_password ||= resolve_keychain_password(keychain_path)
|
24
|
+
set_partition_list(path, keychain_path, keychain_password: keychain_password, output: output)
|
25
|
+
else
|
26
|
+
# Output verbose if file is already installed since not an error otherwise we will show the whole error
|
27
|
+
err = stderr.read.to_s.strip
|
28
|
+
if err.include?("SecKeychainItemImport") && err.include?("The specified item already exists in the keychain")
|
29
|
+
UI.verbose("'#{File.basename(path)}' is already installed on this machine")
|
30
|
+
else
|
31
|
+
UI.error(err)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.set_partition_list(path, keychain_path, keychain_password: nil, output: FastlaneCore::Globals.verbose?)
|
38
|
+
# When security supports partition lists, also add the partition IDs
|
39
|
+
# See https://openradar.appspot.com/28524119
|
40
|
+
if Helper.backticks('security -h | grep set-key-partition-list', print: false).length > 0
|
41
|
+
command = "security set-key-partition-list"
|
42
|
+
command << " -S apple-tool:,apple:,codesign:"
|
43
|
+
command << " -s" # This is a needed in Catalina to prevent "security: SecKeychainItemCopyAccess: A missing value was detected."
|
44
|
+
command << " -k #{keychain_password.to_s.shellescape}"
|
45
|
+
command << " #{keychain_path.shellescape}"
|
46
|
+
command << " 1> /dev/null" # always disable stdout. This can be very verbose, and leak potentially sensitive info
|
47
|
+
|
48
|
+
# Showing loading indicator as this can take some time if a lot of keys installed
|
49
|
+
Helper.show_loading_indicator("Setting key partition list... (this can take a minute if there are a lot of keys installed)")
|
50
|
+
|
51
|
+
UI.command(command) if output
|
52
|
+
Open3.popen3(command) do |stdin, stdout, stderr, thrd|
|
53
|
+
unless thrd.value.success?
|
54
|
+
err = stderr.read.to_s.strip
|
55
|
+
|
56
|
+
# Inform user when no/wrong password was used as its needed to prevent UI permission popup from Xcode when signing
|
57
|
+
if err.include?("SecKeychainItemSetAccessWithPassword")
|
58
|
+
keychain_name = File.basename(keychain_path, ".*")
|
59
|
+
Security::InternetPassword.delete(server: server_name(keychain_name))
|
60
|
+
|
61
|
+
UI.important("")
|
62
|
+
UI.important("Could not configure imported keychain item (certificate) to prevent UI permission popup when code signing\n" \
|
63
|
+
"Check if you supplied the correct `keychain_password` for keychain: `#{keychain_path}`\n" \
|
64
|
+
"#{err}")
|
65
|
+
UI.important("")
|
66
|
+
UI.important("Please look at the following docs to see how to set a keychain password:")
|
67
|
+
UI.important(" - https://docs.fastlane.tools/actions/sync_code_signing")
|
68
|
+
UI.important(" - https://docs.fastlane.tools/actions/get_certificates")
|
69
|
+
else
|
70
|
+
UI.error(err)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Hiding after Open3 finishes
|
76
|
+
Helper.hide_loading_indicator
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# https://github.com/fastlane/fastlane/issues/14196
|
82
|
+
# Keychain password is needed to set the partition list to
|
83
|
+
# prevent Xcode from prompting dialog for keychain password when signing
|
84
|
+
# 1. Uses keychain password from login keychain if found
|
85
|
+
# 2. Prompts user for keychain password and stores it in login keychain for user later
|
86
|
+
def self.resolve_keychain_password(keychain_path)
|
87
|
+
keychain_name = File.basename(keychain_path, ".*")
|
88
|
+
server = server_name(keychain_name)
|
89
|
+
|
90
|
+
# Attempt to find password in keychain for keychain
|
91
|
+
item = Security::InternetPassword.find(server: server)
|
92
|
+
if item
|
93
|
+
keychain_password = item.password
|
94
|
+
UI.important("Using keychain password from keychain item #{server} in #{keychain_path}")
|
95
|
+
end
|
96
|
+
|
97
|
+
if keychain_password.nil?
|
98
|
+
if UI.interactive?
|
99
|
+
UI.important("Enter the password for #{keychain_path}")
|
100
|
+
UI.important("This passphrase will be stored in your local keychain with the name #{server} and used in future runs")
|
101
|
+
UI.important("This prompt can be avoided by specifying the 'keychain_password' option or 'MATCH_KEYCHAIN_PASSWORD' environment variable")
|
102
|
+
keychain_password = FastlaneCore::Helper.ask_password(message: "Password for #{keychain_name} keychain: ", confirm: true)
|
103
|
+
Security::InternetPassword.add(server, "", keychain_password)
|
104
|
+
else
|
105
|
+
UI.important("Keychain password for #{keychain_path} was not specified and not found in your keychain. Specify the 'keychain_password' option to prevent the UI permission popup when code signing")
|
106
|
+
keychain_password = ""
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
return keychain_password
|
111
|
+
end
|
112
|
+
|
113
|
+
# server name used for accessing the macOS keychain
|
114
|
+
def self.server_name(keychain_name)
|
115
|
+
["fastlane", "keychain", keychain_name].join("_")
|
116
|
+
end
|
117
|
+
|
118
|
+
private_class_method :server_name
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module FastlaneCore
|
2
|
+
module Languages
|
3
|
+
# These are all the languages which are available to use to upload app metadata and screenshots
|
4
|
+
|
5
|
+
# The old format which was used until August 2015 (good old times)
|
6
|
+
ALL_LANGUAGES_LEGACY = ["da-DK", "de-DE", "el-GR", "en-AU", "en-CA", "en-GB", "en-US", "es-ES", "es-MX", "fi-FI", "fr-CA", "fr-FR", "id-ID", "it-IT", "ja-JP", "ko-KR", "ms-MY", "nl-NL", "no-NO", "pt-BR", "pt-PT", "ru-RU", "sv-SE", "th-TH", "tr-TR", "vi-VI", "cmn-Hans", "cmn-Hant"]
|
7
|
+
|
8
|
+
# The new format used from September 2015 on
|
9
|
+
# This was generated from `Spaceship::Tunes.client.available_languages.sort`
|
10
|
+
# Updates should also be made to:
|
11
|
+
# - produce/lib/produce/available_default_languages.rb
|
12
|
+
# - spaceship/lib/assets/languageMapping.json
|
13
|
+
# See pull request for example: https://github.com/fastlane/fastlane/pull/14110
|
14
|
+
ALL_LANGUAGES = ["ar-SA", "ca", "cs", "da", "de-DE", "el", "en-AU", "en-CA", "en-GB", "en-US", "es-ES", "es-MX", "fi", "fr-CA", "fr-FR", "he", "hi", "hr", "hu", "id", "it", "ja", "ko", "ms", "nl-NL", "no", "pl", "pt-BR", "pt-PT", "ro", "ru", "sk", "sv", "th", "tr", "uk", "vi", "zh-Hans", "zh-Hant"]
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'fastlane/boolean'
|
2
|
+
|
3
|
+
require_relative 'analytics/analytics_session'
|
4
|
+
|
5
|
+
module FastlaneCore
|
6
|
+
ROOT = Pathname.new(File.expand_path('../../..', __FILE__))
|
7
|
+
Boolean = Fastlane::Boolean
|
8
|
+
|
9
|
+
# Session is used to report usage metrics.
|
10
|
+
# If you opt out, we will not send anything.
|
11
|
+
# You can confirm this by observing how we use the environment variable: FASTLANE_OPT_OUT_USAGE
|
12
|
+
# Specifically, in AnalyticsSession.finalize_session
|
13
|
+
# Learn more at https://docs.fastlane.tools/#metrics
|
14
|
+
def self.session
|
15
|
+
@session ||= AnalyticsSession.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.reset_session
|
19
|
+
@session = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
# A directory that's being used to user-wide fastlane configs
|
23
|
+
# This directory is also used for the bundled fastlane
|
24
|
+
# Since we don't want to access FastlaneCore from spaceship
|
25
|
+
# this method is duplicated in spaceship/client.rb
|
26
|
+
def self.fastlane_user_dir
|
27
|
+
path = File.expand_path(File.join(Dir.home, ".fastlane"))
|
28
|
+
FileUtils.mkdir_p(path) unless File.directory?(path)
|
29
|
+
return path
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
require_relative 'helper'
|
4
|
+
|
5
|
+
module FastlaneCore
|
6
|
+
class PkgFileAnalyser
|
7
|
+
def self.fetch_app_identifier(path)
|
8
|
+
xml = self.fetch_distribution_xml_file(path)
|
9
|
+
return xml.elements['installer-gui-script/product'].attributes['id'] if xml
|
10
|
+
return nil
|
11
|
+
end
|
12
|
+
|
13
|
+
# Fetches the app version from the given pkg file.
|
14
|
+
def self.fetch_app_version(path)
|
15
|
+
xml = self.fetch_distribution_xml_file(path)
|
16
|
+
return xml.elements['installer-gui-script/product'].attributes['version'] if xml
|
17
|
+
return nil
|
18
|
+
end
|
19
|
+
|
20
|
+
# Fetches the app version from the given pkg file.
|
21
|
+
def self.fetch_app_build(path)
|
22
|
+
xml = self.fetch_distribution_xml_file(path)
|
23
|
+
return xml.elements['installer-gui-script/pkg-ref/bundle-version/bundle'].attributes['CFBundleVersion'] if xml
|
24
|
+
return nil
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.fetch_distribution_xml_file(path)
|
28
|
+
Dir.mktmpdir do |dir|
|
29
|
+
Helper.backticks("xar -C #{dir.shellescape} -xf #{path.shellescape}")
|
30
|
+
|
31
|
+
Dir.foreach(dir) do |file|
|
32
|
+
next unless file.include?('Distribution')
|
33
|
+
|
34
|
+
begin
|
35
|
+
content = File.open(File.join(dir, file))
|
36
|
+
xml = REXML::Document.new(content)
|
37
|
+
|
38
|
+
if xml.elements['installer-gui-script/product']
|
39
|
+
return xml
|
40
|
+
end
|
41
|
+
rescue => ex
|
42
|
+
UI.error(ex)
|
43
|
+
UI.error("Error parsing *.pkg distribution xml #{File.join(dir, file)}")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
nil
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'digest/md5'
|
2
|
+
|
3
|
+
require_relative 'globals'
|
4
|
+
require_relative 'ui/ui'
|
5
|
+
require_relative 'module'
|
6
|
+
|
7
|
+
module FastlaneCore
|
8
|
+
# Builds a package for the pkg ready to be uploaded with the iTunes Transporter
|
9
|
+
class PkgUploadPackageBuilder
|
10
|
+
METADATA_FILE_NAME = 'metadata.xml'
|
11
|
+
|
12
|
+
attr_accessor :package_path
|
13
|
+
|
14
|
+
def generate(app_id: nil, pkg_path: nil, package_path: nil, platform: "osx")
|
15
|
+
self.package_path = File.join(package_path, "#{app_id}.itmsp")
|
16
|
+
FileUtils.rm_rf(self.package_path) if File.directory?(self.package_path)
|
17
|
+
FileUtils.mkdir_p(self.package_path)
|
18
|
+
|
19
|
+
pkg_path = copy_pkg(pkg_path)
|
20
|
+
@data = {
|
21
|
+
apple_id: app_id,
|
22
|
+
file_size: File.size(pkg_path),
|
23
|
+
ipa_path: File.basename(pkg_path), # this is only the base name as the ipa is inside the package
|
24
|
+
md5: Digest::MD5.hexdigest(File.read(pkg_path)),
|
25
|
+
archive_type: 'product-archive',
|
26
|
+
platform: platform
|
27
|
+
}
|
28
|
+
|
29
|
+
xml_path = File.join(FastlaneCore::ROOT, 'lib/assets/XMLTemplate.xml.erb')
|
30
|
+
xml = ERB.new(File.read(xml_path)).result(binding) # https://web.archive.org/web/20160430190141/www.rrn.dk/rubys-erb-templating-system
|
31
|
+
|
32
|
+
File.write(File.join(self.package_path, METADATA_FILE_NAME), xml)
|
33
|
+
UI.success("Wrote XML data to '#{self.package_path}'") if FastlaneCore::Globals.verbose?
|
34
|
+
|
35
|
+
package_path
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def copy_pkg(pkg_path)
|
41
|
+
ipa_file_name = Digest::MD5.hexdigest(pkg_path)
|
42
|
+
resulting_path = File.join(self.package_path, "#{ipa_file_name}.pkg")
|
43
|
+
FileUtils.cp(pkg_path, resulting_path)
|
44
|
+
|
45
|
+
resulting_path
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require_relative 'configuration/configuration'
|
2
|
+
require_relative 'helper'
|
3
|
+
|
4
|
+
module FastlaneCore
|
5
|
+
class PrintTable
|
6
|
+
class << self
|
7
|
+
# This method prints out all the user inputs in a nice table. Useful to summarize the run
|
8
|
+
# You can pass an array to `hide_keys` if you don't want certain elements to show up (symbols or strings)
|
9
|
+
# You can pass an array to `mask_keys` if you want to mask certain elements (symbols or strings)
|
10
|
+
def print_values(config: nil, title: nil, hide_keys: [], mask_keys: [], transform: :newline)
|
11
|
+
require 'terminal-table'
|
12
|
+
|
13
|
+
options = {}
|
14
|
+
unless config.nil?
|
15
|
+
if config.kind_of?(FastlaneCore::Configuration)
|
16
|
+
# find sensitive options and mask them by default
|
17
|
+
config.available_options.each do |config_item|
|
18
|
+
if config_item.sensitive
|
19
|
+
mask_keys << config_item.key.to_s
|
20
|
+
end
|
21
|
+
end
|
22
|
+
options = config.values(ask: false)
|
23
|
+
else
|
24
|
+
options = config
|
25
|
+
end
|
26
|
+
end
|
27
|
+
rows = self.collect_rows(options: options, hide_keys: hide_keys.map(&:to_s), mask_keys: mask_keys.map(&:to_s), prefix: '')
|
28
|
+
|
29
|
+
params = {}
|
30
|
+
|
31
|
+
if transform
|
32
|
+
params[:rows] = transform_output(rows, transform: transform)
|
33
|
+
else
|
34
|
+
params[:rows] = rows
|
35
|
+
end
|
36
|
+
|
37
|
+
params[:title] = title.green if title
|
38
|
+
|
39
|
+
puts("")
|
40
|
+
puts(Terminal::Table.new(params))
|
41
|
+
puts("")
|
42
|
+
|
43
|
+
return params
|
44
|
+
end
|
45
|
+
|
46
|
+
def colorize_array(array, colors)
|
47
|
+
value = ""
|
48
|
+
array.each do |l|
|
49
|
+
colored_line = l
|
50
|
+
colored_line = "#{colors.first}#{l}#{colors.last}" if colors.length > 0
|
51
|
+
value << colored_line
|
52
|
+
value << "\n"
|
53
|
+
end
|
54
|
+
return value
|
55
|
+
end
|
56
|
+
|
57
|
+
def should_transform?
|
58
|
+
if FastlaneCore::Helper.ci? || FastlaneCore::Helper.test?
|
59
|
+
return false
|
60
|
+
end
|
61
|
+
return !FastlaneCore::Env.truthy?("FL_SKIP_TABLE_TRANSFORM")
|
62
|
+
end
|
63
|
+
|
64
|
+
def transform_row(column, transform, max_value_length)
|
65
|
+
return column if column.nil? # we want to keep the nil and not convert it to a string
|
66
|
+
return column if transform.nil?
|
67
|
+
|
68
|
+
value = column.to_s.dup
|
69
|
+
|
70
|
+
if transform == :truncate_middle
|
71
|
+
return value.middle_truncate(max_value_length)
|
72
|
+
elsif transform == :newline
|
73
|
+
# remove all fixed newlines as it may mess up the output
|
74
|
+
value.gsub!("\n", " ") if value.kind_of?(String)
|
75
|
+
if value.length >= max_value_length
|
76
|
+
colors = value.scan(/\e\[.*?m/)
|
77
|
+
colors.each { |color| value.gsub!(color, '') }
|
78
|
+
lines = value.wordwrap(max_value_length)
|
79
|
+
return colorize_array(lines, colors)
|
80
|
+
end
|
81
|
+
elsif transform
|
82
|
+
UI.user_error!("Unknown transform value '#{transform}'")
|
83
|
+
end
|
84
|
+
return value
|
85
|
+
end
|
86
|
+
|
87
|
+
def transform_output(rows, transform: :newline)
|
88
|
+
return rows unless should_transform?
|
89
|
+
|
90
|
+
require 'fastlane_core/string_filters'
|
91
|
+
require 'tty-screen'
|
92
|
+
|
93
|
+
number_of_cols = TTY::Screen.width
|
94
|
+
|
95
|
+
col_count = rows.map(&:length).first || 1
|
96
|
+
|
97
|
+
# -4 per column - as tt adds "| " and " |"
|
98
|
+
terminal_table_padding = 4
|
99
|
+
max_length = number_of_cols - (col_count * terminal_table_padding)
|
100
|
+
|
101
|
+
max_value_length = (max_length / col_count) - 1
|
102
|
+
|
103
|
+
return_array = rows.map do |row|
|
104
|
+
row.map do |column|
|
105
|
+
transform_row(column, transform, max_value_length)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
return return_array
|
109
|
+
end
|
110
|
+
|
111
|
+
def collect_rows(options: nil, hide_keys: [], mask_keys: [], prefix: '', mask: '********')
|
112
|
+
rows = []
|
113
|
+
|
114
|
+
options.each do |key, value|
|
115
|
+
prefixed_key = "#{prefix}#{key}"
|
116
|
+
next if value.nil?
|
117
|
+
next if value.to_s == ""
|
118
|
+
next if hide_keys.include?(prefixed_key)
|
119
|
+
value = mask if mask_keys.include?(prefixed_key)
|
120
|
+
|
121
|
+
if value.respond_to?(:key)
|
122
|
+
rows.concat(self.collect_rows(options: value, hide_keys: hide_keys, mask_keys: mask_keys, prefix: "#{prefix}#{key}.", mask: mask))
|
123
|
+
else
|
124
|
+
rows << [prefixed_key, value]
|
125
|
+
end
|
126
|
+
end
|
127
|
+
rows
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,509 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
require 'xcodeproj'
|
3
|
+
require 'fastlane_core/command_executor'
|
4
|
+
|
5
|
+
module FastlaneCore
|
6
|
+
# Represents an Xcode project
|
7
|
+
class Project # rubocop:disable Metrics/ClassLength
|
8
|
+
class << self
|
9
|
+
# Project discovery
|
10
|
+
def detect_projects(config)
|
11
|
+
if config[:workspace].to_s.length > 0 && config[:project].to_s.length > 0
|
12
|
+
UI.user_error!("You can only pass either a workspace or a project path, not both")
|
13
|
+
end
|
14
|
+
|
15
|
+
return if config[:project].to_s.length > 0
|
16
|
+
|
17
|
+
if config[:workspace].to_s.length == 0
|
18
|
+
workspace = Dir["./*.xcworkspace"]
|
19
|
+
if workspace.count > 1
|
20
|
+
puts("Select Workspace: ")
|
21
|
+
config[:workspace] = choose(*workspace)
|
22
|
+
elsif !workspace.first.nil?
|
23
|
+
config[:workspace] = workspace.first
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
return if config[:workspace].to_s.length > 0
|
28
|
+
|
29
|
+
if config[:workspace].to_s.length == 0 && config[:project].to_s.length == 0
|
30
|
+
project = Dir["./*.xcodeproj"]
|
31
|
+
if project.count > 1
|
32
|
+
puts("Select Project: ")
|
33
|
+
config[:project] = choose(*project)
|
34
|
+
elsif !project.first.nil?
|
35
|
+
config[:project] = project.first
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
if config[:workspace].nil? && config[:project].nil?
|
40
|
+
select_project(config)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def select_project(config)
|
45
|
+
loop do
|
46
|
+
path = UI.input("Couldn't automatically detect the project file, please provide a path: ")
|
47
|
+
if File.directory?(path)
|
48
|
+
if path.end_with?(".xcworkspace")
|
49
|
+
config[:workspace] = path
|
50
|
+
break
|
51
|
+
elsif path.end_with?(".xcodeproj")
|
52
|
+
config[:project] = path
|
53
|
+
break
|
54
|
+
else
|
55
|
+
UI.error("Path must end with either .xcworkspace or .xcodeproj")
|
56
|
+
end
|
57
|
+
else
|
58
|
+
UI.error("Couldn't find project at path '#{File.expand_path(path)}'")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Path to the project/workspace
|
65
|
+
attr_accessor :path
|
66
|
+
|
67
|
+
# Is this project a workspace?
|
68
|
+
attr_accessor :is_workspace
|
69
|
+
|
70
|
+
# The config object containing the scheme, configuration, etc.
|
71
|
+
attr_accessor :options
|
72
|
+
|
73
|
+
# Should the output of xcodebuild commands be silenced?
|
74
|
+
attr_accessor :xcodebuild_list_silent
|
75
|
+
|
76
|
+
# Should we redirect stderr to /dev/null for xcodebuild commands?
|
77
|
+
# Gets rid of annoying plugin info warnings.
|
78
|
+
attr_accessor :xcodebuild_suppress_stderr
|
79
|
+
|
80
|
+
def initialize(options, xcodebuild_list_silent: false, xcodebuild_suppress_stderr: false)
|
81
|
+
self.options = options
|
82
|
+
self.path = File.expand_path(options[:workspace] || options[:project])
|
83
|
+
self.is_workspace = (options[:workspace].to_s.length > 0)
|
84
|
+
self.xcodebuild_list_silent = xcodebuild_list_silent
|
85
|
+
self.xcodebuild_suppress_stderr = xcodebuild_suppress_stderr
|
86
|
+
|
87
|
+
if !path || !File.directory?(path)
|
88
|
+
UI.user_error!("Could not find project at path '#{path}'")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def workspace?
|
93
|
+
self.is_workspace
|
94
|
+
end
|
95
|
+
|
96
|
+
def project_name
|
97
|
+
if is_workspace
|
98
|
+
return File.basename(options[:workspace], ".xcworkspace")
|
99
|
+
else
|
100
|
+
return File.basename(options[:project], ".xcodeproj")
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# returns the Xcodeproj::Workspace or nil if it is a project
|
105
|
+
def workspace
|
106
|
+
return nil unless workspace?
|
107
|
+
|
108
|
+
@workspace ||= Xcodeproj::Workspace.new_from_xcworkspace(path)
|
109
|
+
@workspace
|
110
|
+
end
|
111
|
+
|
112
|
+
# returns the Xcodeproj::Project or nil if it is a workspace
|
113
|
+
def project
|
114
|
+
return nil if workspace?
|
115
|
+
@project ||= Xcodeproj::Project.open(path)
|
116
|
+
end
|
117
|
+
|
118
|
+
# Get all available schemes in an array
|
119
|
+
def schemes
|
120
|
+
@schemes ||= if workspace?
|
121
|
+
workspace.schemes.reject do |k, v|
|
122
|
+
v.include?("Pods/Pods.xcodeproj")
|
123
|
+
end.keys
|
124
|
+
else
|
125
|
+
Xcodeproj::Project.schemes(path)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# Let the user select a scheme
|
130
|
+
# Use a scheme containing the preferred_to_include string when multiple schemes were found
|
131
|
+
def select_scheme(preferred_to_include: nil)
|
132
|
+
if options[:scheme].to_s.length > 0
|
133
|
+
# Verify the scheme is available
|
134
|
+
unless schemes.include?(options[:scheme].to_s)
|
135
|
+
UI.error("Couldn't find specified scheme '#{options[:scheme]}'. Please make sure that the scheme is shared, see https://developer.apple.com/library/content/documentation/IDEs/Conceptual/xcode_guide-continuous_integration/ConfigureBots.html#//apple_ref/doc/uid/TP40013292-CH9-SW3")
|
136
|
+
options[:scheme] = nil
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
return if options[:scheme].to_s.length > 0
|
141
|
+
|
142
|
+
if schemes.count == 1
|
143
|
+
options[:scheme] = schemes.last
|
144
|
+
elsif schemes.count > 1
|
145
|
+
preferred = nil
|
146
|
+
if preferred_to_include
|
147
|
+
preferred = schemes.find_all { |a| a.downcase.include?(preferred_to_include.downcase) }
|
148
|
+
end
|
149
|
+
|
150
|
+
if preferred_to_include && preferred.count == 1
|
151
|
+
options[:scheme] = preferred.last
|
152
|
+
elsif automated_scheme_selection? && schemes.include?(project_name)
|
153
|
+
UI.important("Using scheme matching project name (#{project_name}).")
|
154
|
+
options[:scheme] = project_name
|
155
|
+
elsif Helper.ci?
|
156
|
+
UI.error("Multiple schemes found but you haven't specified one.")
|
157
|
+
UI.error("Since this is a CI, please pass one using the `scheme` option")
|
158
|
+
show_scheme_shared_information
|
159
|
+
UI.user_error!("Multiple schemes found")
|
160
|
+
else
|
161
|
+
puts("Select Scheme: ")
|
162
|
+
options[:scheme] = choose(*schemes)
|
163
|
+
end
|
164
|
+
else
|
165
|
+
show_scheme_shared_information
|
166
|
+
|
167
|
+
UI.user_error!("No Schemes found")
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def show_scheme_shared_information
|
172
|
+
UI.error("Couldn't find any schemes in this project, make sure that the scheme is shared if you are using a workspace")
|
173
|
+
UI.error("Open Xcode, click on `Manage Schemes` and check the `Shared` box for the schemes you want to use")
|
174
|
+
UI.error("Afterwards make sure to commit the changes into version control")
|
175
|
+
end
|
176
|
+
|
177
|
+
# Get all available configurations in an array
|
178
|
+
def configurations
|
179
|
+
@configurations ||= if workspace?
|
180
|
+
workspace
|
181
|
+
.file_references
|
182
|
+
.map(&:path)
|
183
|
+
.reject { |p| p.include?("Pods/Pods.xcodeproj") }
|
184
|
+
.map do |p|
|
185
|
+
# To maintain backwards compatibility, we
|
186
|
+
# silently ignore non-existent projects from
|
187
|
+
# workspaces.
|
188
|
+
begin
|
189
|
+
Xcodeproj::Project.open(p).build_configurations
|
190
|
+
rescue
|
191
|
+
[]
|
192
|
+
end
|
193
|
+
end
|
194
|
+
.flatten
|
195
|
+
.compact
|
196
|
+
.map(&:name)
|
197
|
+
else
|
198
|
+
project.build_configurations.map(&:name)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
# Returns bundle_id and sets the scheme for xcrun
|
203
|
+
def default_app_identifier
|
204
|
+
default_build_settings(key: "PRODUCT_BUNDLE_IDENTIFIER")
|
205
|
+
end
|
206
|
+
|
207
|
+
# Returns app name and sets the scheme for xcrun
|
208
|
+
def default_app_name
|
209
|
+
if is_workspace
|
210
|
+
return default_build_settings(key: "PRODUCT_NAME")
|
211
|
+
else
|
212
|
+
return app_name
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
def app_name
|
217
|
+
# WRAPPER_NAME: Example.app
|
218
|
+
# WRAPPER_SUFFIX: .app
|
219
|
+
name = build_settings(key: "WRAPPER_NAME")
|
220
|
+
|
221
|
+
return name.gsub(build_settings(key: "WRAPPER_SUFFIX"), "") if name
|
222
|
+
return "App" # default value
|
223
|
+
end
|
224
|
+
|
225
|
+
def dynamic_library?
|
226
|
+
(build_settings(key: "PRODUCT_TYPE") == "com.apple.product-type.library.dynamic")
|
227
|
+
end
|
228
|
+
|
229
|
+
def static_library?
|
230
|
+
(build_settings(key: "PRODUCT_TYPE") == "com.apple.product-type.library.static")
|
231
|
+
end
|
232
|
+
|
233
|
+
def library?
|
234
|
+
(static_library? || dynamic_library?)
|
235
|
+
end
|
236
|
+
|
237
|
+
def framework?
|
238
|
+
(build_settings(key: "PRODUCT_TYPE") == "com.apple.product-type.framework")
|
239
|
+
end
|
240
|
+
|
241
|
+
def application?
|
242
|
+
(build_settings(key: "PRODUCT_TYPE") == "com.apple.product-type.application")
|
243
|
+
end
|
244
|
+
|
245
|
+
def ios_library?
|
246
|
+
((static_library? or dynamic_library?) && build_settings(key: "PLATFORM_NAME") == "iphoneos")
|
247
|
+
end
|
248
|
+
|
249
|
+
def ios_tvos_app?
|
250
|
+
(ios? || tvos?)
|
251
|
+
end
|
252
|
+
|
253
|
+
def ios_framework?
|
254
|
+
(framework? && build_settings(key: "PLATFORM_NAME") == "iphoneos")
|
255
|
+
end
|
256
|
+
|
257
|
+
def ios_app?
|
258
|
+
(application? && build_settings(key: "PLATFORM_NAME") == "iphoneos")
|
259
|
+
end
|
260
|
+
|
261
|
+
def produces_archive?
|
262
|
+
!(framework? || static_library? || dynamic_library?)
|
263
|
+
end
|
264
|
+
|
265
|
+
def mac_app?
|
266
|
+
(application? && build_settings(key: "PLATFORM_NAME") == "macosx")
|
267
|
+
end
|
268
|
+
|
269
|
+
def mac_library?
|
270
|
+
((dynamic_library? or static_library?) && build_settings(key: "PLATFORM_NAME") == "macosx")
|
271
|
+
end
|
272
|
+
|
273
|
+
def mac_framework?
|
274
|
+
(framework? && build_settings(key: "PLATFORM_NAME") == "macosx")
|
275
|
+
end
|
276
|
+
|
277
|
+
def supports_mac_catalyst?
|
278
|
+
build_settings(key: "SUPPORTS_MACCATALYST") == "YES"
|
279
|
+
end
|
280
|
+
|
281
|
+
def command_line_tool?
|
282
|
+
(build_settings(key: "PRODUCT_TYPE") == "com.apple.product-type.tool")
|
283
|
+
end
|
284
|
+
|
285
|
+
def mac?
|
286
|
+
supported_platforms.include?(:macOS)
|
287
|
+
end
|
288
|
+
|
289
|
+
def tvos?
|
290
|
+
supported_platforms.include?(:tvOS)
|
291
|
+
end
|
292
|
+
|
293
|
+
def ios?
|
294
|
+
supported_platforms.include?(:iOS)
|
295
|
+
end
|
296
|
+
|
297
|
+
def watchos?
|
298
|
+
supported_platforms.include?(:watchOS)
|
299
|
+
end
|
300
|
+
|
301
|
+
def supported_platforms
|
302
|
+
supported_platforms = build_settings(key: "SUPPORTED_PLATFORMS")
|
303
|
+
if supported_platforms.nil?
|
304
|
+
UI.important("Could not read the \"SUPPORTED_PLATFORMS\" build setting, assuming that the project supports iOS only.")
|
305
|
+
return [:iOS]
|
306
|
+
end
|
307
|
+
supported_platforms.split.map do |platform|
|
308
|
+
case platform
|
309
|
+
when "macosx" then :macOS
|
310
|
+
when "iphonesimulator", "iphoneos" then :iOS
|
311
|
+
when "watchsimulator", "watchos" then :watchOS
|
312
|
+
when "appletvsimulator", "appletvos" then :tvOS
|
313
|
+
end
|
314
|
+
end.uniq.compact
|
315
|
+
end
|
316
|
+
|
317
|
+
def xcodebuild_parameters
|
318
|
+
proj = []
|
319
|
+
proj << "-workspace #{options[:workspace].shellescape}" if options[:workspace]
|
320
|
+
proj << "-scheme #{options[:scheme].shellescape}" if options[:scheme]
|
321
|
+
proj << "-project #{options[:project].shellescape}" if options[:project]
|
322
|
+
proj << "-configuration #{options[:configuration].shellescape}" if options[:configuration]
|
323
|
+
proj << "-derivedDataPath #{options[:derived_data_path].shellescape}" if options[:derived_data_path]
|
324
|
+
proj << "-xcconfig #{options[:xcconfig].shellescape}" if options[:xcconfig]
|
325
|
+
|
326
|
+
if FastlaneCore::Helper.xcode_at_least?('11.0') && options[:cloned_source_packages_path]
|
327
|
+
proj << "-clonedSourcePackagesDirPath #{options[:cloned_source_packages_path].shellescape}"
|
328
|
+
end
|
329
|
+
|
330
|
+
return proj
|
331
|
+
end
|
332
|
+
|
333
|
+
#####################################################
|
334
|
+
# @!group Raw Access
|
335
|
+
#####################################################
|
336
|
+
|
337
|
+
def build_xcodebuild_showbuildsettings_command
|
338
|
+
# We also need to pass the workspace and scheme to this command.
|
339
|
+
#
|
340
|
+
# The 'clean' portion of this command was a workaround for an xcodebuild bug with Core Data projects.
|
341
|
+
# This xcodebuild bug is fixed in Xcode 8.3 so 'clean' it's not necessary anymore
|
342
|
+
# See: https://github.com/fastlane/fastlane/pull/5626
|
343
|
+
if FastlaneCore::Helper.xcode_at_least?('8.3')
|
344
|
+
command = "xcodebuild -showBuildSettings #{xcodebuild_parameters.join(' ')}"
|
345
|
+
else
|
346
|
+
command = "xcodebuild clean -showBuildSettings #{xcodebuild_parameters.join(' ')}"
|
347
|
+
end
|
348
|
+
command += " 2> /dev/null" if xcodebuild_suppress_stderr
|
349
|
+
command
|
350
|
+
end
|
351
|
+
|
352
|
+
def build_xcodebuild_resolvepackagedependencies_command
|
353
|
+
command = "xcodebuild -resolvePackageDependencies #{xcodebuild_parameters.join(' ')}"
|
354
|
+
command += " 2> /dev/null" if xcodebuild_suppress_stderr
|
355
|
+
command
|
356
|
+
end
|
357
|
+
|
358
|
+
# Get the build settings for our project
|
359
|
+
# e.g. to properly get the DerivedData folder
|
360
|
+
# @param [String] The key of which we want the value for (e.g. "PRODUCT_NAME")
|
361
|
+
def build_settings(key: nil, optional: true)
|
362
|
+
unless @build_settings
|
363
|
+
if is_workspace
|
364
|
+
if schemes.count == 0
|
365
|
+
UI.user_error!("Could not find any schemes for Xcode workspace at path '#{self.path}'. Please make sure that the schemes you want to use are marked as `Shared` from Xcode.")
|
366
|
+
end
|
367
|
+
options[:scheme] ||= schemes.first
|
368
|
+
end
|
369
|
+
|
370
|
+
# SwiftPM support
|
371
|
+
if FastlaneCore::Helper.xcode_at_least?('11.0')
|
372
|
+
UI.important("Resolving Swift Package Manager dependencies...")
|
373
|
+
FastlaneCore::CommandExecutor.execute(command: build_xcodebuild_resolvepackagedependencies_command,
|
374
|
+
print_all: true,
|
375
|
+
print_command: !self.xcodebuild_list_silent)
|
376
|
+
end
|
377
|
+
|
378
|
+
command = build_xcodebuild_showbuildsettings_command
|
379
|
+
|
380
|
+
# Xcode might hang here and retrying fixes the problem, see fastlane#4059
|
381
|
+
begin
|
382
|
+
timeout = FastlaneCore::Project.xcode_build_settings_timeout
|
383
|
+
retries = FastlaneCore::Project.xcode_build_settings_retries
|
384
|
+
@build_settings = FastlaneCore::Project.run_command(command, timeout: timeout, retries: retries, print: !self.xcodebuild_list_silent)
|
385
|
+
if @build_settings.empty?
|
386
|
+
UI.error("Could not read build settings. Make sure that the scheme \"#{options[:scheme]}\" is configured for running by going to Product → Scheme → Edit Scheme…, selecting the \"Build\" section, checking the \"Run\" checkbox and closing the scheme window.")
|
387
|
+
end
|
388
|
+
rescue Timeout::Error
|
389
|
+
raise FastlaneCore::Interface::FastlaneDependencyCausedException.new, "xcodebuild -showBuildSettings timed out after #{retries + 1} retries with a base timeout of #{timeout}." \
|
390
|
+
" You can override the base timeout value with the environment variable FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT," \
|
391
|
+
" and the number of retries with the environment variable FASTLANE_XCODEBUILD_SETTINGS_RETRIES ".red
|
392
|
+
end
|
393
|
+
end
|
394
|
+
|
395
|
+
begin
|
396
|
+
result = @build_settings.split("\n").find do |c|
|
397
|
+
sp = c.split(" = ")
|
398
|
+
next if sp.length == 0
|
399
|
+
sp.first.strip == key
|
400
|
+
end
|
401
|
+
return result.split(" = ").last
|
402
|
+
rescue => ex
|
403
|
+
return nil if optional # an optional value, we really don't care if something goes wrong
|
404
|
+
|
405
|
+
UI.error(caller.join("\n\t"))
|
406
|
+
UI.error("Could not fetch #{key} from project file: #{ex}")
|
407
|
+
end
|
408
|
+
|
409
|
+
nil
|
410
|
+
end
|
411
|
+
|
412
|
+
# Returns the build settings and sets the default scheme to the options hash
|
413
|
+
def default_build_settings(key: nil, optional: true)
|
414
|
+
options[:scheme] ||= schemes.first if is_workspace
|
415
|
+
build_settings(key: key, optional: optional)
|
416
|
+
end
|
417
|
+
|
418
|
+
# @internal to module
|
419
|
+
def self.xcode_build_settings_timeout
|
420
|
+
(ENV['FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT'] || 3).to_i
|
421
|
+
end
|
422
|
+
|
423
|
+
# @internal to module
|
424
|
+
def self.xcode_build_settings_retries
|
425
|
+
(ENV['FASTLANE_XCODEBUILD_SETTINGS_RETRIES'] || 3).to_i
|
426
|
+
end
|
427
|
+
|
428
|
+
# @internal to module
|
429
|
+
# runs the specified command with the specified number of retries, killing each run if it times out.
|
430
|
+
# the first run times out after specified timeout elapses, and each successive run times out after
|
431
|
+
# a doubling of the previous timeout has elapsed.
|
432
|
+
# @raises Timeout::Error if all tries result in a timeout
|
433
|
+
# @returns the output of the command
|
434
|
+
# Note: - currently affected by https://github.com/fastlane/fastlane/issues/1504
|
435
|
+
# - retry feature added to solve https://github.com/fastlane/fastlane/issues/4059
|
436
|
+
def self.run_command(command, timeout: 0, retries: 0, print: true)
|
437
|
+
require 'timeout'
|
438
|
+
|
439
|
+
UI.command(command) if print
|
440
|
+
|
441
|
+
result = ''
|
442
|
+
|
443
|
+
total_tries = retries + 1
|
444
|
+
try = 1
|
445
|
+
try_timeout = timeout
|
446
|
+
begin
|
447
|
+
Timeout.timeout(try_timeout) do
|
448
|
+
# Using Helper.backticks didn't work here. `Timeout` doesn't time out, and the command hangs forever
|
449
|
+
result = `#{command}`.to_s
|
450
|
+
end
|
451
|
+
rescue Timeout::Error
|
452
|
+
try_limit_reached = try >= total_tries
|
453
|
+
|
454
|
+
# Try harder on each iteration
|
455
|
+
next_timeout = try_timeout * 2
|
456
|
+
|
457
|
+
message = "Command timed out after #{try_timeout} seconds on try #{try} of #{total_tries}"
|
458
|
+
message += ", trying again with a #{next_timeout} second timeout..." unless try_limit_reached
|
459
|
+
|
460
|
+
UI.important(message)
|
461
|
+
|
462
|
+
raise if try_limit_reached
|
463
|
+
|
464
|
+
try += 1
|
465
|
+
try_timeout = next_timeout
|
466
|
+
retry
|
467
|
+
end
|
468
|
+
|
469
|
+
return result
|
470
|
+
end
|
471
|
+
|
472
|
+
# Array of paths to all project files
|
473
|
+
# (might be multiple, because of workspaces)
|
474
|
+
def project_paths
|
475
|
+
return @_project_paths if @_project_paths
|
476
|
+
if self.workspace?
|
477
|
+
# Find the xcodeproj file, as the information isn't included in the workspace file
|
478
|
+
# We have a reference to the workspace, let's find the xcodeproj file
|
479
|
+
# Use Xcodeproj gem here to
|
480
|
+
# * parse the contents.xcworkspacedata XML file
|
481
|
+
# * handle different types (group:, container: etc.) of file references and their paths
|
482
|
+
# for details see https://github.com/CocoaPods/Xcodeproj/blob/e0287156d426ba588c9234bb2a4c824149889860/lib/xcodeproj/workspace/file_reference.rb```
|
483
|
+
|
484
|
+
workspace_dir_path = File.expand_path("..", self.path)
|
485
|
+
file_references_paths = workspace.file_references.map { |fr| fr.absolute_path(workspace_dir_path) }
|
486
|
+
@_project_paths = file_references_paths.select do |current_match|
|
487
|
+
# Xcode workspaces can contain loose files now, so let's filter non-xcodeproj files.
|
488
|
+
current_match.end_with?(".xcodeproj")
|
489
|
+
end.reject do |current_match|
|
490
|
+
# We're not interested in a `Pods` project, as it doesn't contain any relevant information about code signing
|
491
|
+
current_match.end_with?("Pods/Pods.xcodeproj")
|
492
|
+
end
|
493
|
+
|
494
|
+
return @_project_paths
|
495
|
+
else
|
496
|
+
# Return the path as an array
|
497
|
+
return @_project_paths = [path]
|
498
|
+
end
|
499
|
+
end
|
500
|
+
|
501
|
+
private
|
502
|
+
|
503
|
+
# If scheme not specified, do we want the scheme
|
504
|
+
# matching project name?
|
505
|
+
def automated_scheme_selection?
|
506
|
+
FastlaneCore::Env.truthy?("AUTOMATED_SCHEME_SELECTION")
|
507
|
+
end
|
508
|
+
end
|
509
|
+
end
|