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