FBSimulatorControl/Commands/FBSimulatorDapServerCommands.m (55 lines of code) (raw):

/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import "FBSimulatorDapServerCommands.h" #import "FBSimulator.h" @interface FBSimulatorDapServerCommand () @property (nonatomic, strong, readonly) FBSimulator *simulator; @end @implementation FBSimulatorDapServerCommand #pragma mark Initializers + (instancetype)commandsWithTarget:(FBSimulator *)target { return [[self alloc] initWithSimulator:target]; } - (instancetype)initWithSimulator:(FBSimulator *)simulator { self = [super init]; if (!self) { return nil; } _simulator = simulator; return self; } - (FBFuture<FBProcess<id, id<FBDataConsumer>, NSString *> *> *) launchDapServer:dapPath stdIn:(FBProcessInput *)stdIn stdOut:(id<FBDataConsumer>)stdOut{ NSString *dap_log_dir = [self.simulator.coreSimulatorLogsDirectory stringByAppendingPathComponent:@"dap"]; NSError *error = nil; BOOL createdDir = [[NSFileManager defaultManager] createDirectoryAtPath:dap_log_dir withIntermediateDirectories:YES attributes:nil error:&error]; if (!createdDir) { return [[FBControlCoreError describeFormat:@"Dap Command: Failed to create log director on path %@. Error: %@", dap_log_dir, error.localizedDescription] failFuture]; } NSString *log_string = [dap_log_dir stringByAppendingPathComponent:[NSUUID.UUID.UUIDString stringByAppendingString:@".log"]]; BOOL createdLogFile = [[NSFileManager defaultManager] createFileAtPath:log_string contents:nil attributes:nil]; if (!createdLogFile) { return [[FBControlCoreError describeFormat:@"Failed to create log file on path %@", log_string] failFuture]; } [self.simulator.logger.debug logFormat:@"Dap Command: Launching dap server logging at path %@", log_string]; NSDictionary<NSString *, NSString *> *envs = @{ @"LLDBVSCODE_LOG": log_string }; NSString *fullPath = [self.simulator.dataDirectory stringByAppendingPathComponent:dapPath]; return [[[[[[FBProcessBuilder withLaunchPath:fullPath] withEnvironment:envs] withStdIn:stdIn] withStdOutConsumer: stdOut] withStdErrInMemoryAsString] start]; } @end