UNPKG

nativescript

Version:

Command-line interface for building NativeScript projects

141 lines 7.24 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 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; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.IOSDevice = void 0; const applicationManagerPath = require("./ios-application-manager"); const fileSystemPath = require("./ios-device-file-system"); const commonConstants = require("../../../constants"); const constants = require("../../../../constants"); const net = require("net"); const _ = require("lodash"); const decorators_1 = require("../../../decorators"); const helpers = require("../../../../common/helpers"); const ios_device_base_1 = require("../ios-device-base"); const yok_1 = require("../../../yok"); class IOSDevice extends ios_device_base_1.IOSDeviceBase { constructor(deviceActionInfo, $errors, $injector, $iOSDebuggerPortService, $deviceLogProvider, $logger, $lockService, $iOSSocketRequestExecutor, $devicePlatformsConstants, $iOSDeviceProductNameMapper, $iosDeviceOperations, $mobileHelper) { super(); this.deviceActionInfo = deviceActionInfo; this.$errors = $errors; this.$injector = $injector; this.$iOSDebuggerPortService = $iOSDebuggerPortService; this.$deviceLogProvider = $deviceLogProvider; this.$logger = $logger; this.$lockService = $lockService; this.$iOSSocketRequestExecutor = $iOSSocketRequestExecutor; this.$devicePlatformsConstants = $devicePlatformsConstants; this.$iOSDeviceProductNameMapper = $iOSDeviceProductNameMapper; this.$iosDeviceOperations = $iosDeviceOperations; this.$mobileHelper = $mobileHelper; this.applicationManager = this.$injector.resolve(applicationManagerPath.IOSApplicationManager, { device: this, devicePointer: this.deviceActionInfo }); this.fileSystem = this.$injector.resolve(fileSystemPath.IOSDeviceFileSystem, { device: this, devicePointer: this.deviceActionInfo }); const productType = deviceActionInfo.productType; const isTablet = this.$mobileHelper.isiOSTablet(productType); const deviceStatus = deviceActionInfo.status || commonConstants.UNREACHABLE_STATUS; this.deviceInfo = { identifier: deviceActionInfo.deviceId, vendor: "Apple", platform: this.getPlatform(productType), status: deviceStatus, errorHelp: deviceStatus === commonConstants.UNREACHABLE_STATUS ? `Device ${deviceActionInfo.deviceId} is ${commonConstants.UNREACHABLE_STATUS}` : null, type: "Device", isTablet: isTablet, displayName: this.$iOSDeviceProductNameMapper.resolveProductName(deviceActionInfo.deviceName) || deviceActionInfo.deviceName, model: this.$iOSDeviceProductNameMapper.resolveProductName(productType), version: deviceActionInfo.productVersion, color: deviceActionInfo.deviceColor, activeArchitecture: this.getActiveArchitecture(productType), connectionTypes: [], }; if (deviceActionInfo.isUSBConnected) { this.deviceInfo.connectionTypes.push(constants.DeviceConnectionType.USB); } if (deviceActionInfo.isWiFiConnected) { this.deviceInfo.connectionTypes.push(constants.DeviceConnectionType.Wifi); } } get isEmulator() { return false; } get isOnlyWiFiConnected() { const result = this.deviceInfo.connectionTypes.every((connectionType) => connectionType === constants.DeviceConnectionType.Wifi); return result; } async openDeviceLogStream() { if (this.deviceInfo.status !== commonConstants.UNREACHABLE_STATUS) { this._deviceLogHandler = this.actionOnDeviceLog.bind(this); this.$iosDeviceOperations.on(commonConstants.DEVICE_LOG_EVENT_NAME, this._deviceLogHandler); this.$iosDeviceOperations.startDeviceLog(this.deviceInfo.identifier); } } async getDebugSocketCore(appId) { await this.$iOSSocketRequestExecutor.executeAttachRequest(this, constants.AWAIT_NOTIFICATION_TIMEOUT_SECONDS, appId); const port = await super.getDebuggerPort(appId); const deviceId = this.deviceInfo.identifier; const socket = await helpers.connectEventuallyUntilTimeout(async () => { const deviceResponse = _.first((await this.$iosDeviceOperations.connectToPort([ { deviceId: deviceId, port: port }, ]))[deviceId]); const _socket = new net.Socket(); _socket.connect(deviceResponse.port, deviceResponse.host); return _socket; }, commonConstants.SOCKET_CONNECTION_TIMEOUT_MS); return socket; } actionOnDeviceLog(response) { if (response.deviceId === this.deviceInfo.identifier) { this.$deviceLogProvider.logData(response.message, this.$devicePlatformsConstants.iOS, this.deviceInfo.identifier); } } detach() { if (this._deviceLogHandler) { this.$iosDeviceOperations.removeListener(commonConstants.DEVICE_LOG_EVENT_NAME, this._deviceLogHandler); } } getActiveArchitecture(productType) { let activeArchitecture = ""; if (productType) { productType = productType.toLowerCase().trim(); const majorVersionAsString = productType.match(/.*?(\d+)\,(\d+)/)[1]; const majorVersion = parseInt(majorVersionAsString); let isArm64Architecture = false; //https://en.wikipedia.org/wiki/List_of_iOS_devices if (_.startsWith(productType, "iphone")) { isArm64Architecture = majorVersion >= 6; } else if (_.startsWith(productType, "ipad")) { isArm64Architecture = majorVersion >= 4; } else if (_.startsWith(productType, "ipod")) { isArm64Architecture = majorVersion >= 7; } else if (_.startsWith(productType, "realitydevice")) { // visionos isArm64Architecture = true; } activeArchitecture = isArm64Architecture ? "arm64" : "armv7"; } return activeArchitecture; } getPlatform(productType) { productType = productType.toLowerCase().trim(); if (_.startsWith(productType, "realitydevice")) { // visionos return this.$devicePlatformsConstants.visionOS; } return this.$devicePlatformsConstants.iOS; } } exports.IOSDevice = IOSDevice; __decorate([ (0, decorators_1.cache)() ], IOSDevice.prototype, "openDeviceLogStream", null); yok_1.injector.register("iOSDevice", IOSDevice); //# sourceMappingURL=ios-device.js.map