FBDeviceControl/Commands/FBDeviceLocationCommands.m (53 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 "FBDeviceLocationCommands.h" #import "FBDevice.h" #import "FBDevice+Private.h" #import "FBDeviceControlError.h" #import "FBAMDServiceConnection.h" #import "FBAFCConnection.h" @interface FBDeviceLocationCommands () @property (nonatomic, weak, readonly) FBDevice *device; @end @implementation FBDeviceLocationCommands #pragma mark Initializers + (instancetype)commandsWithTarget:(FBDevice *)target { return [[self alloc] initWithDevice:target]; } - (instancetype)initWithDevice:(FBDevice *)device { self = [super init]; if (!self) { return nil; } _device = device; return self; } #pragma mark FBDeviceLocationCommands static const int StartCommand = 0x0000000; - (FBFuture<NSNull *> *)overrideLocationWithLongitude:(double)longitude latitude:(double)latitude { return [[[self.device ensureDeveloperDiskImageIsMounted] onQueue:self.device.workQueue pushTeardown:^(id _) { return [self.device startService:@"com.apple.dt.simulatelocation"]; }] onQueue:self.device.workQueue pop:^ FBFuture<NSNull *> * (FBAMDServiceConnection *connection) { NSData *start = [[NSData alloc] initWithBytes:&StartCommand length:sizeof(StartCommand)]; NSError *error = nil; if (![connection send:start error:&error]) { return [FBFuture futureWithError:error]; } NSString *value = [NSString stringWithFormat:@"%f", latitude]; NSData *data = [[NSData alloc] initWithBytes:value.UTF8String length:strlen(value.UTF8String)]; if (![connection sendWithLengthHeader:data error:&error]) { return [FBFuture futureWithError:error]; } value = [NSString stringWithFormat:@"%f", longitude]; data = [[NSData alloc] initWithBytes:value.UTF8String length:strlen(value.UTF8String)]; if (![connection sendWithLengthHeader:data error:&error]) { return [FBFuture futureWithError:error]; } return FBFuture.empty; }]; } @end