1// Copyright 2015-present 650 Industries. All rights reserved.
2
3#import "EXConstantsBinding.h"
4#import "EXUnversioned.h"
5
6@interface EXConstantsBinding ()
7
8@property (nonatomic, strong) NSString *appOwnership;
9@property (nonatomic, strong) NSString *experienceId;
10@property (nonatomic, strong) NSDictionary *unversionedConstants;
11
12@end
13
14@implementation EXConstantsBinding : EXConstantsService
15
16- (instancetype)initWithExperienceId:(NSString *)experienceId andParams:(NSDictionary *)params
17{
18  if (self = [super init]) {
19    _experienceId = experienceId;
20    _unversionedConstants = params[@"constants"];
21    if (_unversionedConstants && _unversionedConstants[@"appOwnership"]) {
22      _appOwnership = _unversionedConstants[@"appOwnership"];
23    }
24  }
25  return self;
26}
27
28- (NSDictionary *)constants
29{
30  NSMutableDictionary *constants = [[super constants] mutableCopy];
31
32  [constants setValue:[self expoClientVersion] forKey:@"expoVersion"];
33
34  BOOL isDetached = NO;
35#ifdef EX_DETACHED
36  isDetached = YES;
37#endif
38
39  constants[@"isDetached"] = @(isDetached);
40
41  if (_unversionedConstants) {
42    [constants addEntriesFromDictionary:_unversionedConstants];
43  }
44
45  if ([constants[@"appOwnership"] isEqualToString:@"expo"]) {
46    NSMutableDictionary *platform = [constants[@"platform"] mutableCopy];
47    NSMutableDictionary *ios = [platform[@"ios"] mutableCopy];
48    [ios setValue:[NSNull null] forKey:@"buildNumber"];
49    [platform setValue:ios forKey:@"ios"];
50    [constants setValue:platform forKey:@"platform"];
51  }
52
53  return constants;
54}
55
56- (NSString *)expoClientVersion
57{
58  NSString *expoClientVersion = _unversionedConstants[EX_UNVERSIONED(@"expoRuntimeVersion")];
59  if (expoClientVersion) {
60    return expoClientVersion;
61  } else {
62    // not correct in standalone apps
63    return [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
64  }
65}
66
67@end
68