nativescript
Version:
Command-line interface for building NativeScript projects
141 lines • 7.24 kB
JavaScript
"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