FBSimulatorControl/Configuration/FBSimulatorControlConfiguration.m (65 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 "FBSimulatorControlConfiguration.h"
#import <CoreSimulator/CDStructures.h>
#import <CoreSimulator/SimDeviceSet.h>
#import <CoreSimulator/SimDeviceSet+Removed.h>
#import <FBControlCore/FBControlCore.h>
#import <objc/runtime.h>
#import "FBSimulatorControl+PrincipalClass.h"
#import "FBSimulatorControlFrameworkLoader.h"
@interface FBSimulatorControlConfiguration ()
@property (nonatomic, copy, readwrite) NSString *deviceSetPath;
@end
@implementation FBSimulatorControlConfiguration
+ (void)initialize
{
[FBSimulatorControlFrameworkLoader.essentialFrameworks loadPrivateFrameworksOrAbort];
}
#pragma mark Initializers
+ (instancetype)configurationWithDeviceSetPath:(NSString *)deviceSetPath logger:(id<FBControlCoreLogger>)logger reporter:(id<FBEventReporter>)reporter
{
return [[self alloc] initWithDeviceSetPath:deviceSetPath logger:(logger ?: FBControlCoreGlobalConfiguration.defaultLogger) reporter:reporter];
}
- (instancetype)initWithDeviceSetPath:(NSString *)deviceSetPath logger:(id<FBControlCoreLogger>)logger reporter:(id<FBEventReporter>)reporter
{
self = [super init];
if (!self) {
return nil;
}
_deviceSetPath = deviceSetPath;
_logger = logger;
_reporter = reporter;
return self;
}
#pragma mark NSCopying
- (instancetype)copyWithZone:(NSZone *)zone
{
return self;
}
#pragma mark NSObject
- (NSUInteger)hash
{
return self.deviceSetPath.hash;
}
- (BOOL)isEqual:(FBSimulatorControlConfiguration *)object
{
if (![object isKindOfClass:self.class]) {
return NO;
}
return ((self.deviceSetPath == nil && object.deviceSetPath == nil) || [self.deviceSetPath isEqual:object.deviceSetPath]);
}
- (NSString *)description
{
return [NSString stringWithFormat:
@"Pool Config | Set Path %@",
self.deviceSetPath
];
}
@end
@implementation FBSimulatorControlConfiguration (Helpers)
+ (NSString *)defaultDeviceSetPath
{
Class deviceSetClass = objc_lookUpClass("SimDeviceSet");
NSAssert(deviceSetClass, @"Expected SimDeviceSet to be loaded");
return [deviceSetClass defaultSetPath] ?: [[deviceSetClass defaultSet] setPath];
}
@end