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