1// Copyright 2015-present 650 Industries. All rights reserved. 2 3#import "EXBuildConstants.h" 4 5@implementation EXBuildConstants 6 7+ (instancetype)sharedInstance 8{ 9 static EXBuildConstants *theBuildConstants; 10 static dispatch_once_t once; 11 dispatch_once(&once, ^{ 12 if (!theBuildConstants) { 13 theBuildConstants = [[EXBuildConstants alloc] init]; 14 } 15 }); 16 return theBuildConstants; 17} 18 19- (instancetype)init 20{ 21 if (self = [super init]) { 22 [self _loadConfig]; 23 } 24 return self; 25} 26 27#pragma mark - internal 28 29- (void)_reset 30{ 31 _expoRuntimeVersion = @""; 32} 33 34- (void)_loadConfig 35{ 36 [self _reset]; 37 38 NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"EXBuildConstants" ofType:@"plist"]; 39 NSDictionary *config = (plistPath) ? [NSDictionary dictionaryWithContentsOfFile:plistPath] : [NSDictionary dictionary]; 40 _isDevKernel = [config[@"IS_DEV_KERNEL"] boolValue]; 41 _kernelDevManifestSource = [[self class] _kernelManifestSourceFromString:config[@"DEV_KERNEL_SOURCE"]]; 42 if (_kernelDevManifestSource == kEXKernelDevManifestSourceLocal) { 43 // local kernel. use manifest from local server. 44 _kernelManifestJsonString = config[@"BUILD_MACHINE_KERNEL_MANIFEST"]; 45 } else if (_kernelDevManifestSource == kEXKernelDevManifestSourcePublished) { 46 // dev published kernel. use published manifest. 47 _kernelManifestJsonString = config[@"DEV_PUBLISHED_KERNEL_MANIFEST"]; 48 } else if (_kernelDevManifestSource == kEXKernelDevManifestSourceDogfooding) { 49 // dogfooding published kernel. use published dogfooding manifest. 50 _kernelManifestJsonString = config[@"DOGFOODING_PUBLISHED_KERNEL_MANIFEST"]; 51 } 52 _apiServerEndpoint = [NSURL URLWithString:config[@"API_SERVER_ENDPOINT"]]; 53 _temporarySdkVersion = config[@"TEMPORARY_SDK_VERSION"]; 54 if (config[@"EXPO_RUNTIME_VERSION"]) { 55 _expoRuntimeVersion = config[@"EXPO_RUNTIME_VERSION"]; 56 } 57 if (config[@"DEFAULT_API_KEYS"]) { 58 _defaultApiKeys = config[@"DEFAULT_API_KEYS"]; 59 } 60 _expoKitDevelopmentUrl = config[@"developmentUrl"]; // TODO: make legacy name consistent with the rest of this file 61} 62 63+ (EXKernelDevManifestSource)_kernelManifestSourceFromString:(NSString *)sourceString 64{ 65 if ([sourceString isEqualToString:@"LOCAL"]) { 66 return kEXKernelDevManifestSourceLocal; 67 } else if ([sourceString isEqualToString:@"PUBLISHED"]) { 68 return kEXKernelDevManifestSourcePublished; 69 } else if ([sourceString isEqualToString:@"DOGFOODING"]) { 70 return kEXKernelDevManifestSourceDogfooding; 71 } 72 return kEXKernelDevManifestSourceNone; 73} 74 75@end 76