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