Просмотр исходного кода

More global screen upgrades

Refactored FLEXGlobalsEntry to allow FLEXObjectExplorerFactory to conform to it and provide a different object based on the row type

Also added new rows: NSProcessInfo.processInfo, UIPasteboard.generalPasteboard, explore bundle/container
Tanner Bennett лет назад: 7
Родитель
Сommit
b69560e62e

+ 2 - 2
Classes/GlobalStateExplorers/FLEXAddressExplorerCoordinator.m

@@ -22,11 +22,11 @@
 
 
 #pragma mark - FLEXGlobalsEntry
 #pragma mark - FLEXGlobalsEntry
 
 
-+ (NSString *)globalsEntryTitle {
++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row {
     return @"🔎 Address Explorer";
     return @"🔎 Address Explorer";
 }
 }
 
 
-+ (FLEXGlobalsTableViewControllerRowAction)globalsEntryRowAction {
++ (FLEXGlobalsTableViewControllerRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row {
     return ^(FLEXGlobalsTableViewController *host) {
     return ^(FLEXGlobalsTableViewController *host) {
         NSString *title = @"Explore Object at Address";
         NSString *title = @"Explore Object at Address";
         NSString *message = @"Paste a hexadecimal address below, starting with '0x'. "
         NSString *message = @"Paste a hexadecimal address below, starting with '0x'. "

+ 2 - 2
Classes/GlobalStateExplorers/FLEXClassesTableViewController.m

@@ -70,11 +70,11 @@
 
 
 #pragma mark - FLEXGlobalsEntry
 #pragma mark - FLEXGlobalsEntry
 
 
-+ (NSString *)globalsEntryTitle {
++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row {
     return [NSString stringWithFormat:@"📕  %@ Classes", [FLEXUtility applicationName]];
     return [NSString stringWithFormat:@"📕  %@ Classes", [FLEXUtility applicationName]];
 }
 }
 
 
-+ (instancetype)globalsEntryViewController {
++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row {
     FLEXClassesTableViewController *classesViewController = [self new];
     FLEXClassesTableViewController *classesViewController = [self new];
     classesViewController.binaryImageName = [FLEXUtility applicationImageName];
     classesViewController.binaryImageName = [FLEXUtility applicationImageName];
 
 

+ 2 - 2
Classes/GlobalStateExplorers/FLEXCookiesTableViewController.m

@@ -70,11 +70,11 @@
 
 
 #pragma mark - FLEXGlobalsEntry
 #pragma mark - FLEXGlobalsEntry
 
 
-+ (NSString *)globalsEntryTitle {
++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row {
     return @"🍪  Cookies";
     return @"🍪  Cookies";
 }
 }
 
 
-+ (instancetype)globalsEntryViewController {
++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row {
     return [self new];
     return [self new];
 }
 }
 
 

+ 3 - 3
Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.m

@@ -42,13 +42,13 @@
 
 
 #pragma mark - FLEXGlobalsEntry
 #pragma mark - FLEXGlobalsEntry
 
 
-+ (NSString *)globalsEntryTitle {
++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row {
     return @"📚  System Libraries";
     return @"📚  System Libraries";
 }
 }
 
 
-+ (instancetype)globalsEntryViewController {
++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row {
     FLEXLibrariesTableViewController *librariesViewController = [self new];
     FLEXLibrariesTableViewController *librariesViewController = [self new];
-    librariesViewController.title = [self globalsEntryTitle];
+    librariesViewController.title = [self globalsEntryTitle:row];
 
 
     return librariesViewController;
     return librariesViewController;
 }
 }

+ 2 - 2
Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.m

@@ -129,11 +129,11 @@ static const NSInteger kFLEXLiveObjectsSortBySizeIndex = 2;
 
 
 #pragma mark - FLEXGlobalsEntry
 #pragma mark - FLEXGlobalsEntry
 
 
-+ (NSString *)globalsEntryTitle {
++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row {
     return @"💩  Heap Objects";
     return @"💩  Heap Objects";
 }
 }
 
 
-+ (instancetype)globalsEntryViewController {
++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row {
     return [self new];
     return [self new];
 }
 }
 
 

+ 12 - 4
Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserTableViewController.m

@@ -88,12 +88,20 @@
 
 
 #pragma mark - FLEXGlobalsEntry
 #pragma mark - FLEXGlobalsEntry
 
 
-+ (NSString *)globalsEntryTitle {
-    return @"📁  File Browser";
++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row {
+    switch (row) {
+        case FLEXGlobalsRowBrowseBundle: return @"📁  Browse Bundle Directory";
+        case FLEXGlobalsRowBrowseContainer: return @"📁  Browse Container Directory";
+        default: return nil;
+    }
 }
 }
 
 
-+ (instancetype)globalsEntryViewController {
-    return [self new];
++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row {
+    switch (row) {
+        case FLEXGlobalsRowBrowseBundle: return [[self alloc] initWithPath:NSBundle.mainBundle.bundlePath];
+        case FLEXGlobalsRowBrowseContainer: return [[self alloc] initWithPath:NSHomeDirectory()];
+        default: return [self new];
+    }
 }
 }
 
 
 #pragma mark - Misc
 #pragma mark - Misc

+ 28 - 5
Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h

@@ -10,6 +10,29 @@
 #import "FLEXTableViewSection.h"
 #import "FLEXTableViewSection.h"
 @class FLEXGlobalsTableViewController;
 @class FLEXGlobalsTableViewController;
 
 
+typedef NS_ENUM(NSUInteger, FLEXGlobalsRow) {
+    FLEXGlobalsRowProcessInfo,
+    FLEXGlobalsRowNetworkHistory,
+    FLEXGlobalsRowSystemLog,
+    FLEXGlobalsRowLiveObjects,
+    FLEXGlobalsRowAddressInspector,
+    FLEXGlobalsRowCookies,
+    FLEXGlobalsRowSystemLibraries,
+    FLEXGlobalsRowAppClasses,
+    FLEXGlobalsRowAppDelegate,
+    FLEXGlobalsRowRootViewController,
+    FLEXGlobalsRowUserDefaults,
+    FLEXGlobalsRowMainBundle,
+    FLEXGlobalsRowBrowseBundle,
+    FLEXGlobalsRowBrowseContainer,
+    FLEXGlobalsRowApplication,
+    FLEXGlobalsRowKeyWindow,
+    FLEXGlobalsRowMainScreen,
+    FLEXGlobalsRowCurrentDevice,
+    FLEXGlobalsRowPasteboard,
+    FLEXGlobalsRowCount
+};
+
 typedef NSString *(^FLEXGlobalsEntryNameFuture)(void);
 typedef NSString *(^FLEXGlobalsEntryNameFuture)(void);
 /// Simply return a view controller to be pushed on the navigation stack
 /// Simply return a view controller to be pushed on the navigation stack
 typedef UIViewController *(^FLEXGlobalsTableViewControllerViewControllerFuture)(void);
 typedef UIViewController *(^FLEXGlobalsTableViewControllerViewControllerFuture)(void);
@@ -25,13 +48,13 @@ typedef void (^FLEXGlobalsTableViewControllerRowAction)(FLEXGlobalsTableViewCont
 /// will not be invoked until the title and view controller / row action are needed.
 /// will not be invoked until the title and view controller / row action are needed.
 @protocol FLEXGlobalsEntry <NSObject>
 @protocol FLEXGlobalsEntry <NSObject>
 
 
-+ (NSString *)globalsEntryTitle;
++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row;
 
 
 // Must respond to at least one of the below
 // Must respond to at least one of the below
 @optional
 @optional
 
 
-+ (instancetype)globalsEntryViewController;
-+ (FLEXGlobalsTableViewControllerRowAction)globalsEntryRowAction;
++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row;
++ (FLEXGlobalsTableViewControllerRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row;
 
 
 @end
 @end
 
 
@@ -41,7 +64,7 @@ typedef void (^FLEXGlobalsTableViewControllerRowAction)(FLEXGlobalsTableViewCont
 @property (nonatomic, readonly) FLEXGlobalsTableViewControllerViewControllerFuture viewControllerFuture;
 @property (nonatomic, readonly) FLEXGlobalsTableViewControllerViewControllerFuture viewControllerFuture;
 @property (nonatomic, readonly) FLEXGlobalsTableViewControllerRowAction rowAction;
 @property (nonatomic, readonly) FLEXGlobalsTableViewControllerRowAction rowAction;
 
 
-+ (instancetype)entryWithEntry:(Class<FLEXGlobalsEntry>)entry;
++ (instancetype)entryWithEntry:(Class<FLEXGlobalsEntry>)entry row:(FLEXGlobalsRow)row;
 + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture viewControllerFuture:(FLEXGlobalsTableViewControllerViewControllerFuture)viewControllerFuture;
 + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture viewControllerFuture:(FLEXGlobalsTableViewControllerViewControllerFuture)viewControllerFuture;
 + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture action:(FLEXGlobalsTableViewControllerRowAction)rowSelectedAction;
 + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture action:(FLEXGlobalsTableViewControllerRowAction)rowSelectedAction;
 
 
@@ -52,6 +75,6 @@ typedef void (^FLEXGlobalsTableViewControllerRowAction)(FLEXGlobalsTableViewCont
 
 
 /// @return The result of passing self to +[FLEXGlobalsEntry entryWithEntry:]
 /// @return The result of passing self to +[FLEXGlobalsEntry entryWithEntry:]
 /// if the class conforms to FLEXGlobalsEntry, else, nil.
 /// if the class conforms to FLEXGlobalsEntry, else, nil.
-+ (FLEXGlobalsEntry *)flex_concreteGlobalsEntry;
++ (FLEXGlobalsEntry *)flex_concreteGlobalsEntry:(FLEXGlobalsRow)row;
 
 
 @end
 @end

+ 9 - 9
Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.m

@@ -10,21 +10,21 @@
 
 
 @implementation FLEXGlobalsEntry
 @implementation FLEXGlobalsEntry
 
 
-+ (instancetype)entryWithEntry:(Class<FLEXGlobalsEntry>)cls
++ (instancetype)entryWithEntry:(Class<FLEXGlobalsEntry>)cls row:(FLEXGlobalsRow)row
 {
 {
     NSParameterAssert(cls);
     NSParameterAssert(cls);
     NSParameterAssert(
     NSParameterAssert(
-        [cls respondsToSelector:@selector(globalsEntryViewController)] ||
-        [cls respondsToSelector:@selector(globalsEntryRowAction)]
+        [cls respondsToSelector:@selector(globalsEntryViewController:)] ||
+        [cls respondsToSelector:@selector(globalsEntryRowAction:)]
     );
     );
 
 
     FLEXGlobalsEntry *entry = [self new];
     FLEXGlobalsEntry *entry = [self new];
-    entry->_entryNameFuture = ^{ return [cls globalsEntryTitle]; };
+    entry->_entryNameFuture = ^{ return [cls globalsEntryTitle:row]; };
 
 
-    if ([cls respondsToSelector:@selector(globalsEntryViewController)]) {
-        entry->_viewControllerFuture = ^{ return [cls globalsEntryViewController]; };
+    if ([cls respondsToSelector:@selector(globalsEntryViewController:)]) {
+        entry->_viewControllerFuture = ^{ return [cls globalsEntryViewController:row]; };
     } else {
     } else {
-        entry->_rowAction = [cls globalsEntryRowAction];
+        entry->_rowAction = [cls globalsEntryRowAction:row];
     }
     }
 
 
     return entry;
     return entry;
@@ -69,9 +69,9 @@
 
 
 @implementation NSObject (FLEXGlobalsEntry)
 @implementation NSObject (FLEXGlobalsEntry)
 
 
-+ (FLEXGlobalsEntry *)flex_concreteGlobalsEntry {
++ (FLEXGlobalsEntry *)flex_concreteGlobalsEntry:(FLEXGlobalsRow)row {
     if ([self conformsToProtocol:@protocol(FLEXGlobalsEntry)]) {
     if ([self conformsToProtocol:@protocol(FLEXGlobalsEntry)]) {
-        return [FLEXGlobalsEntry entryWithEntry:self];
+        return [FLEXGlobalsEntry entryWithEntry:self row:row];
     }
     }
 
 
     return nil;
     return nil;

+ 0 - 20
Classes/GlobalStateExplorers/Globals/FLEXGlobalsTableViewController.h

@@ -23,26 +23,6 @@ typedef NS_ENUM(NSUInteger, FLEXGlobalsSection) {
     FLEXGlobalsSectionCount
     FLEXGlobalsSectionCount
 };
 };
 
 
-typedef NS_ENUM(NSUInteger, FLEXGlobalsRow) {
-    FLEXGlobalsRowNetworkHistory,
-    FLEXGlobalsRowSystemLog,
-    FLEXGlobalsRowLiveObjects,
-    FLEXGlobalsRowAddressInspector,
-    FLEXGlobalsRowFileBrowser,
-    FLEXGlobalsRowCookies,
-    FLEXGlobalsRowSystemLibraries,
-    FLEXGlobalsRowAppClasses,
-    FLEXGlobalsRowAppDelegate,
-    FLEXGlobalsRowRootViewController,
-    FLEXGlobalsRowUserDefaults,
-    FLEXGlobalsRowMainBundle,
-    FLEXGlobalsRowApplication,
-    FLEXGlobalsRowKeyWindow,
-    FLEXGlobalsRowMainScreen,
-    FLEXGlobalsRowCurrentDevice,
-    FLEXGlobalsRowCount
-};
-
 @interface FLEXGlobalsTableViewController : FLEXTableViewController
 @interface FLEXGlobalsTableViewController : FLEXTableViewController
 
 
 @property (nonatomic, weak) id <FLEXGlobalsTableViewControllerDelegate> delegate;
 @property (nonatomic, weak) id <FLEXGlobalsTableViewControllerDelegate> delegate;

+ 21 - 62
Classes/GlobalStateExplorers/Globals/FLEXGlobalsTableViewController.m

@@ -55,30 +55,22 @@ static __weak UIWindow *s_applicationWindow = nil;
 {
 {
     switch (row) {
     switch (row) {
         case FLEXGlobalsRowAppClasses:
         case FLEXGlobalsRowAppClasses:
-            return [FLEXClassesTableViewController flex_concreteGlobalsEntry];
+            return [FLEXClassesTableViewController flex_concreteGlobalsEntry:row];
         case FLEXGlobalsRowAddressInspector:
         case FLEXGlobalsRowAddressInspector:
-            return [FLEXAddressExplorerCoordinator flex_concreteGlobalsEntry];
+            return [FLEXAddressExplorerCoordinator flex_concreteGlobalsEntry:row];
         case FLEXGlobalsRowSystemLibraries:
         case FLEXGlobalsRowSystemLibraries:
-            return [FLEXLibrariesTableViewController flex_concreteGlobalsEntry];
+            return [FLEXLibrariesTableViewController flex_concreteGlobalsEntry:row];
         case FLEXGlobalsRowLiveObjects:
         case FLEXGlobalsRowLiveObjects:
-            return [FLEXLiveObjectsTableViewController flex_concreteGlobalsEntry];
+            return [FLEXLiveObjectsTableViewController flex_concreteGlobalsEntry:row];
         case FLEXGlobalsRowCookies:
         case FLEXGlobalsRowCookies:
-            return [FLEXCookiesTableViewController flex_concreteGlobalsEntry];
-        case FLEXGlobalsRowFileBrowser:
-            return [FLEXFileBrowserTableViewController flex_concreteGlobalsEntry];
+            return [FLEXCookiesTableViewController flex_concreteGlobalsEntry:row];
+        case FLEXGlobalsRowBrowseBundle:
+        case FLEXGlobalsRowBrowseContainer:
+            return [FLEXFileBrowserTableViewController flex_concreteGlobalsEntry:row];
         case FLEXGlobalsRowSystemLog:
         case FLEXGlobalsRowSystemLog:
-            return [FLEXSystemLogTableViewController flex_concreteGlobalsEntry];
+            return [FLEXSystemLogTableViewController flex_concreteGlobalsEntry:row];
         case FLEXGlobalsRowNetworkHistory:
         case FLEXGlobalsRowNetworkHistory:
-            return [FLEXNetworkHistoryTableViewController flex_concreteGlobalsEntry];
-        case FLEXGlobalsRowAppDelegate:
-            return [FLEXGlobalsEntry
-                entryWithNameFuture:^NSString *{
-                    return [NSString stringWithFormat:@"👉  %@", [[UIApplication sharedApplication].delegate class]];
-                } viewControllerFuture:^UIViewController *{
-                    id<UIApplicationDelegate> appDelegate = [UIApplication sharedApplication].delegate;
-                    return [FLEXObjectExplorerFactory explorerViewControllerForObject:appDelegate];
-                }
-            ];
+            return [FLEXNetworkHistoryTableViewController flex_concreteGlobalsEntry:row];
         case FLEXGlobalsRowRootViewController:
         case FLEXGlobalsRowRootViewController:
             return [FLEXGlobalsEntry
             return [FLEXGlobalsEntry
                 entryWithNameFuture:^NSString *{
                 entryWithNameFuture:^NSString *{
@@ -88,33 +80,6 @@ static __weak UIWindow *s_applicationWindow = nil;
                     return [FLEXObjectExplorerFactory explorerViewControllerForObject:rootViewController];
                     return [FLEXObjectExplorerFactory explorerViewControllerForObject:rootViewController];
                 }
                 }
             ];
             ];
-        case FLEXGlobalsRowUserDefaults:
-            return [FLEXGlobalsEntry
-                entryWithNameFuture:^NSString *{
-                    return @"🚶  +[NSUserDefaults standardUserDefaults]";
-                } viewControllerFuture:^UIViewController *{
-                    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
-                    return [FLEXObjectExplorerFactory explorerViewControllerForObject:standardUserDefaults];
-                }
-            ];
-        case FLEXGlobalsRowMainBundle:
-            return [FLEXGlobalsEntry
-                entryWithNameFuture:^NSString *{
-                    return @"📦  +[NSBundle mainBundle]";
-                } viewControllerFuture:^UIViewController *{
-                    NSBundle *mainBundle = [NSBundle mainBundle];
-                    return [FLEXObjectExplorerFactory explorerViewControllerForObject:mainBundle];
-                }
-            ];
-        case FLEXGlobalsRowApplication:
-            return [FLEXGlobalsEntry
-                entryWithNameFuture:^NSString *{
-                    return @"💾  +[UIApplication sharedApplication]";
-                } viewControllerFuture:^UIViewController *{
-                    UIApplication *sharedApplication = [UIApplication sharedApplication];
-                    return [FLEXObjectExplorerFactory explorerViewControllerForObject:sharedApplication];
-                }
-            ];
         case FLEXGlobalsRowKeyWindow:
         case FLEXGlobalsRowKeyWindow:
             return [FLEXGlobalsEntry
             return [FLEXGlobalsEntry
                 entryWithNameFuture:^NSString *{
                 entryWithNameFuture:^NSString *{
@@ -123,25 +88,15 @@ static __weak UIWindow *s_applicationWindow = nil;
                     return [FLEXObjectExplorerFactory explorerViewControllerForObject:s_applicationWindow];
                     return [FLEXObjectExplorerFactory explorerViewControllerForObject:s_applicationWindow];
                 }
                 }
             ];
             ];
+        case FLEXGlobalsRowProcessInfo:
+        case FLEXGlobalsRowAppDelegate:
+        case FLEXGlobalsRowUserDefaults:
+        case FLEXGlobalsRowMainBundle:
+        case FLEXGlobalsRowApplication:
         case FLEXGlobalsRowMainScreen:
         case FLEXGlobalsRowMainScreen:
-            return [FLEXGlobalsEntry
-                entryWithNameFuture:^NSString *{
-                    return @"💻  +[UIScreen mainScreen]";
-                } viewControllerFuture:^UIViewController *{
-                    UIScreen *mainScreen = [UIScreen mainScreen];
-                    return [FLEXObjectExplorerFactory explorerViewControllerForObject:mainScreen];
-                }
-            ];
-
         case FLEXGlobalsRowCurrentDevice:
         case FLEXGlobalsRowCurrentDevice:
-            return [FLEXGlobalsEntry
-                entryWithNameFuture:^NSString *{
-                    return @"📱  +[UIDevice currentDevice]";
-                } viewControllerFuture:^UIViewController *{
-                    UIDevice *currentDevice = [UIDevice currentDevice];
-                    return [FLEXObjectExplorerFactory explorerViewControllerForObject:currentDevice];
-                }
-            ];
+        case FLEXGlobalsRowPasteboard:
+            return [FLEXObjectExplorerFactory flex_concreteGlobalsEntry:row];
 
 
         default:
         default:
             @throw NSInternalInconsistencyException;
             @throw NSInternalInconsistencyException;
@@ -155,6 +110,7 @@ static __weak UIWindow *s_applicationWindow = nil;
     dispatch_once(&onceToken, ^{
     dispatch_once(&onceToken, ^{
         NSArray *rows = @[
         NSArray *rows = @[
             @[
             @[
+                [self globalsEntryForRow:FLEXGlobalsRowProcessInfo],
                 [self globalsEntryForRow:FLEXGlobalsRowNetworkHistory],
                 [self globalsEntryForRow:FLEXGlobalsRowNetworkHistory],
                 [self globalsEntryForRow:FLEXGlobalsRowSystemLog],
                 [self globalsEntryForRow:FLEXGlobalsRowSystemLog],
                 [self globalsEntryForRow:FLEXGlobalsRowLiveObjects],
                 [self globalsEntryForRow:FLEXGlobalsRowLiveObjects],
@@ -170,8 +126,11 @@ static __weak UIWindow *s_applicationWindow = nil;
                 [self globalsEntryForRow:FLEXGlobalsRowKeyWindow],
                 [self globalsEntryForRow:FLEXGlobalsRowKeyWindow],
                 [self globalsEntryForRow:FLEXGlobalsRowRootViewController],
                 [self globalsEntryForRow:FLEXGlobalsRowRootViewController],
                 [self globalsEntryForRow:FLEXGlobalsRowCookies],
                 [self globalsEntryForRow:FLEXGlobalsRowCookies],
+                [self globalsEntryForRow:FLEXGlobalsRowBrowseBundle],
+                [self globalsEntryForRow:FLEXGlobalsRowBrowseContainer],
             ],
             ],
             @[ // FLEXGlobalsSectionMisc
             @[ // FLEXGlobalsSectionMisc
+                [self globalsEntryForRow:FLEXGlobalsRowPasteboard],
                 [self globalsEntryForRow:FLEXGlobalsRowMainScreen],
                 [self globalsEntryForRow:FLEXGlobalsRowMainScreen],
                 [self globalsEntryForRow:FLEXGlobalsRowCurrentDevice],
                 [self globalsEntryForRow:FLEXGlobalsRowCurrentDevice],
             ]
             ]

+ 2 - 2
Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.m

@@ -118,11 +118,11 @@
 
 
 #pragma mark - FLEXGlobalsEntry
 #pragma mark - FLEXGlobalsEntry
 
 
-+ (NSString *)globalsEntryTitle {
++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row {
     return @"⚠️  System Log";
     return @"⚠️  System Log";
 }
 }
 
 
-+ (instancetype)globalsEntryViewController {
++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row {
     return [self new];
     return [self new];
 }
 }
 
 

+ 2 - 2
Classes/Network/FLEXNetworkHistoryTableViewController.m

@@ -156,11 +156,11 @@
 
 
 #pragma mark - FLEXGlobalsEntry
 #pragma mark - FLEXGlobalsEntry
 
 
-+ (NSString *)globalsEntryTitle {
++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row {
     return @"📡  Network History";
     return @"📡  Network History";
 }
 }
 
 
-+ (instancetype)globalsEntryViewController {
++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row {
     return [self new];
     return [self new];
 }
 }
 
 

+ 2 - 2
Classes/ObjectExplorers/FLEXObjectExplorerFactory.h

@@ -6,11 +6,11 @@
 //  Copyright (c) 2014 Flipboard. All rights reserved.
 //  Copyright (c) 2014 Flipboard. All rights reserved.
 //
 //
 
 
-#import <Foundation/Foundation.h>
+#import "FLEXGlobalsEntry.h"
 
 
 @class FLEXObjectExplorerViewController;
 @class FLEXObjectExplorerViewController;
 
 
-@interface FLEXObjectExplorerFactory : NSObject
+@interface FLEXObjectExplorerFactory : NSObject <FLEXGlobalsEntry>
 
 
 + (FLEXObjectExplorerViewController *)explorerViewControllerForObject:(id)object;
 + (FLEXObjectExplorerViewController *)explorerViewControllerForObject:(id)object;
 
 

+ 52 - 0
Classes/ObjectExplorers/FLEXObjectExplorerFactory.m

@@ -67,4 +67,56 @@
     return explorerViewController;
     return explorerViewController;
 }
 }
 
 
+#pragma mark - FLEXGlobalsEntry
+
++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row 
+{
+    switch (row) {
+        case FLEXGlobalsRowAppDelegate: {
+            Class cls = [[UIApplication sharedApplication].delegate class];
+            return [NSString stringWithFormat:@"👉  %@", cls];
+        }
+        case FLEXGlobalsRowProcessInfo:
+            return @"🚦  +[NSProcessInfo processInfo]";
+        case FLEXGlobalsRowUserDefaults:
+            return @"💾  +[NSUserDefaults standardUserDefaults]";
+        case FLEXGlobalsRowMainBundle:
+            return @"📦  +[NSBundle mainBundle]";
+        case FLEXGlobalsRowApplication:
+            return @"🚀  +[UIApplication sharedApplication]";
+        case FLEXGlobalsRowMainScreen:
+            return @"💻  +[UIScreen mainScreen]";
+        case FLEXGlobalsRowCurrentDevice:
+            return @"📱  +[UIDevice currentDevice]";
+        case FLEXGlobalsRowPasteboard:
+            return @"📋  +[UIPasteboard generalPastboard]";
+        default: return nil;
+    }
+}
+
++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row 
+{
+    switch (row) {
+        case FLEXGlobalsRowAppDelegate: {
+            id<UIApplicationDelegate> appDelegate = [UIApplication sharedApplication].delegate;
+            return [self explorerViewControllerForObject:appDelegate];
+        }
+        case FLEXGlobalsRowProcessInfo:
+            return [self explorerViewControllerForObject:[NSProcessInfo processInfo]];;
+        case FLEXGlobalsRowUserDefaults:
+            return [self explorerViewControllerForObject:[NSUserDefaults standardUserDefaults]];
+        case FLEXGlobalsRowMainBundle:
+            return [self explorerViewControllerForObject:[NSBundle mainBundle]];
+        case FLEXGlobalsRowApplication:
+            return [self explorerViewControllerForObject:[UIApplication sharedApplication]];
+        case FLEXGlobalsRowMainScreen:
+            return [self explorerViewControllerForObject:[UIScreen mainScreen]];
+        case FLEXGlobalsRowCurrentDevice:
+            return [self explorerViewControllerForObject:[UIDevice currentDevice]];
+        case FLEXGlobalsRowPasteboard:
+            return [self explorerViewControllerForObject:[UIPasteboard generalPasteboard]];
+        default: return nil;
+    }
+}
+
 @end
 @end