1// Copyright 2015-present 650 Industries. All rights reserved. 2#import "EXDevMenuAppInfo.h" 3#import <EXDevMenu-Swift.h> 4#import <EXManifests/EXManifestsManifestFactory.h> 5 6@implementation EXDevMenuAppInfo 7 8+(NSDictionary *)getAppInfo 9{ 10 NSMutableDictionary *appInfo = [NSMutableDictionary new]; 11 12 NSString *appIcon = [EXDevMenuAppInfo getAppIcon]; 13 NSString *runtimeVersion = [EXDevMenuAppInfo getUpdatesConfigForKey:@"EXUpdatesRuntimeVersion"]; 14 NSString *sdkVersion = [EXDevMenuAppInfo getUpdatesConfigForKey:@"EXUpdatesSDKVersion"]; 15 NSString *appVersion = [EXDevMenuAppInfo getFormattedAppVersion]; 16 NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleDisplayName"] ?: [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleExecutable"]; 17 18 DevMenuManager *manager = [DevMenuManager shared]; 19 20 if (manager.currentManifest != nil) { 21 appName = [manager.currentManifest name]; 22 appVersion = [manager.currentManifest version]; 23 } 24 25 NSString *engine = @"JSC"; 26 if ([[[[manager currentBridge] batchedBridge] bridgeDescription] containsString:@"Hermes"]) { 27 engine = @"Hermes"; 28 } 29 30 NSString *hostUrl = [manager.currentManifestURL absoluteString] ?: @""; 31 32 appInfo[@"appName"] = appName; 33 appInfo[@"appIcon"] = appIcon; 34 appInfo[@"appVersion"] = appVersion; 35 appInfo[@"runtimeVersion"] = runtimeVersion; 36 appInfo[@"sdkVersion"] = sdkVersion; 37 appInfo[@"hostUrl"] = hostUrl; 38 appInfo[@"engine"] = engine; 39 40 return appInfo; 41} 42 43+(NSString *)getAppIcon 44{ 45 NSString *appIcon = @""; 46 NSString *appIconName = [[[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIcons"] objectForKey:@"CFBundlePrimaryIcon"] objectForKey:@"CFBundleIconFiles"] lastObject]; 47 48 if (appIconName != nil) { 49 NSString *resourcePath = [[NSBundle mainBundle] resourcePath]; 50 NSString *appIconPath = [[resourcePath stringByAppendingString:appIconName] stringByAppendingString:@".png"]; 51 appIcon = [@"file://" stringByAppendingString:appIconPath]; 52 } 53 54 return appIcon; 55} 56 57+(NSString *)getUpdatesConfigForKey:(NSString *)key 58{ 59 NSString *value = @""; 60 NSString *path = [[NSBundle mainBundle] pathForResource:@"Expo" ofType:@"plist"]; 61 62 if (path != nil) { 63 NSDictionary *expoConfig = [NSDictionary dictionaryWithContentsOfFile:path]; 64 65 if (expoConfig != nil) { 66 value = [expoConfig objectForKey:key] ?: @""; 67 } 68 } 69 70 return value; 71} 72 73+(NSString *)getFormattedAppVersion 74{ 75 NSString *shortVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; 76 NSString *buildVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; 77 NSString *appVersion = [NSString stringWithFormat:@"%@ (%@)", shortVersion, buildVersion]; 78 return appVersion; 79} 80 81@end 82