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