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