nativescript 8.9.0-dev.2 → 8.9.0-dev.4
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.
- package/config/test-deps-versions-generated.json +1 -1
- package/docs/man_pages/project/configuration/widget-ios.md +24 -0
- package/docs/man_pages/project/configuration/widget.md +24 -0
- package/docs/man_pages/start.md +1 -1
- package/lib/android-tools-info.js +11 -22
- package/lib/base-package-manager.js +53 -70
- package/lib/bun-package-manager.js +75 -98
- package/lib/color.js +4 -4
- package/lib/commands/add-platform.js +14 -30
- package/lib/commands/apple-login.js +18 -29
- package/lib/commands/appstore-list.js +34 -45
- package/lib/commands/appstore-upload.js +54 -67
- package/lib/commands/build.js +55 -87
- package/lib/commands/clean.js +169 -184
- package/lib/commands/command-base.js +14 -27
- package/lib/commands/config.js +49 -68
- package/lib/commands/create-project.js +215 -234
- package/lib/commands/debug.js +66 -88
- package/lib/commands/deploy.js +28 -44
- package/lib/commands/embedding/embed.js +37 -56
- package/lib/commands/extensibility/install-extension.js +5 -16
- package/lib/commands/extensibility/list-extensions.js +13 -24
- package/lib/commands/extensibility/uninstall-extension.js +4 -15
- package/lib/commands/fonts.js +30 -41
- package/lib/commands/generate-assets.js +13 -28
- package/lib/commands/generate-help.js +2 -13
- package/lib/commands/generate.js +49 -60
- package/lib/commands/info.js +2 -13
- package/lib/commands/install.js +34 -49
- package/lib/commands/list-platforms.js +14 -25
- package/lib/commands/migrate.js +15 -26
- package/lib/commands/native-add.js +23 -46
- package/lib/commands/platform-clean.js +19 -32
- package/lib/commands/plugin/add-plugin.js +12 -25
- package/lib/commands/plugin/build-plugin.js +31 -44
- package/lib/commands/plugin/create-plugin.js +114 -137
- package/lib/commands/plugin/list-plugins.js +22 -33
- package/lib/commands/plugin/remove-plugin.js +21 -34
- package/lib/commands/plugin/update-plugin.js +20 -33
- package/lib/commands/post-install.js +25 -38
- package/lib/commands/prepare.js +19 -35
- package/lib/commands/preview.js +50 -63
- package/lib/commands/remove-platform.js +7 -18
- package/lib/commands/resources/resources-update.js +14 -27
- package/lib/commands/run.js +55 -76
- package/lib/commands/start.js +6 -19
- package/lib/commands/test-init.js +126 -137
- package/lib/commands/test.js +72 -95
- package/lib/commands/typings.js +126 -142
- package/lib/commands/update-platform.js +26 -39
- package/lib/commands/update.js +31 -44
- package/lib/commands/widget.js +408 -357
- package/lib/common/child-process.js +53 -72
- package/lib/common/codeGeneration/code-entity.js +1 -1
- package/lib/common/codeGeneration/code-printer.js +1 -1
- package/lib/common/command-params.js +7 -18
- package/lib/common/commands/analytics.js +29 -42
- package/lib/common/commands/autocompletion.js +41 -58
- package/lib/common/commands/device/device-log-stream.js +12 -23
- package/lib/common/commands/device/get-file.js +23 -34
- package/lib/common/commands/device/list-applications.js +12 -23
- package/lib/common/commands/device/list-devices.js +72 -87
- package/lib/common/commands/device/list-files.js +24 -35
- package/lib/common/commands/device/put-file.js +23 -34
- package/lib/common/commands/device/run-application.js +12 -25
- package/lib/common/commands/device/stop-application.js +11 -22
- package/lib/common/commands/device/uninstall-application.js +6 -17
- package/lib/common/commands/generate-messages.js +17 -28
- package/lib/common/commands/help.js +20 -33
- package/lib/common/commands/package-manager-get.js +6 -17
- package/lib/common/commands/package-manager-set.js +9 -20
- package/lib/common/commands/post-install.js +2 -13
- package/lib/common/commands/preuninstall.js +27 -42
- package/lib/common/commands/proxy/proxy-base.js +11 -22
- package/lib/common/commands/proxy/proxy-clear.js +4 -15
- package/lib/common/commands/proxy/proxy-get.js +3 -14
- package/lib/common/commands/proxy/proxy-set.js +87 -100
- package/lib/common/constants.js +11 -11
- package/lib/common/decorators.js +10 -22
- package/lib/common/dispatchers.js +84 -101
- package/lib/common/errors.js +92 -107
- package/lib/common/file-system.js +110 -132
- package/lib/common/header.js +1 -2
- package/lib/common/helpers.js +149 -178
- package/lib/common/host-info.js +40 -53
- package/lib/common/http-client.js +104 -119
- package/lib/common/logger/appenders/cli-appender.js +1 -2
- package/lib/common/logger/appenders/emit-appender.js +1 -2
- package/lib/common/logger/layouts/cli-layout.js +1 -2
- package/lib/common/logger/logger.js +4 -4
- package/lib/common/mobile/android/android-application-manager.js +138 -159
- package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -1
- package/lib/common/mobile/android/android-debug-bridge.js +92 -117
- package/lib/common/mobile/android/android-device-file-system.js +101 -134
- package/lib/common/mobile/android/android-device-hash-service.js +52 -77
- package/lib/common/mobile/android/android-device.js +73 -90
- package/lib/common/mobile/android/android-emulator-services.js +105 -130
- package/lib/common/mobile/android/android-log-filter.js +1 -1
- package/lib/common/mobile/android/android-virtual-device-service.js +78 -99
- package/lib/common/mobile/android/device-android-debug-bridge.js +13 -29
- package/lib/common/mobile/android/genymotion/genymotion-service.js +94 -121
- package/lib/common/mobile/android/genymotion/virtualbox-service.js +74 -91
- package/lib/common/mobile/android/logcat-helper.js +114 -133
- package/lib/common/mobile/application-manager-base.js +89 -112
- package/lib/common/mobile/device-log-provider-base.js +7 -18
- package/lib/common/mobile/ios/device/ios-application-manager.js +79 -108
- package/lib/common/mobile/ios/device/ios-device-file-system.js +78 -105
- package/lib/common/mobile/ios/device/ios-device-operations.js +106 -143
- package/lib/common/mobile/ios/device/ios-device.js +20 -36
- package/lib/common/mobile/ios/ios-device-base.js +58 -81
- package/lib/common/mobile/ios/simulator/ios-emulator-services.js +66 -95
- package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -1
- package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +61 -90
- package/lib/common/mobile/ios/simulator/ios-simulator-device.js +31 -47
- package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +37 -62
- package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +24 -35
- package/lib/common/mobile/mobile-core/android-device-discovery.js +44 -63
- package/lib/common/mobile/mobile-core/android-emulator-discovery.js +23 -34
- package/lib/common/mobile/mobile-core/android-process-service.js +174 -213
- package/lib/common/mobile/mobile-core/device-discovery.js +2 -13
- package/lib/common/mobile/mobile-core/devices-service.js +400 -450
- package/lib/common/mobile/mobile-core/ios-device-discovery.js +25 -36
- package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +49 -64
- package/lib/common/mobile/mobile-helper.js +15 -26
- package/lib/common/mobile/wp8/wp8-emulator-services.js +25 -52
- package/lib/common/opener.js +2 -2
- package/lib/common/prompter.js +91 -106
- package/lib/common/queue.js +9 -20
- package/lib/common/services/auto-completion-service.js +40 -53
- package/lib/common/services/cancellation.js +17 -28
- package/lib/common/services/commands-service.js +156 -179
- package/lib/common/services/help-service.js +130 -155
- package/lib/common/services/hooks-service.js +99 -114
- package/lib/common/services/ios-notification-service.js +21 -34
- package/lib/common/services/json-file-settings-service.js +56 -75
- package/lib/common/services/lock-service.js +35 -52
- package/lib/common/services/message-contract-generator.js +35 -46
- package/lib/common/services/micro-templating-service.js +6 -17
- package/lib/common/services/net-service.js +92 -109
- package/lib/common/services/project-files-manager.js +10 -23
- package/lib/common/services/proxy-service.js +13 -24
- package/lib/common/services/qr.js +13 -24
- package/lib/common/services/settings-service.js +1 -1
- package/lib/common/services/xcode-select-service.js +20 -35
- package/lib/common/utils.js +2 -2
- package/lib/common/validators/project-name-validator.js +1 -1
- package/lib/common/validators/validation-result.js +1 -1
- package/lib/common/verify-node-version.js +2 -3
- package/lib/common/yok.js +25 -38
- package/lib/config.js +41 -56
- package/lib/constants.js +24 -24
- package/lib/controllers/build-controller.js +82 -99
- package/lib/controllers/debug-controller.js +111 -132
- package/lib/controllers/deploy-controller.js +15 -23
- package/lib/controllers/migrate-controller.js +780 -853
- package/lib/controllers/platform-controller.js +74 -89
- package/lib/controllers/prepare-controller.js +241 -270
- package/lib/controllers/run-controller.js +411 -425
- package/lib/controllers/update-controller-base.js +16 -29
- package/lib/controllers/update-controller.js +101 -126
- package/lib/data/prepare-data.js +4 -1
- package/lib/definitions/project.d.ts +24 -24
- package/lib/detached-processes/cleanup-js-subprocess.js +3 -12
- package/lib/detached-processes/cleanup-process.js +16 -25
- package/lib/device-path-provider.js +23 -34
- package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +155 -170
- package/lib/device-sockets/ios/notification.js +1 -1
- package/lib/device-sockets/ios/socket-request-executor.js +26 -41
- package/lib/helpers/android-bundle-validator-helper.js +1 -1
- package/lib/helpers/deploy-command-helper.js +44 -49
- package/lib/helpers/key-command-helper.js +4 -13
- package/lib/helpers/livesync-command-helper.js +138 -153
- package/lib/helpers/network-connectivity-validator.js +6 -17
- package/lib/helpers/options-track-helper.js +6 -17
- package/lib/helpers/platform-command-helper.js +103 -124
- package/lib/key-commands/index.js +150 -200
- package/lib/nativescript-cli.js +5 -14
- package/lib/node-package-manager.js +90 -113
- package/lib/options.js +4 -13
- package/lib/package-installation-manager.js +132 -167
- package/lib/package-manager.js +64 -87
- package/lib/platform-command-param.js +4 -15
- package/lib/pnpm-package-manager.js +60 -79
- package/lib/project-data.js +1 -1
- package/lib/providers/project-files-provider.js +1 -1
- package/lib/services/analytics/analytics-broker-process.js +13 -22
- package/lib/services/analytics/analytics-broker.js +17 -30
- package/lib/services/analytics/analytics-service.js +165 -201
- package/lib/services/analytics/google-analytics-provider.js +41 -56
- package/lib/services/analytics-settings-service.js +15 -32
- package/lib/services/android/android-bundle-tool-service.js +43 -60
- package/lib/services/android/gradle-build-args-service.js +10 -21
- package/lib/services/android/gradle-build-service.js +22 -35
- package/lib/services/android/gradle-command-service.js +22 -35
- package/lib/services/android-device-debug-service.js +92 -119
- package/lib/services/android-plugin-build-service.js +219 -245
- package/lib/services/android-project-service.js +134 -179
- package/lib/services/android-resources-migration-service.js +57 -70
- package/lib/services/apple-portal/apple-portal-application-service.js +46 -63
- package/lib/services/apple-portal/apple-portal-session-service.js +196 -215
- package/lib/services/apple-portal/srp/srp-wrapper.js +45 -60
- package/lib/services/assets-generation/assets-generation-service.js +114 -128
- package/lib/services/build-artifacts-service.js +9 -20
- package/lib/services/build-info-file-service.js +20 -35
- package/lib/services/cleanup-service.js +47 -76
- package/lib/services/cocoapods-service.js +124 -145
- package/lib/services/device/device-install-app-service.js +54 -71
- package/lib/services/doctor-service.js +106 -125
- package/lib/services/extensibility-service.js +87 -106
- package/lib/services/files-hash-service.js +26 -43
- package/lib/services/hmr-status-service.js +1 -1
- package/lib/services/initialize-service.js +38 -51
- package/lib/services/ios/export-options-plist-service.js +41 -54
- package/lib/services/ios/ios-signing-service.js +171 -190
- package/lib/services/ios/spm-service.js +52 -65
- package/lib/services/ios/xcodebuild-args-service.js +77 -94
- package/lib/services/ios/xcodebuild-command-service.js +14 -25
- package/lib/services/ios/xcodebuild-service.js +52 -71
- package/lib/services/ios-debugger-port-service.js +24 -37
- package/lib/services/ios-device-debug-service.js +75 -102
- package/lib/services/ios-entitlements-service.js +31 -42
- package/lib/services/ios-extensions-service.js +18 -29
- package/lib/services/ios-project-service.js +530 -591
- package/lib/services/ios-provision-service.js +110 -131
- package/lib/services/ios-watch-app-service.js +21 -32
- package/lib/services/ip-service.js +39 -54
- package/lib/services/itmstransporter-service.js +129 -152
- package/lib/services/livesync/android-device-livesync-service-base.js +31 -48
- package/lib/services/livesync/android-device-livesync-service.js +121 -150
- package/lib/services/livesync/android-device-livesync-sockets-service.js +123 -154
- package/lib/services/livesync/android-livesync-service.js +14 -35
- package/lib/services/livesync/android-livesync-tool.js +90 -113
- package/lib/services/livesync/device-livesync-service-base.js +16 -29
- package/lib/services/livesync/ios-device-livesync-service.js +120 -149
- package/lib/services/livesync/ios-livesync-service.js +43 -59
- package/lib/services/livesync/platform-livesync-service-base.js +98 -123
- package/lib/services/log-parser-service.js +1 -1
- package/lib/services/log-source-map-service.js +31 -42
- package/lib/services/marking-mode-service.js +17 -30
- package/lib/services/npm-config-service.js +1 -1
- package/lib/services/pacote-service.js +54 -69
- package/lib/services/performance-service.js +1 -1
- package/lib/services/platform/add-platform-service.js +57 -78
- package/lib/services/platform/platform-validation-service.js +22 -33
- package/lib/services/platform/prepare-native-platform-service.js +51 -64
- package/lib/services/platform-environment-requirements.js +27 -38
- package/lib/services/plugins-service.js +126 -151
- package/lib/services/project-backup-service.js +1 -1
- package/lib/services/project-changes-service.js +126 -143
- package/lib/services/project-cleanup-service.js +65 -78
- package/lib/services/project-config-service.js +78 -88
- package/lib/services/project-data-service.js +112 -129
- package/lib/services/project-name-service.js +28 -43
- package/lib/services/project-service.js +90 -109
- package/lib/services/project-templates-service.js +52 -67
- package/lib/services/start-service.js +41 -59
- package/lib/services/temp-service.js +8 -21
- package/lib/services/terminal-spinner-service.js +15 -26
- package/lib/services/test-execution-service.js +64 -77
- package/lib/services/test-initialization-service.js +2 -2
- package/lib/services/timeline-profiler-service.js +1 -1
- package/lib/services/versions-service.js +120 -139
- package/lib/services/webpack/webpack-compiler-service.js +228 -251
- package/lib/services/xcconfig-service.js +8 -19
- package/lib/sys-info.js +45 -62
- package/lib/tools/node-modules/node-modules-builder.js +16 -27
- package/lib/yarn-package-manager.js +59 -78
- package/lib/yarn2-package-manager.js +62 -81
- package/package.json +67 -82
- package/node_modules/@npmcli/move-file/LICENSE.md +0 -22
- package/node_modules/@npmcli/move-file/README.md +0 -69
- package/node_modules/@npmcli/move-file/lib/index.js +0 -185
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/LICENSE +0 -21
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/bin/cmd.js +0 -68
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/index.js +0 -31
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/find-made.js +0 -29
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-manual.js +0 -64
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-native.js +0 -39
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/opts-arg.js +0 -23
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/path-arg.js +0 -29
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/use-native.js +0 -10
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/package.json +0 -44
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/readme.markdown +0 -266
- package/node_modules/@npmcli/move-file/package.json +0 -47
- package/node_modules/balanced-match/.github/FUNDING.yml +0 -2
- package/node_modules/balanced-match/LICENSE.md +0 -21
- package/node_modules/balanced-match/README.md +0 -97
- package/node_modules/balanced-match/index.js +0 -62
- package/node_modules/balanced-match/package.json +0 -48
- package/node_modules/concat-map/.travis.yml +0 -4
- package/node_modules/concat-map/LICENSE +0 -18
- package/node_modules/concat-map/README.markdown +0 -62
- package/node_modules/concat-map/example/map.js +0 -6
- package/node_modules/concat-map/index.js +0 -13
- package/node_modules/concat-map/package.json +0 -43
- package/node_modules/concat-map/test/map.js +0 -39
- package/node_modules/fs.realpath/LICENSE +0 -43
- package/node_modules/fs.realpath/README.md +0 -33
- package/node_modules/fs.realpath/index.js +0 -66
- package/node_modules/fs.realpath/old.js +0 -303
- package/node_modules/fs.realpath/package.json +0 -26
- package/node_modules/inflight/LICENSE +0 -15
- package/node_modules/inflight/README.md +0 -37
- package/node_modules/inflight/inflight.js +0 -54
- package/node_modules/inflight/package.json +0 -29
- package/node_modules/inherits/LICENSE +0 -16
- package/node_modules/inherits/README.md +0 -42
- package/node_modules/inherits/inherits.js +0 -9
- package/node_modules/inherits/inherits_browser.js +0 -27
- package/node_modules/inherits/package.json +0 -29
- package/node_modules/once/LICENSE +0 -15
- package/node_modules/once/README.md +0 -79
- package/node_modules/once/once.js +0 -42
- package/node_modules/once/package.json +0 -33
- package/node_modules/path-is-absolute/index.js +0 -20
- package/node_modules/path-is-absolute/license +0 -21
- package/node_modules/path-is-absolute/package.json +0 -43
- package/node_modules/path-is-absolute/readme.md +0 -59
- package/node_modules/rimraf/LICENSE +0 -15
- package/node_modules/rimraf/README.md +0 -101
- package/node_modules/rimraf/bin.js +0 -68
- package/node_modules/rimraf/node_modules/brace-expansion/LICENSE +0 -21
- package/node_modules/rimraf/node_modules/brace-expansion/README.md +0 -129
- package/node_modules/rimraf/node_modules/brace-expansion/index.js +0 -201
- package/node_modules/rimraf/node_modules/brace-expansion/package.json +0 -47
- package/node_modules/rimraf/node_modules/glob/LICENSE +0 -21
- package/node_modules/rimraf/node_modules/glob/README.md +0 -378
- package/node_modules/rimraf/node_modules/glob/common.js +0 -238
- package/node_modules/rimraf/node_modules/glob/glob.js +0 -790
- package/node_modules/rimraf/node_modules/glob/package.json +0 -55
- package/node_modules/rimraf/node_modules/glob/sync.js +0 -486
- package/node_modules/rimraf/node_modules/minimatch/LICENSE +0 -15
- package/node_modules/rimraf/node_modules/minimatch/README.md +0 -230
- package/node_modules/rimraf/node_modules/minimatch/minimatch.js +0 -947
- package/node_modules/rimraf/node_modules/minimatch/package.json +0 -33
- package/node_modules/rimraf/package.json +0 -32
- package/node_modules/rimraf/rimraf.js +0 -360
- package/node_modules/stringify-package/LICENSE +0 -13
- package/node_modules/stringify-package/README.md +0 -55
- package/node_modules/stringify-package/index.js +0 -18
- package/node_modules/stringify-package/package.json +0 -38
- package/node_modules/wrappy/LICENSE +0 -15
- package/node_modules/wrappy/README.md +0 -36
- package/node_modules/wrappy/package.json +0 -29
- package/node_modules/wrappy/wrappy.js +0 -33
|
@@ -5,15 +5,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
9
|
exports.DevicesService = void 0;
|
|
19
10
|
const assert = require("assert");
|
|
@@ -63,111 +54,105 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
63
54
|
this.$iOSSimulatorDiscovery,
|
|
64
55
|
];
|
|
65
56
|
}
|
|
66
|
-
pickSingleDevice(options) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
57
|
+
async pickSingleDevice(options) {
|
|
58
|
+
if (options.onlyDevices && options.onlyEmulators) {
|
|
59
|
+
this.$errors.fail(constants_1.DebugCommandErrors.UNABLE_TO_USE_FOR_DEVICE_AND_EMULATOR);
|
|
60
|
+
}
|
|
61
|
+
if (options.deviceId) {
|
|
62
|
+
const device = await this.getDevice(options.deviceId);
|
|
63
|
+
return device;
|
|
64
|
+
}
|
|
65
|
+
// Now let's take data for each device:
|
|
66
|
+
const availableDevicesAndEmulators = this.getDeviceInstances().filter((d) => d.deviceInfo.status === constants_2.CONNECTED_STATUS &&
|
|
67
|
+
(!this.platform ||
|
|
68
|
+
d.deviceInfo.platform.toLowerCase() === this.platform.toLowerCase()));
|
|
69
|
+
const selectedDevices = availableDevicesAndEmulators.filter((d) => options.onlyEmulators
|
|
70
|
+
? d.isEmulator
|
|
71
|
+
: options.onlyDevices
|
|
72
|
+
? !d.isEmulator
|
|
73
|
+
: true);
|
|
74
|
+
if (selectedDevices.length > 1) {
|
|
75
|
+
if ((0, helpers_1.isInteractive)()) {
|
|
76
|
+
const choices = selectedDevices.map((e) => `${e.deviceInfo.identifier} - ${e.deviceInfo.displayName}`);
|
|
77
|
+
const selectedDeviceString = await this.$prompter.promptForChoice("Select device for debugging", choices);
|
|
78
|
+
const selectedDevice = _.find(selectedDevices, (d) => `${d.deviceInfo.identifier} - ${d.deviceInfo.displayName}` ===
|
|
79
|
+
selectedDeviceString);
|
|
80
|
+
return selectedDevice;
|
|
74
81
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (selectedDevices.length > 1) {
|
|
85
|
-
if ((0, helpers_1.isInteractive)()) {
|
|
86
|
-
const choices = selectedDevices.map((e) => `${e.deviceInfo.identifier} - ${e.deviceInfo.displayName}`);
|
|
87
|
-
const selectedDeviceString = yield this.$prompter.promptForChoice("Select device for debugging", choices);
|
|
88
|
-
const selectedDevice = _.find(selectedDevices, (d) => `${d.deviceInfo.identifier} - ${d.deviceInfo.displayName}` ===
|
|
89
|
-
selectedDeviceString);
|
|
90
|
-
return selectedDevice;
|
|
82
|
+
else {
|
|
83
|
+
const sortedInstances = _.sortBy(selectedDevices, (e) => e.deviceInfo.version);
|
|
84
|
+
const emulators = sortedInstances.filter((e) => e.isEmulator);
|
|
85
|
+
const devices = sortedInstances.filter((d) => !d.isEmulator);
|
|
86
|
+
let selectedInstance;
|
|
87
|
+
if (options.onlyEmulators || options.onlyDevices) {
|
|
88
|
+
// When --emulator or --forDevice is passed, the instances are already filtered
|
|
89
|
+
// So we are sure we have exactly the type we need and we can safely return the last one (highest OS version).
|
|
90
|
+
selectedInstance = _.last(sortedInstances);
|
|
91
91
|
}
|
|
92
92
|
else {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const devices = sortedInstances.filter((d) => !d.isEmulator);
|
|
96
|
-
let selectedInstance;
|
|
97
|
-
if (options.onlyEmulators || options.onlyDevices) {
|
|
98
|
-
// When --emulator or --forDevice is passed, the instances are already filtered
|
|
99
|
-
// So we are sure we have exactly the type we need and we can safely return the last one (highest OS version).
|
|
100
|
-
selectedInstance = _.last(sortedInstances);
|
|
93
|
+
if (emulators.length) {
|
|
94
|
+
selectedInstance = _.last(emulators);
|
|
101
95
|
}
|
|
102
96
|
else {
|
|
103
|
-
|
|
104
|
-
selectedInstance = _.last(emulators);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
selectedInstance = _.last(devices);
|
|
108
|
-
}
|
|
97
|
+
selectedInstance = _.last(devices);
|
|
109
98
|
}
|
|
110
|
-
this.$logger.warn(`Multiple devices/emulators found. Starting debugger on ${selectedInstance.deviceInfo.identifier}. ` +
|
|
111
|
-
"If you want to debug on specific device/emulator, you can specify it with --device option.");
|
|
112
|
-
return selectedInstance;
|
|
113
99
|
}
|
|
100
|
+
this.$logger.warn(`Multiple devices/emulators found. Starting debugger on ${selectedInstance.deviceInfo.identifier}. ` +
|
|
101
|
+
"If you want to debug on specific device/emulator, you can specify it with --device option.");
|
|
102
|
+
return selectedInstance;
|
|
114
103
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
104
|
+
}
|
|
105
|
+
else if (selectedDevices.length === 1) {
|
|
106
|
+
return _.head(selectedDevices);
|
|
107
|
+
}
|
|
108
|
+
this.$errors.fail(constants_1.DebugCommandErrors.NO_DEVICES_EMULATORS_FOUND_FOR_OPTIONS);
|
|
120
109
|
}
|
|
121
|
-
getEmulatorImages(options) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
(!options ||
|
|
126
|
-
!options.platform ||
|
|
127
|
-
this.$mobileHelper.isiOSPlatform(options.platform))) {
|
|
128
|
-
result.ios = yield this.$iOSEmulatorServices.getEmulatorImages();
|
|
129
|
-
}
|
|
130
|
-
if (!options ||
|
|
110
|
+
async getEmulatorImages(options) {
|
|
111
|
+
const result = Object.create(null);
|
|
112
|
+
if (this.$hostInfo.isDarwin &&
|
|
113
|
+
(!options ||
|
|
131
114
|
!options.platform ||
|
|
132
|
-
this.$mobileHelper.
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
115
|
+
this.$mobileHelper.isiOSPlatform(options.platform))) {
|
|
116
|
+
result.ios = await this.$iOSEmulatorServices.getEmulatorImages();
|
|
117
|
+
}
|
|
118
|
+
if (!options ||
|
|
119
|
+
!options.platform ||
|
|
120
|
+
this.$mobileHelper.isAndroidPlatform(options.platform)) {
|
|
121
|
+
result.android = await this.$androidEmulatorServices.getEmulatorImages();
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
137
124
|
}
|
|
138
|
-
startEmulator(options) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
platform: options.platform,
|
|
145
|
-
});
|
|
146
|
-
const emulators = this.$emulatorHelper.getEmulatorsFromAvailableEmulatorsOutput(availableEmulatorsOutput);
|
|
147
|
-
const errors = this.$emulatorHelper.getErrorsFromAvailableEmulatorsOutput(availableEmulatorsOutput);
|
|
148
|
-
let emulator = null;
|
|
149
|
-
if (options.imageIdentifier) {
|
|
150
|
-
emulator = this.$emulatorHelper.getEmulatorByImageIdentifier(options.imageIdentifier, emulators);
|
|
151
|
-
}
|
|
152
|
-
else if (options.emulatorIdOrName) {
|
|
153
|
-
emulator = this.$emulatorHelper.getEmulatorByIdOrName(options.emulatorIdOrName, emulators);
|
|
154
|
-
}
|
|
155
|
-
if (!emulator) {
|
|
156
|
-
const additionalErrors = errors && errors.length ? errors : [];
|
|
157
|
-
return [
|
|
158
|
-
`Unable to find emulator with provided options: ${options}`,
|
|
159
|
-
...additionalErrors,
|
|
160
|
-
];
|
|
161
|
-
}
|
|
162
|
-
// emulator is already running
|
|
163
|
-
if (emulator.status === constants.RUNNING_EMULATOR_STATUS) {
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
options.emulator = emulator;
|
|
167
|
-
const emulatorService = this.resolveEmulatorServices(emulator.platform);
|
|
168
|
-
const result = yield emulatorService.startEmulator(options);
|
|
169
|
-
return result.errors && result.errors.length ? result.errors : null;
|
|
125
|
+
async startEmulator(options) {
|
|
126
|
+
if (!options || (!options.imageIdentifier && !options.emulatorIdOrName)) {
|
|
127
|
+
return ["Missing mandatory image identifier or name option."];
|
|
128
|
+
}
|
|
129
|
+
const availableEmulatorsOutput = await this.getEmulatorImages({
|
|
130
|
+
platform: options.platform,
|
|
170
131
|
});
|
|
132
|
+
const emulators = this.$emulatorHelper.getEmulatorsFromAvailableEmulatorsOutput(availableEmulatorsOutput);
|
|
133
|
+
const errors = this.$emulatorHelper.getErrorsFromAvailableEmulatorsOutput(availableEmulatorsOutput);
|
|
134
|
+
let emulator = null;
|
|
135
|
+
if (options.imageIdentifier) {
|
|
136
|
+
emulator = this.$emulatorHelper.getEmulatorByImageIdentifier(options.imageIdentifier, emulators);
|
|
137
|
+
}
|
|
138
|
+
else if (options.emulatorIdOrName) {
|
|
139
|
+
emulator = this.$emulatorHelper.getEmulatorByIdOrName(options.emulatorIdOrName, emulators);
|
|
140
|
+
}
|
|
141
|
+
if (!emulator) {
|
|
142
|
+
const additionalErrors = errors && errors.length ? errors : [];
|
|
143
|
+
return [
|
|
144
|
+
`Unable to find emulator with provided options: ${options}`,
|
|
145
|
+
...additionalErrors,
|
|
146
|
+
];
|
|
147
|
+
}
|
|
148
|
+
// emulator is already running
|
|
149
|
+
if (emulator.status === constants.RUNNING_EMULATOR_STATUS) {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
options.emulator = emulator;
|
|
153
|
+
const emulatorService = this.resolveEmulatorServices(emulator.platform);
|
|
154
|
+
const result = await emulatorService.startEmulator(options);
|
|
155
|
+
return result.errors && result.errors.length ? result.errors : null;
|
|
171
156
|
}
|
|
172
157
|
get platform() {
|
|
173
158
|
return this._platform;
|
|
@@ -213,11 +198,9 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
213
198
|
return device;
|
|
214
199
|
});
|
|
215
200
|
}
|
|
216
|
-
getInstalledApplications(deviceIdentifier) {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
return device.applicationManager.getInstalledApplications();
|
|
220
|
-
});
|
|
201
|
+
async getInstalledApplications(deviceIdentifier) {
|
|
202
|
+
const device = await this.getDevice(deviceIdentifier);
|
|
203
|
+
return device.applicationManager.getInstalledApplications();
|
|
221
204
|
}
|
|
222
205
|
addDeviceDiscovery(deviceDiscovery) {
|
|
223
206
|
this._otherDeviceDiscoveries.push(deviceDiscovery);
|
|
@@ -273,66 +256,62 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
273
256
|
/**
|
|
274
257
|
* Starts looking for devices. Any found devices are pushed to "_devices" variable.
|
|
275
258
|
*/
|
|
276
|
-
detectCurrentlyAttachedDevices(deviceInitOpts) {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
for (const deviceDiscovery of this._allDeviceDiscoveries) {
|
|
280
|
-
try {
|
|
281
|
-
yield deviceDiscovery.startLookingForDevices(options);
|
|
282
|
-
}
|
|
283
|
-
catch (err) {
|
|
284
|
-
this.$logger.trace("Error while checking for devices.", err);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
detectCurrentlyAvailableEmulators() {
|
|
290
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
291
|
-
try {
|
|
292
|
-
yield this.$androidEmulatorDiscovery.startLookingForDevices();
|
|
293
|
-
}
|
|
294
|
-
catch (err) {
|
|
295
|
-
this.$logger.trace(`Error while checking for Android emulators. ${err}`);
|
|
296
|
-
}
|
|
259
|
+
async detectCurrentlyAttachedDevices(deviceInitOpts) {
|
|
260
|
+
const options = this.getDeviceLookingOptions(deviceInitOpts);
|
|
261
|
+
for (const deviceDiscovery of this._allDeviceDiscoveries) {
|
|
297
262
|
try {
|
|
298
|
-
|
|
263
|
+
await deviceDiscovery.startLookingForDevices(options);
|
|
299
264
|
}
|
|
300
265
|
catch (err) {
|
|
301
|
-
this.$logger.trace(
|
|
266
|
+
this.$logger.trace("Error while checking for devices.", err);
|
|
302
267
|
}
|
|
303
|
-
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
async detectCurrentlyAvailableEmulators() {
|
|
271
|
+
try {
|
|
272
|
+
await this.$androidEmulatorDiscovery.startLookingForDevices();
|
|
273
|
+
}
|
|
274
|
+
catch (err) {
|
|
275
|
+
this.$logger.trace(`Error while checking for Android emulators. ${err}`);
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
await this.$iOSSimulatorDiscovery.checkForAvailableSimulators();
|
|
279
|
+
}
|
|
280
|
+
catch (err) {
|
|
281
|
+
this.$logger.trace(`Error while checking for iOS simulators. ${err}`);
|
|
282
|
+
}
|
|
304
283
|
}
|
|
305
284
|
startDeviceDetectionInterval(deviceInitOpts = {}) {
|
|
306
285
|
if (!this.deviceDetectionInterval) {
|
|
307
286
|
let isDeviceDetectionIntervalInProgress = false;
|
|
308
|
-
this.deviceDetectionInterval = setInterval(() =>
|
|
287
|
+
this.deviceDetectionInterval = setInterval(async () => {
|
|
309
288
|
if (isDeviceDetectionIntervalInProgress) {
|
|
310
289
|
return;
|
|
311
290
|
}
|
|
312
291
|
isDeviceDetectionIntervalInProgress = true;
|
|
313
|
-
|
|
292
|
+
await this.detectCurrentlyAttachedDevices(deviceInitOpts);
|
|
314
293
|
try {
|
|
315
294
|
const trustedDevices = _.filter(this._devices, (device) => device.deviceInfo.status === constants.CONNECTED_STATUS);
|
|
316
|
-
|
|
295
|
+
await (0, helpers_1.settlePromises)(_.map(trustedDevices, (device) => device.applicationManager.checkForApplicationUpdates()));
|
|
317
296
|
}
|
|
318
297
|
catch (err) {
|
|
319
298
|
this.$logger.trace("Error checking for application updates on devices.", err);
|
|
320
299
|
}
|
|
321
300
|
isDeviceDetectionIntervalInProgress = false;
|
|
322
|
-
}
|
|
301
|
+
}, deviceInitOpts.detectionInterval || DevicesService.DEVICE_LOOKING_INTERVAL);
|
|
323
302
|
this.deviceDetectionInterval.unref();
|
|
324
303
|
}
|
|
325
304
|
}
|
|
326
305
|
startEmulatorDetectionInterval(opts = {}) {
|
|
327
306
|
let isEmulatorDetectionIntervalRunning = false;
|
|
328
|
-
this.emulatorDetectionInterval = setInterval(() =>
|
|
307
|
+
this.emulatorDetectionInterval = setInterval(async () => {
|
|
329
308
|
if (isEmulatorDetectionIntervalRunning) {
|
|
330
309
|
return;
|
|
331
310
|
}
|
|
332
311
|
isEmulatorDetectionIntervalRunning = true;
|
|
333
|
-
|
|
312
|
+
await this.detectCurrentlyAvailableEmulators();
|
|
334
313
|
isEmulatorDetectionIntervalRunning = false;
|
|
335
|
-
}
|
|
314
|
+
}, opts.detectionInterval || DevicesService.EMULATOR_IMAGES_DETECTION_INTERVAL);
|
|
336
315
|
this.emulatorDetectionInterval.unref();
|
|
337
316
|
}
|
|
338
317
|
stopDeviceDetectionInterval() {
|
|
@@ -368,16 +347,14 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
368
347
|
/**
|
|
369
348
|
* Starts looking for running devices. All found devices are pushed to _devices variable.
|
|
370
349
|
*/
|
|
371
|
-
startLookingForDevices(deviceInitOpts) {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
yield this.startDeviceDetectionInterval(deviceInitOpts);
|
|
380
|
-
});
|
|
350
|
+
async startLookingForDevices(deviceInitOpts) {
|
|
351
|
+
this.$logger.trace("startLookingForDevices; platform is %s", this._platform);
|
|
352
|
+
if (this._platform) {
|
|
353
|
+
return this.detectCurrentlyAttachedDevices(deviceInitOpts);
|
|
354
|
+
}
|
|
355
|
+
await this.detectCurrentlyAttachedDevices(deviceInitOpts);
|
|
356
|
+
await this.detectCurrentlyAvailableEmulators();
|
|
357
|
+
await this.startDeviceDetectionInterval(deviceInitOpts);
|
|
381
358
|
}
|
|
382
359
|
/**
|
|
383
360
|
* Returns device depending on the passed index.
|
|
@@ -393,84 +370,78 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
393
370
|
* Method expects running devices.
|
|
394
371
|
* @param deviceOption parameter passed by the user to --device flag. Can be name, identifier or imageIdentifier.
|
|
395
372
|
*/
|
|
396
|
-
getDevice(deviceOption) {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
this.$
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
return device;
|
|
415
|
-
});
|
|
373
|
+
async getDevice(deviceOption) {
|
|
374
|
+
let device = null;
|
|
375
|
+
if (!device) {
|
|
376
|
+
device = _.find(this.getDeviceInstances(), (d) => (d.deviceInfo.identifier &&
|
|
377
|
+
d.deviceInfo.identifier === deviceOption) ||
|
|
378
|
+
(d.deviceInfo.displayName &&
|
|
379
|
+
d.deviceInfo.displayName === deviceOption) ||
|
|
380
|
+
(d.deviceInfo.imageIdentifier &&
|
|
381
|
+
d.deviceInfo.imageIdentifier === deviceOption));
|
|
382
|
+
}
|
|
383
|
+
if (!device && helpers.isNumberWithoutExponent(deviceOption)) {
|
|
384
|
+
device = this.getDeviceByIndex(parseInt(deviceOption, 10));
|
|
385
|
+
}
|
|
386
|
+
if (!device) {
|
|
387
|
+
this.$errors.fail(this.$messages.Devices
|
|
388
|
+
.NotFoundDeviceByIdentifierErrorMessageWithIdentifier, deviceOption, this.$staticConfig.CLIENT_NAME.toLowerCase());
|
|
389
|
+
}
|
|
390
|
+
return device;
|
|
416
391
|
}
|
|
417
392
|
/**
|
|
418
393
|
* Method runs action for a --device (value), specified by the user.
|
|
419
394
|
* @param action action to be executed if canExecute returns true
|
|
420
395
|
* @param canExecute predicate to decide whether the command can be ran
|
|
421
396
|
*/
|
|
422
|
-
executeOnDevice(action, canExecute) {
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
}
|
|
430
|
-
});
|
|
397
|
+
async executeOnDevice(action, canExecute) {
|
|
398
|
+
if (!canExecute || canExecute(this._device)) {
|
|
399
|
+
return {
|
|
400
|
+
deviceIdentifier: this._device.deviceInfo.identifier,
|
|
401
|
+
result: await action(this._device),
|
|
402
|
+
};
|
|
403
|
+
}
|
|
431
404
|
}
|
|
432
405
|
/**
|
|
433
406
|
* Executes passed action for each found device.
|
|
434
407
|
* @param action action to be executed if canExecute returns true
|
|
435
408
|
* @param canExecute predicate to decide whether the command can be ran
|
|
436
409
|
*/
|
|
437
|
-
executeOnAllConnectedDevices(action, canExecute) {
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
});
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
catch (err) {
|
|
453
|
-
err.deviceIdentifier = device.deviceInfo.identifier;
|
|
454
|
-
this.$logger.trace(`Error while executing action on device ${device.deviceInfo.identifier}. The error is`, err);
|
|
455
|
-
errors.push(err);
|
|
410
|
+
async executeOnAllConnectedDevices(action, canExecute) {
|
|
411
|
+
const devices = this.filterDevicesByPlatform();
|
|
412
|
+
const sortedDevices = _.sortBy(devices, (device) => device.deviceInfo.platform);
|
|
413
|
+
const result = [];
|
|
414
|
+
const errors = [];
|
|
415
|
+
for (const device of sortedDevices) {
|
|
416
|
+
try {
|
|
417
|
+
if (!canExecute || canExecute(device)) {
|
|
418
|
+
result.push({
|
|
419
|
+
deviceIdentifier: device.deviceInfo.identifier,
|
|
420
|
+
result: await action(device),
|
|
421
|
+
});
|
|
456
422
|
}
|
|
457
423
|
}
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
}
|
|
463
|
-
const errorMessage = `${preErrorMsg}${errors
|
|
464
|
-
.map((e) => e.message || e)
|
|
465
|
-
.join(os_1.EOL)}`;
|
|
466
|
-
this.$errors.fail(errorMessage);
|
|
424
|
+
catch (err) {
|
|
425
|
+
err.deviceIdentifier = device.deviceInfo.identifier;
|
|
426
|
+
this.$logger.trace(`Error while executing action on device ${device.deviceInfo.identifier}. The error is`, err);
|
|
427
|
+
errors.push(err);
|
|
467
428
|
}
|
|
468
|
-
|
|
469
|
-
|
|
429
|
+
}
|
|
430
|
+
if (errors.length) {
|
|
431
|
+
let preErrorMsg = "";
|
|
432
|
+
if (errors.length > 1) {
|
|
433
|
+
preErrorMsg = "Multiple errors were thrown:" + os_1.EOL;
|
|
434
|
+
}
|
|
435
|
+
const errorMessage = `${preErrorMsg}${errors
|
|
436
|
+
.map((e) => e.message || e)
|
|
437
|
+
.join(os_1.EOL)}`;
|
|
438
|
+
this.$errors.fail(errorMessage);
|
|
439
|
+
}
|
|
440
|
+
return result;
|
|
470
441
|
}
|
|
471
442
|
deployOnDevices(deviceIdentifiers, packagePath, appId, projectName, projectDir) {
|
|
472
443
|
this.$logger.trace(`Called deployOnDevices for identifiers ${deviceIdentifiers} for packageFile: ${packagePath}. Application identifier is ${appId}. Project Name is: ${projectName}`);
|
|
473
|
-
return _.map(deviceIdentifiers, (deviceIdentifier) =>
|
|
444
|
+
return _.map(deviceIdentifiers, async (deviceIdentifier) => {
|
|
474
445
|
const device = this.getDeviceByIdentifier(deviceIdentifier);
|
|
475
446
|
let identifier;
|
|
476
447
|
if (typeof appId === "string") {
|
|
@@ -485,7 +456,7 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
485
456
|
projectName,
|
|
486
457
|
projectDir,
|
|
487
458
|
});
|
|
488
|
-
})
|
|
459
|
+
});
|
|
489
460
|
}
|
|
490
461
|
/**
|
|
491
462
|
* Runs the passed action if the predicate "canExecute" returns true
|
|
@@ -493,111 +464,106 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
493
464
|
* @param canExecute predicate to decide whether the command can be ran
|
|
494
465
|
* @param options all possible options that can be passed to the command.
|
|
495
466
|
*/
|
|
496
|
-
execute(action, canExecute, options) {
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
if (this.
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
467
|
+
async execute(action, canExecute, options) {
|
|
468
|
+
assert.ok(this._isInitialized, "Devices services not initialized!");
|
|
469
|
+
if (this.hasDevices) {
|
|
470
|
+
if (this.$hostInfo.isDarwin &&
|
|
471
|
+
this._platform &&
|
|
472
|
+
this.$mobileHelper.isiOSPlatform(this._platform) &&
|
|
473
|
+
this.$options.emulator &&
|
|
474
|
+
!this.isOnlyiOSSimultorRunning()) {
|
|
475
|
+
// Executes the command only on iOS simulator
|
|
476
|
+
const originalCanExecute = canExecute;
|
|
477
|
+
canExecute = (dev) => this.isiOSSimulator(dev) &&
|
|
478
|
+
(!originalCanExecute || !!originalCanExecute(dev));
|
|
479
|
+
}
|
|
480
|
+
return this.executeCore(action, canExecute);
|
|
481
|
+
}
|
|
482
|
+
else {
|
|
483
|
+
const message = constants.ERROR_NO_DEVICES;
|
|
484
|
+
if (options && options.allowNoDevices) {
|
|
485
|
+
this.$logger.info(message);
|
|
511
486
|
}
|
|
512
487
|
else {
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
this.$
|
|
488
|
+
if (!this.$hostInfo.isDarwin &&
|
|
489
|
+
this._platform &&
|
|
490
|
+
this.$mobileHelper.isiOSPlatform(this._platform)) {
|
|
491
|
+
this.$errors.fail(message);
|
|
516
492
|
}
|
|
517
493
|
else {
|
|
518
|
-
|
|
519
|
-
this._platform &&
|
|
520
|
-
this.$mobileHelper.isiOSPlatform(this._platform)) {
|
|
521
|
-
this.$errors.fail(message);
|
|
522
|
-
}
|
|
523
|
-
else {
|
|
524
|
-
return this.executeCore(action, canExecute);
|
|
525
|
-
}
|
|
494
|
+
return this.executeCore(action, canExecute);
|
|
526
495
|
}
|
|
527
496
|
}
|
|
528
|
-
}
|
|
497
|
+
}
|
|
529
498
|
}
|
|
530
499
|
/**
|
|
531
500
|
* Starts emulator or simulator if necessary depending on --device or --emulator flags.
|
|
532
501
|
* If no options are passed runs default emulator/simulator if no devices are connected.
|
|
533
502
|
* @param deviceInitOpts mainly contains information about --emulator and --deviceId flags.
|
|
534
503
|
*/
|
|
535
|
-
startEmulatorIfNecessary(deviceInitOpts) {
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
this.$errors.fail(`--device and --emulator are incompatible options.
|
|
504
|
+
async startEmulatorIfNecessary(deviceInitOpts) {
|
|
505
|
+
if (deviceInitOpts && deviceInitOpts.deviceId && deviceInitOpts.emulator) {
|
|
506
|
+
this.$errors.fail(`--device and --emulator are incompatible options.
|
|
539
507
|
If you are trying to run on specific emulator, use "${this.$staticConfig.CLIENT_NAME} run --device <DeviceID>`);
|
|
508
|
+
}
|
|
509
|
+
if (deviceInitOpts &&
|
|
510
|
+
deviceInitOpts.platform &&
|
|
511
|
+
!deviceInitOpts.skipEmulatorStart) {
|
|
512
|
+
// are there any running devices
|
|
513
|
+
this._platform = deviceInitOpts.platform;
|
|
514
|
+
try {
|
|
515
|
+
await this.startLookingForDevices(deviceInitOpts);
|
|
540
516
|
}
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
!deviceInitOpts.skipEmulatorStart) {
|
|
544
|
-
// are there any running devices
|
|
545
|
-
this._platform = deviceInitOpts.platform;
|
|
546
|
-
try {
|
|
547
|
-
yield this.startLookingForDevices(deviceInitOpts);
|
|
548
|
-
}
|
|
549
|
-
catch (err) {
|
|
550
|
-
this.$logger.trace("Error while checking for devices.", err);
|
|
551
|
-
}
|
|
552
|
-
const deviceInstances = this.getDeviceInstances();
|
|
553
|
-
if (!deviceInitOpts.deviceId && _.isEmpty(deviceInstances)) {
|
|
554
|
-
if (!this.$hostInfo.isDarwin &&
|
|
555
|
-
this.$mobileHelper.isApplePlatform(deviceInitOpts.platform)) {
|
|
556
|
-
this.$errors.fail(constants.ERROR_NO_DEVICES_CANT_USE_IOS_SIMULATOR);
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
try {
|
|
560
|
-
yield this._startEmulatorIfNecessary(deviceInitOpts);
|
|
561
|
-
}
|
|
562
|
-
catch (err) {
|
|
563
|
-
const errorMessage = this.getEmulatorError(err, deviceInitOpts.platform);
|
|
564
|
-
this.$errors.fail(errorMessage);
|
|
565
|
-
}
|
|
517
|
+
catch (err) {
|
|
518
|
+
this.$logger.trace("Error while checking for devices.", err);
|
|
566
519
|
}
|
|
567
|
-
});
|
|
568
|
-
}
|
|
569
|
-
_startEmulatorIfNecessary(data) {
|
|
570
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
571
520
|
const deviceInstances = this.getDeviceInstances();
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
//check if --device(value) is running, if it's not or it's not the same as is specified, start with name from --device(value)
|
|
577
|
-
if (data.deviceId) {
|
|
578
|
-
if (!helpers.isNumberWithoutExponent(data.deviceId)) {
|
|
579
|
-
const activeDeviceInstance = _.find(deviceInstances, (device) => device.deviceInfo.identifier === data.deviceId);
|
|
580
|
-
if (!activeDeviceInstance) {
|
|
581
|
-
return this.startEmulatorCore(data);
|
|
582
|
-
}
|
|
521
|
+
if (!deviceInitOpts.deviceId && _.isEmpty(deviceInstances)) {
|
|
522
|
+
if (!this.$hostInfo.isDarwin &&
|
|
523
|
+
this.$mobileHelper.isApplePlatform(deviceInitOpts.platform)) {
|
|
524
|
+
this.$errors.fail(constants.ERROR_NO_DEVICES_CANT_USE_IOS_SIMULATOR);
|
|
583
525
|
}
|
|
584
526
|
}
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
deviceInstances.length) {
|
|
588
|
-
const runningDeviceInstance = deviceInstances.find((device) => device.deviceInfo.platform === this.$devicePlatformsConstants.visionOS);
|
|
589
|
-
if (!runningDeviceInstance) {
|
|
590
|
-
return this.startEmulatorCore(data);
|
|
591
|
-
}
|
|
527
|
+
try {
|
|
528
|
+
await this._startEmulatorIfNecessary(deviceInitOpts);
|
|
592
529
|
}
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
530
|
+
catch (err) {
|
|
531
|
+
const errorMessage = this.getEmulatorError(err, deviceInitOpts.platform);
|
|
532
|
+
this.$errors.fail(errorMessage);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
async _startEmulatorIfNecessary(data) {
|
|
537
|
+
const deviceInstances = this.getDeviceInstances();
|
|
538
|
+
//if no --device is passed and no devices are found, the default emulator is started
|
|
539
|
+
if (!data.deviceId && _.isEmpty(deviceInstances)) {
|
|
540
|
+
return this.startEmulatorCore(data);
|
|
541
|
+
}
|
|
542
|
+
//check if --device(value) is running, if it's not or it's not the same as is specified, start with name from --device(value)
|
|
543
|
+
if (data.deviceId) {
|
|
544
|
+
if (!helpers.isNumberWithoutExponent(data.deviceId)) {
|
|
545
|
+
const activeDeviceInstance = _.find(deviceInstances, (device) => device.deviceInfo.identifier === data.deviceId);
|
|
546
|
+
if (!activeDeviceInstance) {
|
|
597
547
|
return this.startEmulatorCore(data);
|
|
598
548
|
}
|
|
599
549
|
}
|
|
600
|
-
}
|
|
550
|
+
}
|
|
551
|
+
// make sure if the target platform is visionOS we don't try to run it on an already running iOS simulator...
|
|
552
|
+
if (data.platform === this.$devicePlatformsConstants.visionOS &&
|
|
553
|
+
deviceInstances.length) {
|
|
554
|
+
const runningDeviceInstance = deviceInstances.find((device) => device.deviceInfo.platform ===
|
|
555
|
+
this.$devicePlatformsConstants.visionOS);
|
|
556
|
+
if (!runningDeviceInstance) {
|
|
557
|
+
return this.startEmulatorCore(data);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
// if only emulator flag is passed and no other emulators are running, start default emulator
|
|
561
|
+
if (data.emulator && deviceInstances.length) {
|
|
562
|
+
const runningDeviceInstance = _.some(deviceInstances, (value) => value.isEmulator);
|
|
563
|
+
if (!runningDeviceInstance) {
|
|
564
|
+
return this.startEmulatorCore(data);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
601
567
|
}
|
|
602
568
|
/**
|
|
603
569
|
* Takes care of gathering information about all running devices.
|
|
@@ -605,21 +571,19 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
605
571
|
* Method expects running devices.
|
|
606
572
|
* @param data mainly contains information about --emulator and --deviceId flags.
|
|
607
573
|
*/
|
|
608
|
-
initialize(data) {
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
}
|
|
622
|
-
});
|
|
574
|
+
async initialize(data) {
|
|
575
|
+
if (!this._deviceInitializePromise) {
|
|
576
|
+
this._deviceInitializePromise = this.initializeCore(data);
|
|
577
|
+
}
|
|
578
|
+
try {
|
|
579
|
+
await this._deviceInitializePromise;
|
|
580
|
+
}
|
|
581
|
+
catch (err) {
|
|
582
|
+
// In case the initalization fails, we want to allow calling `initlialize` again with other arguments for example, so remove the cached promise value.
|
|
583
|
+
this.$logger.trace(`Error while initializing devicesService: ${err}`);
|
|
584
|
+
this._deviceInitializePromise = null;
|
|
585
|
+
throw err;
|
|
586
|
+
}
|
|
623
587
|
}
|
|
624
588
|
getPlatformsFromDeviceDescriptors(deviceDescriptors) {
|
|
625
589
|
const platforms = _(deviceDescriptors)
|
|
@@ -629,93 +593,91 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
629
593
|
.value();
|
|
630
594
|
return platforms;
|
|
631
595
|
}
|
|
632
|
-
initializeCore(deviceInitOpts) {
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
596
|
+
async initializeCore(deviceInitOpts) {
|
|
597
|
+
if (this._isInitialized) {
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
if (!this.$options.json) {
|
|
601
|
+
this.$logger.info("Searching for devices...");
|
|
602
|
+
}
|
|
603
|
+
deviceInitOpts = deviceInitOpts || {};
|
|
604
|
+
this._data = deviceInitOpts;
|
|
605
|
+
if (!deviceInitOpts.skipEmulatorStart) {
|
|
606
|
+
// TODO: Remove from here as it calls startLookingForDevices, so we double the calls to specific device detection services
|
|
607
|
+
await this.startEmulatorIfNecessary(deviceInitOpts);
|
|
608
|
+
}
|
|
609
|
+
const platform = deviceInitOpts.platform;
|
|
610
|
+
const deviceOption = deviceInitOpts.deviceId;
|
|
611
|
+
const deviceLookingOptions = {
|
|
612
|
+
emulator: deviceInitOpts.emulator,
|
|
613
|
+
platform: deviceInitOpts.platform,
|
|
614
|
+
shouldReturnImmediateResult: deviceInitOpts.shouldReturnImmediateResult,
|
|
615
|
+
detectionInterval: deviceInitOpts.detectionInterval,
|
|
616
|
+
fullDiscovery: deviceInitOpts.fullDiscovery,
|
|
617
|
+
};
|
|
618
|
+
if (platform && deviceOption) {
|
|
619
|
+
this._platform = this.$mobileHelper.validatePlatformName(deviceInitOpts.platform);
|
|
620
|
+
await this.startLookingForDevices(deviceLookingOptions);
|
|
621
|
+
this._device = await this.getDevice(deviceOption);
|
|
622
|
+
if (this._device.deviceInfo.platform !== this._platform) {
|
|
623
|
+
this.$errors.fail(constants.ERROR_CANNOT_RESOLVE_DEVICE);
|
|
624
|
+
}
|
|
625
|
+
this.$logger.warn("Your application will be deployed only on the device specified by the provided index or identifier.");
|
|
626
|
+
}
|
|
627
|
+
else if (!platform && deviceOption) {
|
|
628
|
+
await this.startLookingForDevices(deviceLookingOptions);
|
|
629
|
+
this._device = await this.getDevice(deviceOption);
|
|
630
|
+
this._platform = this._device.deviceInfo.platform;
|
|
631
|
+
}
|
|
632
|
+
else if (platform && !deviceOption) {
|
|
633
|
+
this._platform = this.$mobileHelper.validatePlatformName(platform);
|
|
634
|
+
await this.startLookingForDevices(deviceLookingOptions);
|
|
635
|
+
}
|
|
636
|
+
else {
|
|
637
|
+
// platform and deviceId are not specified
|
|
638
|
+
if (deviceInitOpts.skipInferPlatform) {
|
|
639
|
+
if (deviceInitOpts.skipDeviceDetectionInterval) {
|
|
640
|
+
await this.detectCurrentlyAttachedDevices(deviceLookingOptions);
|
|
641
|
+
}
|
|
642
|
+
else {
|
|
643
|
+
deviceInitOpts.shouldReturnImmediateResult = true;
|
|
644
|
+
await this.startLookingForDevices(deviceLookingOptions);
|
|
661
645
|
}
|
|
662
|
-
this.$logger.warn("Your application will be deployed only on the device specified by the provided index or identifier.");
|
|
663
|
-
}
|
|
664
|
-
else if (!platform && deviceOption) {
|
|
665
|
-
yield this.startLookingForDevices(deviceLookingOptions);
|
|
666
|
-
this._device = yield this.getDevice(deviceOption);
|
|
667
|
-
this._platform = this._device.deviceInfo.platform;
|
|
668
|
-
}
|
|
669
|
-
else if (platform && !deviceOption) {
|
|
670
|
-
this._platform = this.$mobileHelper.validatePlatformName(platform);
|
|
671
|
-
yield this.startLookingForDevices(deviceLookingOptions);
|
|
672
646
|
}
|
|
673
647
|
else {
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
648
|
+
await this.startLookingForDevices(deviceLookingOptions);
|
|
649
|
+
const devices = this.getDeviceInstances();
|
|
650
|
+
const platforms = _(devices)
|
|
651
|
+
.map((device) => device.deviceInfo.platform)
|
|
652
|
+
.filter((pl) => {
|
|
653
|
+
try {
|
|
654
|
+
return !!this.$mobileHelper.validatePlatformName(pl);
|
|
678
655
|
}
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
656
|
+
catch (err) {
|
|
657
|
+
this.$logger.warn(err.message);
|
|
658
|
+
return null;
|
|
682
659
|
}
|
|
660
|
+
})
|
|
661
|
+
.uniq()
|
|
662
|
+
.value();
|
|
663
|
+
if (platforms.length === 1) {
|
|
664
|
+
this._platform = platforms[0];
|
|
665
|
+
}
|
|
666
|
+
else if (platforms.length === 0) {
|
|
667
|
+
this.$errors.fail(constants.ERROR_NO_DEVICES);
|
|
683
668
|
}
|
|
684
669
|
else {
|
|
685
|
-
|
|
686
|
-
const devices = this.getDeviceInstances();
|
|
687
|
-
const platforms = _(devices)
|
|
688
|
-
.map((device) => device.deviceInfo.platform)
|
|
689
|
-
.filter((pl) => {
|
|
690
|
-
try {
|
|
691
|
-
return !!this.$mobileHelper.validatePlatformName(pl);
|
|
692
|
-
}
|
|
693
|
-
catch (err) {
|
|
694
|
-
this.$logger.warn(err.message);
|
|
695
|
-
return null;
|
|
696
|
-
}
|
|
697
|
-
})
|
|
698
|
-
.uniq()
|
|
699
|
-
.value();
|
|
700
|
-
if (platforms.length === 1) {
|
|
701
|
-
this._platform = platforms[0];
|
|
702
|
-
}
|
|
703
|
-
else if (platforms.length === 0) {
|
|
704
|
-
this.$errors.fail(constants.ERROR_NO_DEVICES);
|
|
705
|
-
}
|
|
706
|
-
else {
|
|
707
|
-
this.$errors.fail("Multiple device platforms detected (%s). Specify platform or device on command line.", helpers.formatListOfNames(platforms, "and"));
|
|
708
|
-
}
|
|
670
|
+
this.$errors.fail("Multiple device platforms detected (%s). Specify platform or device on command line.", helpers.formatListOfNames(platforms, "and"));
|
|
709
671
|
}
|
|
710
672
|
}
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
673
|
+
}
|
|
674
|
+
if (!this.$hostInfo.isDarwin &&
|
|
675
|
+
this._platform &&
|
|
676
|
+
this.$mobileHelper.isiOSPlatform(this._platform) &&
|
|
677
|
+
this.$options.emulator) {
|
|
678
|
+
this.$errors.fail(constants.ERROR_CANT_USE_SIMULATOR);
|
|
679
|
+
}
|
|
680
|
+
this._isInitialized = true;
|
|
719
681
|
}
|
|
720
682
|
get hasDevices() {
|
|
721
683
|
if (!this._platform) {
|
|
@@ -735,30 +697,24 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
735
697
|
getDeviceByDeviceOption() {
|
|
736
698
|
return this._device;
|
|
737
699
|
}
|
|
738
|
-
mapAbstractToTcpPort(deviceIdentifier, appIdentifier, framework) {
|
|
739
|
-
return
|
|
740
|
-
return this.$androidProcessService.mapAbstractToTcpPort(deviceIdentifier, appIdentifier, framework);
|
|
741
|
-
});
|
|
700
|
+
async mapAbstractToTcpPort(deviceIdentifier, appIdentifier, framework) {
|
|
701
|
+
return this.$androidProcessService.mapAbstractToTcpPort(deviceIdentifier, appIdentifier, framework);
|
|
742
702
|
}
|
|
743
703
|
getDebuggableApps(deviceIdentifiers) {
|
|
744
704
|
return _.map(deviceIdentifiers, (deviceIdentifier) => this.getDebuggableAppsCore(deviceIdentifier));
|
|
745
705
|
}
|
|
746
|
-
getDebuggableViews(deviceIdentifier, appIdentifier) {
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
return debuggableViewsPerApp && debuggableViewsPerApp[appIdentifier];
|
|
750
|
-
});
|
|
706
|
+
async getDebuggableViews(deviceIdentifier, appIdentifier) {
|
|
707
|
+
const device = this.getDeviceByIdentifier(deviceIdentifier), debuggableViewsPerApp = await device.applicationManager.getDebuggableAppViews([appIdentifier]);
|
|
708
|
+
return debuggableViewsPerApp && debuggableViewsPerApp[appIdentifier];
|
|
751
709
|
}
|
|
752
710
|
getDebuggableAppsCore(deviceIdentifier) {
|
|
753
711
|
const device = this.getDeviceByIdentifier(deviceIdentifier);
|
|
754
712
|
return device.applicationManager.getDebuggableApps();
|
|
755
713
|
}
|
|
756
|
-
deployOnDevice(device, appData) {
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
yield device.applicationManager.tryStartApplication(appData);
|
|
761
|
-
});
|
|
714
|
+
async deployOnDevice(device, appData) {
|
|
715
|
+
await device.applicationManager.reinstallApplication(appData.appId, appData.packagePath);
|
|
716
|
+
this.$logger.info(`Successfully deployed on device with identifier '${device.deviceInfo.identifier}'.`);
|
|
717
|
+
await device.applicationManager.tryStartApplication(appData);
|
|
762
718
|
}
|
|
763
719
|
filterDevicesByPlatform() {
|
|
764
720
|
return _.filter(this.getDeviceInstances(), (device) => {
|
|
@@ -791,58 +747,52 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
791
747
|
* @param platform (optional) platform to start emulator/simulator for
|
|
792
748
|
* @param emulatorIdOrName (optional) emulator/simulator image identifier or name
|
|
793
749
|
*/
|
|
794
|
-
startEmulatorCore(deviceInitOpts = {}) {
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
sdk: this._data && this._data.sdk,
|
|
807
|
-
});
|
|
808
|
-
if (result && result.errors && result.errors.length) {
|
|
809
|
-
this.$errors.fail(result.errors.join("\n"));
|
|
810
|
-
}
|
|
811
|
-
const deviceLookingOptions = this.getDeviceLookingOptions(deviceInitOpts);
|
|
812
|
-
if (this.$mobileHelper.isAndroidPlatform(platform)) {
|
|
813
|
-
yield this.$androidDeviceDiscovery.startLookingForDevices(deviceLookingOptions);
|
|
814
|
-
}
|
|
815
|
-
else if (this.$mobileHelper.isiOSPlatform(platform) &&
|
|
816
|
-
this.$hostInfo.isDarwin) {
|
|
817
|
-
yield this.$iOSSimulatorDiscovery.startLookingForDevices(deviceLookingOptions);
|
|
818
|
-
}
|
|
750
|
+
async startEmulatorCore(deviceInitOpts = {}) {
|
|
751
|
+
const { deviceId } = deviceInitOpts;
|
|
752
|
+
const platform = deviceInitOpts.platform || this._platform;
|
|
753
|
+
const emulatorServices = this.resolveEmulatorServices(platform);
|
|
754
|
+
if (!emulatorServices) {
|
|
755
|
+
this.$errors.fail("Unable to detect platform for which to start emulator.");
|
|
756
|
+
}
|
|
757
|
+
const result = await emulatorServices.startEmulator({
|
|
758
|
+
emulatorIdOrName: deviceId,
|
|
759
|
+
imageIdentifier: deviceId,
|
|
760
|
+
platform: platform,
|
|
761
|
+
sdk: this._data && this._data.sdk,
|
|
819
762
|
});
|
|
763
|
+
if (result && result.errors && result.errors.length) {
|
|
764
|
+
this.$errors.fail(result.errors.join("\n"));
|
|
765
|
+
}
|
|
766
|
+
const deviceLookingOptions = this.getDeviceLookingOptions(deviceInitOpts);
|
|
767
|
+
if (this.$mobileHelper.isAndroidPlatform(platform)) {
|
|
768
|
+
await this.$androidDeviceDiscovery.startLookingForDevices(deviceLookingOptions);
|
|
769
|
+
}
|
|
770
|
+
else if (this.$mobileHelper.isiOSPlatform(platform) &&
|
|
771
|
+
this.$hostInfo.isDarwin) {
|
|
772
|
+
await this.$iOSSimulatorDiscovery.startLookingForDevices(deviceLookingOptions);
|
|
773
|
+
}
|
|
820
774
|
}
|
|
821
|
-
executeCore(action, canExecute) {
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
return this.executeOnAllConnectedDevices(action, canExecute);
|
|
827
|
-
});
|
|
775
|
+
async executeCore(action, canExecute) {
|
|
776
|
+
if (this._device) {
|
|
777
|
+
return [await this.executeOnDevice(action, canExecute)];
|
|
778
|
+
}
|
|
779
|
+
return this.executeOnAllConnectedDevices(action, canExecute);
|
|
828
780
|
}
|
|
829
|
-
isApplicationInstalledOnDevice(deviceIdentifier, appData) {
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
};
|
|
845
|
-
});
|
|
781
|
+
async isApplicationInstalledOnDevice(deviceIdentifier, appData) {
|
|
782
|
+
let isInstalled = false;
|
|
783
|
+
const device = this.getDeviceByIdentifier(deviceIdentifier);
|
|
784
|
+
try {
|
|
785
|
+
isInstalled = await device.applicationManager.isApplicationInstalled(appData.appId);
|
|
786
|
+
await device.applicationManager.tryStartApplication(appData);
|
|
787
|
+
}
|
|
788
|
+
catch (err) {
|
|
789
|
+
this.$logger.trace("Error while checking is application installed. Error is: ", err);
|
|
790
|
+
}
|
|
791
|
+
return {
|
|
792
|
+
appIdentifier: appData.appId,
|
|
793
|
+
deviceIdentifier,
|
|
794
|
+
isInstalled,
|
|
795
|
+
};
|
|
846
796
|
}
|
|
847
797
|
getDeviceLookingOptions(deviceInitOpts = {}) {
|
|
848
798
|
const { shouldReturnImmediateResult, emulator } = deviceInitOpts;
|
|
@@ -865,6 +815,7 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
865
815
|
`To list available ${emulatorName.toLowerCase()} images, run '${this.$staticConfig.CLIENT_NAME.toLowerCase()} device <Platform> --available-devices'.`);
|
|
866
816
|
}
|
|
867
817
|
}
|
|
818
|
+
exports.DevicesService = DevicesService;
|
|
868
819
|
DevicesService.DEVICE_LOOKING_INTERVAL = 200;
|
|
869
820
|
DevicesService.EMULATOR_IMAGES_DETECTION_INTERVAL = 60 * 1000;
|
|
870
821
|
__decorate([
|
|
@@ -918,6 +869,5 @@ __decorate([
|
|
|
918
869
|
__decorate([
|
|
919
870
|
(0, decorators_1.exported)("devicesService")
|
|
920
871
|
], DevicesService.prototype, "getDebuggableViews", null);
|
|
921
|
-
exports.DevicesService = DevicesService;
|
|
922
872
|
yok_1.injector.register("devicesService", DevicesService);
|
|
923
873
|
//# sourceMappingURL=devices-service.js.map
|