Browse Source

Bump version, expose more public headers

Tanner Bennett 4 years ago
parent
commit
36e0e9fb1e
55 changed files with 523 additions and 338 deletions
  1. 3 1
      Classes/Core/FLEXTableViewSection.h
  2. 2 1
      Classes/Core/FLEXTableViewSection.m
  3. 1 0
      Classes/Editing/FLEXFieldEditorViewController.m
  4. 9 9
      Classes/ExplorerInterface/FLEXExplorerViewController.m
  5. 1 0
      Classes/ExplorerInterface/FLEXViewControllersViewController.m
  6. 27 0
      Classes/FLEX-Categories.h
  7. 23 0
      Classes/FLEX-Core.h
  8. 30 0
      Classes/FLEX-ObjectExploring.h
  9. 25 0
      Classes/FLEX-Runtime.h
  10. 13 0
      Classes/FLEX.h
  11. 4 4
      Classes/GlobalStateExplorers/FLEXAddressExplorerCoordinator.m
  12. 7 8
      Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h
  13. 2 2
      Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.m
  14. 1 0
      Classes/Manager/FLEXManager+Extensibility.m
  15. 0 0
      Classes/Manager/FLEXManager.h
  16. 2 2
      Classes/Network/FLEXNetworkMITMViewController.m
  17. 3 4
      Classes/ObjectExplorers/FLEXObjectExplorerFactory.m
  18. 8 8
      Classes/Toolbar/FLEXExplorerToolbar.h
  19. 17 17
      Classes/Toolbar/FLEXExplorerToolbar.m
  20. 5 5
      Classes/Toolbar/FLEXToolbarItem.h
  21. 8 8
      Classes/Toolbar/FLEXToolbarItem.m
  22. 0 1
      Classes/Utility/Categories/FLEXRuntime+UIKitHelpers.h
  23. 1 2
      Classes/Utility/Categories/NSString+FLEX.h
  24. 74 0
      Classes/Utility/FLEXMacros.h
  25. 1 62
      Classes/Utility/FLEXUtility.h
  26. 1 70
      Classes/Utility/Runtime/FLEXRuntimeUtility.h
  27. 0 18
      Classes/Utility/Runtime/FLEXRuntimeUtility.m
  28. 79 0
      Classes/Utility/Runtime/Objc/FLEXRuntimeConstants.h
  29. 24 0
      Classes/Utility/Runtime/Objc/FLEXRuntimeConstants.m
  30. 0 0
      Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.h
  31. 0 0
      Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.m
  32. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXBlockDescription.h
  33. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXBlockDescription.m
  34. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.h
  35. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.m
  36. 1 4
      Classes/Utility/Runtime/Objc/FLEXIvar.h
  37. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXIvar.m
  38. 1 3
      Classes/Utility/Runtime/Objc/FLEXMethod.h
  39. 1 0
      Classes/Utility/Runtime/Objc/FLEXMethod.m
  40. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.h
  41. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.m
  42. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.h
  43. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.m
  44. 1 3
      Classes/Utility/Runtime/Objc/FLEXProperty.h
  45. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXProperty.m
  46. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.h
  47. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.m
  48. 1 2
      Classes/Utility/Runtime/Objc/FLEXProtocol.h
  49. 1 1
      Classes/Utility/Runtime/Objc/FLEXProtocol.m
  50. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.h
  51. 0 0
      Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.m
  52. 2 0
      Example/UICatalog.xcodeproj/project.pbxproj
  53. 0 2
      Example/UICatalog/AAPLCatalogTableTableViewController.m
  54. 8 3
      FLEX.podspec
  55. 136 98
      FLEX.xcodeproj/project.pbxproj

+ 3 - 1
Classes/Core/FLEXTableViewSection.h

@@ -6,7 +6,9 @@
 //  Copyright © 2020 Flipboard. All rights reserved.
 //
 
-#import "FLEXUtility.h"
+#import <UIKit/UIKit.h>
+#import "FLEXMacros.h"
+#import "NSArray+Functional.h"
 @class FLEXTableView;
 
 NS_ASSUME_NONNULL_BEGIN

+ 2 - 1
Classes/Core/FLEXTableViewSection.m

@@ -8,6 +8,7 @@
 
 #import "FLEXTableViewSection.h"
 #import "FLEXTableView.h"
+#import "FLEXUtility.h"
 #import "UIMenu+FLEX.h"
 
 #pragma clang diagnostic push
@@ -67,7 +68,7 @@
     return @"";
 }
 
-- (NSArray<UIMenuElement *> *)menuItemsForRow:(NSInteger)row sender:(UIViewController *)sender {
+- (NSArray<UIMenuElement *> *)menuItemsForRow:(NSInteger)row sender:(UIViewController *)sender API_AVAILABLE(ios(13)) {
     NSArray<NSString *> *copyItems = [self copyMenuItemsForRow:row];
     NSAssert(copyItems.count % 2 == 0, @"copyMenuItemsForRow: should return an even list");
     

+ 1 - 0
Classes/Editing/FLEXFieldEditorViewController.m

@@ -10,6 +10,7 @@
 #import "FLEXFieldEditorView.h"
 #import "FLEXArgumentInputViewFactory.h"
 #import "FLEXPropertyAttributes.h"
+#import "FLEXRuntimeUtility.h"
 #import "FLEXUtility.h"
 #import "FLEXColor.h"
 #import "UIBarButtonItem+FLEX.h"

+ 9 - 9
Classes/ExplorerInterface/FLEXExplorerViewController.m

@@ -7,7 +7,7 @@
 //
 
 #import "FLEXExplorerViewController.h"
-#import "FLEXToolbarItem.h"
+#import "FLEXExplorerToolbarItem.h"
 #import "FLEXUtility.h"
 #import "FLEXWindow.h"
 #import "FLEXTabList.h"
@@ -369,7 +369,7 @@ typedef NS_ENUM(NSUInteger, FLEXExplorerMode) {
 
 - (void)setupToolbarActions {
     FLEXExplorerToolbar *toolbar = self.explorerToolbar;
-    NSDictionary<NSString *, FLEXToolbarItem *> *actionsToItems = @{
+    NSDictionary<NSString *, FLEXExplorerToolbarItem *> *actionsToItems = @{
         NSStringFromSelector(@selector(selectButtonTapped:)):        toolbar.selectItem,
         NSStringFromSelector(@selector(hierarchyButtonTapped:)):     toolbar.hierarchyItem,
         NSStringFromSelector(@selector(recentButtonTapped:)):        toolbar.recentItem,
@@ -378,16 +378,16 @@ typedef NS_ENUM(NSUInteger, FLEXExplorerMode) {
         NSStringFromSelector(@selector(closeButtonTapped:)):         toolbar.closeItem,
     };
     
-    [actionsToItems enumerateKeysAndObjectsUsingBlock:^(NSString *sel, FLEXToolbarItem *item, BOOL *stop) {
+    [actionsToItems enumerateKeysAndObjectsUsingBlock:^(NSString *sel, FLEXExplorerToolbarItem *item, BOOL *stop) {
         [item addTarget:self action:NSSelectorFromString(sel) forControlEvents:UIControlEventTouchUpInside];
     }];
 }
 
-- (void)selectButtonTapped:(FLEXToolbarItem *)sender {
+- (void)selectButtonTapped:(FLEXExplorerToolbarItem *)sender {
     [self toggleSelectTool];
 }
 
-- (void)hierarchyButtonTapped:(FLEXToolbarItem *)sender {
+- (void)hierarchyButtonTapped:(FLEXExplorerToolbarItem *)sender {
     [self toggleViewsTool];
 }
 
@@ -396,20 +396,20 @@ typedef NS_ENUM(NSUInteger, FLEXExplorerMode) {
     return [UIApplication.sharedApplication valueForKey:statusBarString];
 }
 
-- (void)recentButtonTapped:(FLEXToolbarItem *)sender {
+- (void)recentButtonTapped:(FLEXExplorerToolbarItem *)sender {
     NSAssert(FLEXTabList.sharedList.activeTab, @"Must have active tab");
     [self presentViewController:FLEXTabList.sharedList.activeTab animated:YES completion:nil];
 }
 
-- (void)moveButtonTapped:(FLEXToolbarItem *)sender {
+- (void)moveButtonTapped:(FLEXExplorerToolbarItem *)sender {
     [self toggleMoveTool];
 }
 
-- (void)globalsButtonTapped:(FLEXToolbarItem *)sender {
+- (void)globalsButtonTapped:(FLEXExplorerToolbarItem *)sender {
     [self toggleMenuTool];
 }
 
-- (void)closeButtonTapped:(FLEXToolbarItem *)sender {
+- (void)closeButtonTapped:(FLEXExplorerToolbarItem *)sender {
     self.currentMode = FLEXExplorerModeDefault;
     [self.delegate explorerViewControllerDidFinish:self];
 }

+ 1 - 0
Classes/ExplorerInterface/FLEXViewControllersViewController.m

@@ -9,6 +9,7 @@
 #import "FLEXViewControllersViewController.h"
 #import "FLEXObjectExplorerFactory.h"
 #import "FLEXMutableListSection.h"
+#import "FLEXUtility.h"
 
 @interface FLEXViewControllersViewController ()
 @property (nonatomic, readonly) FLEXMutableListSection *section;

+ 27 - 0
Classes/FLEX-Categories.h

@@ -0,0 +1,27 @@
+//
+//  FLEX-Categories.h
+//  FLEX
+//
+//  Created by Tanner on 3/12/20.
+//  Copyright © 2020 Flipboard. All rights reserved.
+//
+
+
+
+#import <FLEX/UIBarButtonItem+FLEX.h>
+#import <FLEX/CALayer+FLEX.h>
+#import <FLEX/UIFont+FLEX.h>
+#import <FLEX/UIGestureRecognizer+Blocks.h>
+#import <FLEX/UIView+FLEX_Layout.h>
+#import <FLEX/UIPasteboard+FLEX.h>
+#import <FLEX/UIMenu+FLEX.h>
+#import <FLEX/UITextField+Range.h>
+
+#import <FLEX/NSObject+Reflection.h>
+#import <FLEX/NSArray+Functional.h>
+#import <FLEX/NSDictionary+ObjcRuntime.h>
+#import <FLEX/NSString+ObjcRuntime.h>
+#import <FLEX/NSString+FLEX.h>
+#import <FLEX/NSUserDefaults+FLEX.h>
+#import <FLEX/NSMapTable+FLEX_Subscripting.h>
+#import <FLEX/NSTimer+Blocks.h>

+ 23 - 0
Classes/FLEX-Core.h

@@ -0,0 +1,23 @@
+//
+//  FLEX-Core.h
+//  FLEX
+//
+//  Created by Tanner on 3/11/20.
+//  Copyright © 2020 Flipboard. All rights reserved.
+//
+
+#import <FLEX/FLEXFilteringTableViewController.h>
+#import <FLEX/FLEXNavigationController.h>
+#import <FLEX/FLEXTableViewController.h>
+#import <FLEX/FLEXTableView.h>
+
+#import <FLEX/FLEXSingleRowSection.h>
+#import <FLEX/FLEXTableViewSection.h>
+
+#import <FLEX/FLEXCodeFontCell.h>
+#import <FLEX/FLEXSubtitleTableViewCell.h>
+#import <FLEX/FLEXTableViewCell.h>
+#import <FLEX/FLEXMultilineTableViewCell.h>
+#import <FLEX/FLEXKeyValueTableViewCell.h>
+
+#import <FLEX/FLEXScopeCarousel.h>

+ 30 - 0
Classes/FLEX-ObjectExploring.h

@@ -0,0 +1,30 @@
+//
+//  FLEX-ObjectExploring.h
+//  FLEX
+//
+//  Created by Tanner on 3/11/20.
+//  Copyright © 2020 Flipboard. All rights reserved.
+//
+
+#import <FLEX/FLEXObjectExplorerFactory.h>
+#import <FLEX/FLEXObjectExplorerViewController.h>
+
+#import <FLEX/FLEXObjectExplorer.h>
+
+#import <FLEX/FLEXShortcut.h>
+#import <FLEX/FLEXShortcutsFactory+Defaults.h>
+#import <FLEX/FLEXShortcutsSection.h>
+#import <FLEX/FLEXBlockShortcuts.h>
+#import <FLEX/FLEXBundleShortcuts.h>
+#import <FLEX/FLEXClassShortcuts.h>
+#import <FLEX/FLEXImageShortcuts.h>
+#import <FLEX/FLEXLayerShortcuts.h>
+#import <FLEX/FLEXViewControllerShortcuts.h>
+#import <FLEX/FLEXViewShortcuts.h>
+
+#import <FLEX/FLEXCollectionContentSection.h>
+#import <FLEX/FLEXColorPreviewSection.h>
+#import <FLEX/FLEXDefaultsContentSection.h>
+#import <FLEX/FLEXMetadataSection.h>
+#import <FLEX/FLEXMutableListSection.h>
+#import <FLEX/FLEXObjectInfoSection.h>

+ 25 - 0
Classes/FLEX-Runtime.h

@@ -0,0 +1,25 @@
+//
+//  FLEX-Runtime.h
+//  FLEX
+//
+//  Created by Tanner on 3/11/20.
+//  Copyright © 2020 Flipboard. All rights reserved.
+//
+
+#import <FLEX/FLEXObjcInternal.h>
+#import <FLEX/FLEXRuntimeSafety.h>
+#import <FLEX/FLEXBlockDescription.h>
+#import <FLEX/FLEXTypeEncodingParser.h>
+
+#import <FLEX/FLEXMirror.h>
+#import <FLEX/FLEXProtocol.h>
+#import <FLEX/FLEXProperty.h>
+#import <FLEX/FLEXIvar.h>
+#import <FLEX/FLEXMethodBase.h>
+#import <FLEX/FLEXMethod.h>
+#import <FLEX/FLEXPropertyAttributes.h>
+#import <FLEX/FLEXRuntime+Compare.h>
+#import <FLEX/FLEXRuntime+UIKitHelpers.h>
+
+#import <FLEX/FLEXProtocolBuilder.h>
+#import <FLEX/FLEXClassBuilder.h>

+ 13 - 0
Classes/FLEX.h

@@ -9,3 +9,16 @@
 #import <FLEX/FLEXManager.h>
 #import <FLEX/FLEXManager+Extensibility.h>
 #import <FLEX/FLEXManager+Networking.h>
+
+#import <FLEX/FLEXExplorerToolbar.h>
+#import <FLEX/FLEXExplorerToolbarItem.h>
+#import <FLEX/FLEXGlobalsEntry.h>
+
+#import <FLEX/FLEX-Core.h>
+#import <FLEX/FLEX-Runtime.h>
+#import <FLEX/FLEX-Categories.h>
+#import <FLEX/FLEX-ObjectExploring.h>
+
+#import <FLEX/FLEXMacros.h>
+#import <FLEX/FLEXAlert.h>
+#import <FLEX/FLEXResources.h>

+ 4 - 4
Classes/GlobalStateExplorers/FLEXAddressExplorerCoordinator.m

@@ -13,7 +13,7 @@
 #import "FLEXRuntimeUtility.h"
 #import "FLEXUtility.h"
 
-@interface FLEXGlobalsViewController (FLEXAddressExploration)
+@interface UITableViewController (FLEXAddressExploration)
 - (void)deselectSelectedRow;
 - (void)tryExploreAddress:(NSString *)addressString safely:(BOOL)safely;
 @end
@@ -26,8 +26,8 @@
     return @"🔎  Address Explorer";
 }
 
-+ (FLEXGlobalsTableViewControllerRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row {
-    return ^(FLEXGlobalsViewController *host) {
++ (FLEXGlobalsEntryRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row {
+    return ^(UITableViewController *host) {
 
         NSString *title = @"Explore Object at Address";
         NSString *message = @"Paste a hexadecimal address below, starting with '0x'. "
@@ -59,7 +59,7 @@
 
 @end
 
-@implementation FLEXGlobalsViewController (FLEXAddressExploration)
+@implementation UITableViewController (FLEXAddressExploration)
 
 - (void)deselectSelectedRow {
     NSIndexPath *selected = self.tableView.indexPathForSelectedRow;

+ 7 - 8
Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h

@@ -7,7 +7,6 @@
 //
 
 #import <UIKit/UIKit.h>
-@class FLEXGlobalsViewController;
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -47,10 +46,10 @@ typedef NS_ENUM(NSUInteger, FLEXGlobalsRow) {
 
 typedef NSString * _Nonnull (^FLEXGlobalsEntryNameFuture)(void);
 /// Simply return a view controller to be pushed on the navigation stack
-typedef UIViewController * _Nullable (^FLEXGlobalsTableViewControllerViewControllerFuture)(void);
+typedef UIViewController * _Nullable (^FLEXGlobalsEntryViewControllerFuture)(void);
 /// Do something like present an alert, then use the host
 /// view controller to present or push another view controller.
-typedef void (^FLEXGlobalsTableViewControllerRowAction)(FLEXGlobalsViewController * _Nonnull host);
+typedef void (^FLEXGlobalsEntryRowAction)(__kindof UITableViewController * _Nonnull host);
 
 /// For view controllers to conform to to indicate they support being used
 /// in the globals table view controller. These methods help create concrete entries.
@@ -74,23 +73,23 @@ typedef void (^FLEXGlobalsTableViewControllerRowAction)(FLEXGlobalsViewControlle
 @optional
 
 + (nullable UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row;
-+ (nullable FLEXGlobalsTableViewControllerRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row;
++ (nullable FLEXGlobalsEntryRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row;
 
 @end
 
 @interface FLEXGlobalsEntry : NSObject
 
 @property (nonatomic, readonly, nonnull)  FLEXGlobalsEntryNameFuture entryNameFuture;
-@property (nonatomic, readonly, nullable) FLEXGlobalsTableViewControllerViewControllerFuture viewControllerFuture;
-@property (nonatomic, readonly, nullable) FLEXGlobalsTableViewControllerRowAction rowAction;
+@property (nonatomic, readonly, nullable) FLEXGlobalsEntryViewControllerFuture viewControllerFuture;
+@property (nonatomic, readonly, nullable) FLEXGlobalsEntryRowAction rowAction;
 
 + (instancetype)entryWithEntry:(Class<FLEXGlobalsEntry>)entry row:(FLEXGlobalsRow)row;
 
 + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture
-               viewControllerFuture:(FLEXGlobalsTableViewControllerViewControllerFuture)viewControllerFuture;
+               viewControllerFuture:(FLEXGlobalsEntryViewControllerFuture)viewControllerFuture;
 
 + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture
-                             action:(FLEXGlobalsTableViewControllerRowAction)rowSelectedAction;
+                             action:(FLEXGlobalsEntryRowAction)rowSelectedAction;
 
 @end
 

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

@@ -34,7 +34,7 @@
 }
 
 + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture
-               viewControllerFuture:(FLEXGlobalsTableViewControllerViewControllerFuture)viewControllerFuture {
+               viewControllerFuture:(FLEXGlobalsEntryViewControllerFuture)viewControllerFuture {
     NSParameterAssert(nameFuture);
     NSParameterAssert(viewControllerFuture);
 
@@ -46,7 +46,7 @@
 }
 
 + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture
-                             action:(FLEXGlobalsTableViewControllerRowAction)rowSelectedAction {
+                             action:(FLEXGlobalsEntryRowAction)rowSelectedAction {
     NSParameterAssert(nameFuture);
     NSParameterAssert(rowSelectedAction);
 

+ 1 - 0
Classes/Manager/FLEXManager+Extensibility.m

@@ -16,6 +16,7 @@
 #import "FLEXNetworkMITMViewController.h"
 #import "FLEXKeyboardHelpViewController.h"
 #import "FLEXFileBrowserTableViewController.h"
+#import "FLEXUtility.h"
 
 @interface FLEXManager (ExtensibilityPrivate)
 @property (nonatomic, readonly) UIViewController *topViewController;

Classes/FLEXManager.h → Classes/Manager/FLEXManager.h


+ 2 - 2
Classes/Network/FLEXNetworkMITMViewController.m

@@ -195,8 +195,8 @@
     return @"📡  Network History";
 }
 
-+ (FLEXGlobalsTableViewControllerRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row {
-    return ^(FLEXGlobalsViewController *host) {
++ (FLEXGlobalsEntryRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row {
+    return ^(UITableViewController *host) {
         if (FLEXNetworkObserver.isEnabled) {
             [host.navigationController pushViewController:[
                 self globalsEntryViewController:row

+ 3 - 4
Classes/ObjectExplorers/FLEXObjectExplorerFactory.m

@@ -8,7 +8,6 @@
 
 #import "FLEXObjectExplorerFactory.h"
 #import "FLEXGlobalsViewController.h"
-#import "FLEXAlert.h"
 #import "FLEXClassShortcuts.h"
 #import "FLEXViewShortcuts.h"
 #import "FLEXViewControllerShortcuts.h"
@@ -18,7 +17,7 @@
 #import "FLEXDefaultsContentSection.h"
 #import "FLEXBundleShortcuts.h"
 #import "FLEXBlockShortcuts.h"
-#import <objc/runtime.h>
+#import "FLEXUtility.h"
 
 @implementation FLEXObjectExplorerFactory
 static NSMutableDictionary<Class, Class> *classesToRegisteredSections = nil;
@@ -192,11 +191,11 @@ static NSMutableDictionary<Class, Class> *classesToRegisteredSections = nil;
     }
 }
 
-+ (FLEXGlobalsTableViewControllerRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row {
++ (FLEXGlobalsEntryRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row {
     switch (row) {
         case FLEXGlobalsRowRootViewController: {
             // Check if the app delegate responds to -window. If not, present an alert
-            return ^(FLEXGlobalsViewController *host) {
+            return ^(UITableViewController *host) {
                 id<UIApplicationDelegate> delegate = UIApplication.sharedApplication.delegate;
                 if ([delegate respondsToSelector:@selector(window)]) {
                     UIViewController *explorer = [self explorerViewControllerForObject:

+ 8 - 8
Classes/Toolbar/FLEXExplorerToolbar.h

@@ -8,7 +8,7 @@
 
 #import <UIKit/UIKit.h>
 
-@class FLEXToolbarItem;
+@class FLEXExplorerToolbarItem;
 
 /// Users of the toolbar can configure the enabled state
 /// and event target/actions for each item.
@@ -16,26 +16,26 @@
 
 /// The items to be displayed in the toolbar. Defaults to:
 /// globalsItem, hierarchyItem, selectItem, moveItem, closeItem
-@property (nonatomic, copy) NSArray<FLEXToolbarItem *> *toolbarItems;
+@property (nonatomic, copy) NSArray<FLEXExplorerToolbarItem *> *toolbarItems;
 
 /// Toolbar item for selecting views.
-@property (nonatomic, readonly) FLEXToolbarItem *selectItem;
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *selectItem;
 
 /// Toolbar item for presenting a list with the view hierarchy.
-@property (nonatomic, readonly) FLEXToolbarItem *hierarchyItem;
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *hierarchyItem;
 
 /// Toolbar item for moving views.
 /// Its \c sibling is the \c lastTabItem
-@property (nonatomic, readonly) FLEXToolbarItem *moveItem;
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *moveItem;
 
 /// Toolbar item for presenting the currently active tab.
-@property (nonatomic, readonly) FLEXToolbarItem *recentItem;
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *recentItem;
 
 /// Toolbar item for presenting a screen with various tools for inspecting the app.
-@property (nonatomic, readonly) FLEXToolbarItem *globalsItem;
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *globalsItem;
 
 /// Toolbar item for hiding the explorer.
-@property (nonatomic, readonly) FLEXToolbarItem *closeItem;
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *closeItem;
 
 /// A view for moving the entire toolbar.
 /// Users of the toolbar can attach a pan gesture recognizer to decide how to reposition the toolbar.

+ 17 - 17
Classes/Toolbar/FLEXExplorerToolbar.m

@@ -8,18 +8,18 @@
 
 #import "FLEXColor.h"
 #import "FLEXExplorerToolbar.h"
-#import "FLEXToolbarItem.h"
+#import "FLEXExplorerToolbarItem.h"
 #import "FLEXResources.h"
 #import "FLEXUtility.h"
 
 @interface FLEXExplorerToolbar ()
 
-@property (nonatomic, readwrite) FLEXToolbarItem *globalsItem;
-@property (nonatomic, readwrite) FLEXToolbarItem *hierarchyItem;
-@property (nonatomic, readwrite) FLEXToolbarItem *selectItem;
-@property (nonatomic, readwrite) FLEXToolbarItem *recentItem;
-@property (nonatomic, readwrite) FLEXToolbarItem *moveItem;
-@property (nonatomic, readwrite) FLEXToolbarItem *closeItem;
+@property (nonatomic, readwrite) FLEXExplorerToolbarItem *globalsItem;
+@property (nonatomic, readwrite) FLEXExplorerToolbarItem *hierarchyItem;
+@property (nonatomic, readwrite) FLEXExplorerToolbarItem *selectItem;
+@property (nonatomic, readwrite) FLEXExplorerToolbarItem *recentItem;
+@property (nonatomic, readwrite) FLEXExplorerToolbarItem *moveItem;
+@property (nonatomic, readwrite) FLEXExplorerToolbarItem *closeItem;
 @property (nonatomic, readwrite) UIView *dragHandle;
 
 @property (nonatomic) UIImageView *dragHandleImageView;
@@ -52,12 +52,12 @@
         [self addSubview:self.dragHandle];
         
         // Buttons
-        self.globalsItem   = [FLEXToolbarItem itemWithTitle:@"menu" image:FLEXResources.globalsIcon];
-        self.hierarchyItem = [FLEXToolbarItem itemWithTitle:@"views" image:FLEXResources.hierarchyIcon];
-        self.selectItem    = [FLEXToolbarItem itemWithTitle:@"select" image:FLEXResources.selectIcon];
-        self.recentItem    = [FLEXToolbarItem itemWithTitle:@"recent" image:FLEXResources.recentIcon];
-        self.moveItem      = [FLEXToolbarItem itemWithTitle:@"move" image:FLEXResources.moveIcon sibling:self.recentItem];
-        self.closeItem     = [FLEXToolbarItem itemWithTitle:@"close" image:FLEXResources.closeIcon];
+        self.globalsItem   = [FLEXExplorerToolbarItem itemWithTitle:@"menu" image:FLEXResources.globalsIcon];
+        self.hierarchyItem = [FLEXExplorerToolbarItem itemWithTitle:@"views" image:FLEXResources.hierarchyIcon];
+        self.selectItem    = [FLEXExplorerToolbarItem itemWithTitle:@"select" image:FLEXResources.selectIcon];
+        self.recentItem    = [FLEXExplorerToolbarItem itemWithTitle:@"recent" image:FLEXResources.recentIcon];
+        self.moveItem      = [FLEXExplorerToolbarItem itemWithTitle:@"move" image:FLEXResources.moveIcon sibling:self.recentItem];
+        self.closeItem     = [FLEXExplorerToolbarItem itemWithTitle:@"close" image:FLEXResources.closeIcon];
 
         // Selected view box //
         
@@ -105,7 +105,7 @@
     CGFloat originY = CGRectGetMinY(safeArea);
     CGFloat height = kToolbarItemHeight;
     CGFloat width = FLEXFloor((CGRectGetWidth(safeArea) - CGRectGetWidth(self.dragHandle.frame)) / self.toolbarItems.count);
-    for (FLEXToolbarItem *toolbarItem in self.toolbarItems) {
+    for (FLEXExplorerToolbarItem *toolbarItem in self.toolbarItems) {
         toolbarItem.currentItem.frame = CGRectMake(originX, originY, width, height);
         originX = CGRectGetMaxX(toolbarItem.currentItem.frame);
     }
@@ -160,13 +160,13 @@
 
 #pragma mark - Setter Overrides
 
-- (void)setToolbarItems:(NSArray<FLEXToolbarItem *> *)toolbarItems {
+- (void)setToolbarItems:(NSArray<FLEXExplorerToolbarItem *> *)toolbarItems {
     if (_toolbarItems == toolbarItems) {
         return;
     }
     
     // Remove old toolbar items, if any
-    for (FLEXToolbarItem *item in _toolbarItems) {
+    for (FLEXExplorerToolbarItem *item in _toolbarItems) {
         [item.currentItem removeFromSuperview];
     }
     
@@ -175,7 +175,7 @@
         toolbarItems = [toolbarItems subarrayWithRange:NSMakeRange(0, 5)];
     }
 
-    for (FLEXToolbarItem *item in toolbarItems) {
+    for (FLEXExplorerToolbarItem *item in toolbarItems) {
         [self addSubview:item.currentItem];
     }
 

+ 5 - 5
Classes/Toolbar/FLEXToolbarItem.h

@@ -1,5 +1,5 @@
 //
-//  FLEXToolbarItem.h
+//  FLEXExplorerToolbarItem.h
 //  Flipboard
 //
 //  Created by Ryan Olson on 4/4/14.
@@ -10,17 +10,17 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface FLEXToolbarItem : UIButton
+@interface FLEXExplorerToolbarItem : UIButton
 
 + (instancetype)itemWithTitle:(NSString *)title image:(UIImage *)image;
 
 /// @param backupItem a toolbar item to use in place of this item when it becomes disabled.
 /// Items without a sibling item exhibit expected behavior when they become disabled, and are greyed out.
-+ (instancetype)itemWithTitle:(NSString *)title image:(UIImage *)image sibling:(nullable FLEXToolbarItem *)backupItem;
++ (instancetype)itemWithTitle:(NSString *)title image:(UIImage *)image sibling:(nullable FLEXExplorerToolbarItem *)backupItem;
 
 /// If a toolbar item has a sibling, the item will replace itself with its
 /// sibling when it becomes disabled, and vice versa when it becomes enabled again.
-@property (nonatomic, readonly) FLEXToolbarItem *sibling;
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *sibling;
 
 /// When a toolbar item has a sibling and it becomes disabled, the sibling is the view
 /// that should be added to or removed from a new or existing toolbar. This property
@@ -37,7 +37,7 @@ NS_ASSUME_NONNULL_BEGIN
 ///
 /// @return the result of the item's sibling's \c currentItem,
 /// if this item has a sibling and this item is disabled, otherwise this item.
-@property (nonatomic, readonly) FLEXToolbarItem *currentItem;
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *currentItem;
 
 @end
 

+ 8 - 8
Classes/Toolbar/FLEXToolbarItem.m

@@ -1,5 +1,5 @@
 //
-//  FLEXToolbarItem.m
+//  FLEXExplorerToolbarItem.m
 //  Flipboard
 //
 //  Created by Ryan Olson on 4/4/14.
@@ -7,12 +7,12 @@
 //
 
 #import "FLEXColor.h"
-#import "FLEXToolbarItem.h"
+#import "FLEXExplorerToolbarItem.h"
 #import "FLEXUtility.h"
 
-@interface FLEXToolbarItem ()
+@interface FLEXExplorerToolbarItem ()
 
-@property (nonatomic) FLEXToolbarItem *sibling;
+@property (nonatomic) FLEXExplorerToolbarItem *sibling;
 @property (nonatomic, copy) NSString *title;
 @property (nonatomic) UIImage *image;
 
@@ -22,7 +22,7 @@
 
 @end
 
-@implementation FLEXToolbarItem
+@implementation FLEXExplorerToolbarItem
 
 #pragma mark - Public
 
@@ -30,10 +30,10 @@
     return [self itemWithTitle:title image:image sibling:nil];
 }
 
-+ (instancetype)itemWithTitle:(NSString *)title image:(UIImage *)image sibling:(FLEXToolbarItem *)backupItem {
++ (instancetype)itemWithTitle:(NSString *)title image:(UIImage *)image sibling:(FLEXExplorerToolbarItem *)backupItem {
     NSParameterAssert(title); NSParameterAssert(image);
     
-    FLEXToolbarItem *toolbarItem = [self buttonWithType:UIButtonTypeSystem];
+    FLEXExplorerToolbarItem *toolbarItem = [self buttonWithType:UIButtonTypeSystem];
     toolbarItem.sibling = backupItem;
     toolbarItem.title = title;
     toolbarItem.image = image;
@@ -47,7 +47,7 @@
     return toolbarItem;
 }
 
-- (FLEXToolbarItem *)currentItem {
+- (FLEXExplorerToolbarItem *)currentItem {
     if (!self.enabled && self.sibling) {
         return self.sibling.currentItem;
     }

+ 0 - 1
Classes/Utility/Categories/FLEXRuntime+UIKitHelpers.h

@@ -7,7 +7,6 @@
 //
 
 #import <UIKit/UIKit.h>
-#import "FLEXUtility.h"
 #import "FLEXProperty.h"
 #import "FLEXIvar.h"
 #import "FLEXMethod.h"

+ 1 - 2
Classes/Utility/Categories/NSString+FLEX.h

@@ -6,8 +6,7 @@
 //  Copyright © 2017 Tanner Bennett. All rights reserved.
 //
 
-#import <Foundation/Foundation.h>
-#import "FLEXRuntimeUtility.h"
+#import "FLEXRuntimeConstants.h"
 
 @interface NSString (FLEXTypeEncoding)
 

+ 74 - 0
Classes/Utility/FLEXMacros.h

@@ -0,0 +1,74 @@
+//
+//  FLEXMacros.h
+//  FLEX
+//
+//  Created by Tanner on 3/12/20.
+//  Copyright © 2020 Flipboard. All rights reserved.
+//
+
+#ifndef FLEXMacros_h
+#define FLEXMacros_h
+
+// Used to prevent loading of pre-registered shortcuts and runtime categories in a test environment
+#define FLEX_EXIT_IF_TESTING() if (NSClassFromString(@"XCTest")) return;
+
+/// Rounds down to the nearest "point" coordinate
+NS_INLINE CGFloat FLEXFloor(CGFloat x) {
+    return floor(UIScreen.mainScreen.scale * (x)) / UIScreen.mainScreen.scale;
+}
+
+/// Returns the given number of points in pixels
+NS_INLINE CGFloat FLEXPointsToPixels(CGFloat points) {
+    return points / UIScreen.mainScreen.scale;
+}
+
+/// Creates a CGRect with all members rounded down to the nearest "point" coordinate
+NS_INLINE CGRect FLEXRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height) {
+    return CGRectMake(FLEXFloor(x), FLEXFloor(y), FLEXFloor(width), FLEXFloor(height));
+}
+
+/// Adjusts the origin of an existing rect
+NS_INLINE CGRect FLEXRectSetOrigin(CGRect r, CGPoint origin) {
+    r.origin = origin; return r;
+}
+
+/// Adjusts the size of an existing rect
+NS_INLINE CGRect FLEXRectSetSize(CGRect r, CGSize size) {
+    r.size = size; return r;
+}
+
+/// Adjusts the origin.x of an existing rect
+NS_INLINE CGRect FLEXRectSetX(CGRect r, CGFloat x) {
+    r.origin.x = x; return r;
+}
+
+/// Adjusts the origin.y of an existing rect
+NS_INLINE CGRect FLEXRectSetY(CGRect r, CGFloat y) {
+    r.origin.y = y ; return r;
+}
+
+/// Adjusts the size.width of an existing rect
+NS_INLINE CGRect FLEXRectSetWidth(CGRect r, CGFloat width) {
+    r.size.width = width; return r;
+}
+
+/// Adjusts the size.height of an existing rect
+NS_INLINE CGRect FLEXRectSetHeight(CGRect r, CGFloat height) {
+    r.size.height = height; return r;
+}
+
+#ifdef __IPHONE_13_0
+#define FLEX_AT_LEAST_IOS13_SDK (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0)
+#else
+#define FLEX_AT_LEAST_IOS13_SDK NO
+#endif
+
+#define FLEXPluralString(count, plural, singular) [NSString \
+    stringWithFormat:@"%@ %@", @(count), (count == 1 ? singular : plural) \
+]
+
+#define FLEXPluralFormatString(count, pluralFormat, singularFormat) [NSString \
+    stringWithFormat:(count == 1 ? singularFormat : pluralFormat), @(count)  \
+]
+
+#endif /* FLEXMacros_h */

+ 1 - 62
Classes/Utility/FLEXUtility.h

@@ -16,68 +16,7 @@
 #import "NSArray+Functional.h"
 #import "UIFont+FLEX.h"
 #import "NSMapTable+FLEX_Subscripting.h"
-
-// Used to prevent loading of pre-registered shortcuts and runtime categories in a test environment
-#define FLEX_EXIT_IF_TESTING() if (NSClassFromString(@"XCTest")) return;
-
-/// Rounds down to the nearest "point" coordinate
-NS_INLINE CGFloat FLEXFloor(CGFloat x) {
-    return floor(UIScreen.mainScreen.scale * (x)) / UIScreen.mainScreen.scale;
-}
-
-/// Returns the given number of points in pixels
-NS_INLINE CGFloat FLEXPointsToPixels(CGFloat points) {
-    return points / UIScreen.mainScreen.scale;
-}
-
-/// Creates a CGRect with all members rounded down to the nearest "point" coordinate
-NS_INLINE CGRect FLEXRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height) {
-    return CGRectMake(FLEXFloor(x), FLEXFloor(y), FLEXFloor(width), FLEXFloor(height));
-}
-
-/// Adjusts the origin of an existing rect
-NS_INLINE CGRect FLEXRectSetOrigin(CGRect r, CGPoint origin) {
-    r.origin = origin; return r;
-}
-
-/// Adjusts the size of an existing rect
-NS_INLINE CGRect FLEXRectSetSize(CGRect r, CGSize size) {
-    r.size = size; return r;
-}
-
-/// Adjusts the origin.x of an existing rect
-NS_INLINE CGRect FLEXRectSetX(CGRect r, CGFloat x) {
-    r.origin.x = x; return r;
-}
-
-/// Adjusts the origin.y of an existing rect
-NS_INLINE CGRect FLEXRectSetY(CGRect r, CGFloat y) {
-    r.origin.y = y ; return r;
-}
-
-/// Adjusts the size.width of an existing rect
-NS_INLINE CGRect FLEXRectSetWidth(CGRect r, CGFloat width) {
-    r.size.width = width; return r;
-}
-
-/// Adjusts the size.height of an existing rect
-NS_INLINE CGRect FLEXRectSetHeight(CGRect r, CGFloat height) {
-    r.size.height = height; return r;
-}
-
-#ifdef __IPHONE_13_0
-#define FLEX_AT_LEAST_IOS13_SDK (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0)
-#else
-#define FLEX_AT_LEAST_IOS13_SDK NO
-#endif
-
-#define FLEXPluralString(count, plural, singular) [NSString \
-    stringWithFormat:@"%@ %@", @(count), (count == 1 ? singular : plural) \
-]
-
-#define FLEXPluralFormatString(count, pluralFormat, singularFormat) [NSString \
-    stringWithFormat:(count == 1 ? singularFormat : pluralFormat), @(count)  \
-]
+#import "FLEXMacros.h"
 
 #if !FLEX_AT_LEAST_IOS13_SDK
 @class UIWindowScene;

+ 1 - 70
Classes/Utility/Runtime/FLEXRuntimeUtility.h

@@ -6,76 +6,7 @@
 //  Copyright (c) 2014 Flipboard. All rights reserved.
 //
 
-#import <Foundation/Foundation.h>
-#import <objc/runtime.h>
-
-extern const unsigned int kFLEXNumberOfImplicitArgs;
-
-// See https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html#//apple_ref/doc/uid/TP40008048-CH101-SW6
-extern NSString *const kFLEXPropertyAttributeKeyTypeEncoding;
-extern NSString *const kFLEXPropertyAttributeKeyBackingIvarName;
-extern NSString *const kFLEXPropertyAttributeKeyReadOnly;
-extern NSString *const kFLEXPropertyAttributeKeyCopy;
-extern NSString *const kFLEXPropertyAttributeKeyRetain;
-extern NSString *const kFLEXPropertyAttributeKeyNonAtomic;
-extern NSString *const kFLEXPropertyAttributeKeyCustomGetter;
-extern NSString *const kFLEXPropertyAttributeKeyCustomSetter;
-extern NSString *const kFLEXPropertyAttributeKeyDynamic;
-extern NSString *const kFLEXPropertyAttributeKeyWeak;
-extern NSString *const kFLEXPropertyAttributeKeyGarbageCollectable;
-extern NSString *const kFLEXPropertyAttributeKeyOldStyleTypeEncoding;
-
-typedef NS_ENUM(NSUInteger, FLEXPropertyAttribute) {
-    FLEXPropertyAttributeTypeEncoding       = 'T',
-    FLEXPropertyAttributeBackingIvarName    = 'V',
-    FLEXPropertyAttributeCopy               = 'C',
-    FLEXPropertyAttributeCustomGetter       = 'G',
-    FLEXPropertyAttributeCustomSetter       = 'S',
-    FLEXPropertyAttributeDynamic            = 'D',
-    FLEXPropertyAttributeGarbageCollectible = 'P',
-    FLEXPropertyAttributeNonAtomic          = 'N',
-    FLEXPropertyAttributeOldTypeEncoding    = 't',
-    FLEXPropertyAttributeReadOnly           = 'R',
-    FLEXPropertyAttributeRetain             = '&',
-    FLEXPropertyAttributeWeak               = 'W'
-};
-
-typedef NS_ENUM(char, FLEXTypeEncoding) {
-    FLEXTypeEncodingNull             = '\0',
-    FLEXTypeEncodingUnknown          = '?',
-    FLEXTypeEncodingChar             = 'c',
-    FLEXTypeEncodingInt              = 'i',
-    FLEXTypeEncodingShort            = 's',
-    FLEXTypeEncodingLong             = 'l',
-    FLEXTypeEncodingLongLong         = 'q',
-    FLEXTypeEncodingUnsignedChar     = 'C',
-    FLEXTypeEncodingUnsignedInt      = 'I',
-    FLEXTypeEncodingUnsignedShort    = 'S',
-    FLEXTypeEncodingUnsignedLong     = 'L',
-    FLEXTypeEncodingUnsignedLongLong = 'Q',
-    FLEXTypeEncodingFloat            = 'f',
-    FLEXTypeEncodingDouble           = 'd',
-    FLEXTypeEncodingLongDouble       = 'D',
-    FLEXTypeEncodingCBool            = 'B',
-    FLEXTypeEncodingVoid             = 'v',
-    FLEXTypeEncodingCString          = '*',
-    FLEXTypeEncodingObjcObject       = '@',
-    FLEXTypeEncodingObjcClass        = '#',
-    FLEXTypeEncodingSelector         = ':',
-    FLEXTypeEncodingArrayBegin       = '[',
-    FLEXTypeEncodingArrayEnd         = ']',
-    FLEXTypeEncodingStructBegin      = '{',
-    FLEXTypeEncodingStructEnd        = '}',
-    FLEXTypeEncodingUnionBegin       = '(',
-    FLEXTypeEncodingUnionEnd         = ')',
-    FLEXTypeEncodingQuote            = '\"',
-    FLEXTypeEncodingBitField         = 'b',
-    FLEXTypeEncodingPointer          = '^',
-    FLEXTypeEncodingConst            = 'r'
-};
-
-#define FLEXEncodeClass(class) ("@\"" #class "\"")
-#define FLEXEncodeObject(obj) (obj ? [NSString stringWithFormat:@"@\"%@\"", [obj class]].UTF8String : @encode(id))
+#import "FLEXRuntimeConstants.h"
 
 #define PropertyKey(suffix) kFLEXPropertyAttributeKey##suffix : @""
 #define PropertyKeyGetter(getter) kFLEXPropertyAttributeKeyCustomGetter : NSStringFromSelector(@selector(getter))

+ 0 - 18
Classes/Utility/Runtime/FLEXRuntimeUtility.m

@@ -11,20 +11,6 @@
 #import "FLEXObjcInternal.h"
 #import "FLEXTypeEncodingParser.h"
 
-// See https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html#//apple_ref/doc/uid/TP40008048-CH101-SW6
-NSString *const kFLEXPropertyAttributeKeyTypeEncoding = @"T";
-NSString *const kFLEXPropertyAttributeKeyBackingIvarName = @"V";
-NSString *const kFLEXPropertyAttributeKeyReadOnly = @"R";
-NSString *const kFLEXPropertyAttributeKeyCopy = @"C";
-NSString *const kFLEXPropertyAttributeKeyRetain = @"&";
-NSString *const kFLEXPropertyAttributeKeyNonAtomic = @"N";
-NSString *const kFLEXPropertyAttributeKeyCustomGetter = @"G";
-NSString *const kFLEXPropertyAttributeKeyCustomSetter = @"S";
-NSString *const kFLEXPropertyAttributeKeyDynamic = @"D";
-NSString *const kFLEXPropertyAttributeKeyWeak = @"W";
-NSString *const kFLEXPropertyAttributeKeyGarbageCollectable = @"P";
-NSString *const kFLEXPropertyAttributeKeyOldStyleTypeEncoding = @"t";
-
 static NSString *const FLEXRuntimeUtilityErrorDomain = @"FLEXRuntimeUtilityErrorDomain";
 typedef NS_ENUM(NSInteger, FLEXRuntimeUtilityErrorCode) {
     FLEXRuntimeUtilityErrorCodeDoesNotRecognizeSelector = 0,
@@ -32,12 +18,8 @@ typedef NS_ENUM(NSInteger, FLEXRuntimeUtilityErrorCode) {
     FLEXRuntimeUtilityErrorCodeArgumentTypeMismatch = 2
 };
 
-// Arguments 0 and 1 are self and _cmd always
-const unsigned int kFLEXNumberOfImplicitArgs = 2;
-
 @implementation FLEXRuntimeUtility
 
-
 #pragma mark - General Helpers (Public)
 
 + (BOOL)pointerIsValidObjcObject:(const void *)pointer {

+ 79 - 0
Classes/Utility/Runtime/Objc/FLEXRuntimeConstants.h

@@ -0,0 +1,79 @@
+//
+//  FLEXRuntimeConstants.h
+//  FLEX
+//
+//  Created by Tanner on 3/11/20.
+//  Copyright © 2020 Flipboard. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <objc/runtime.h>
+
+#define FLEXEncodeClass(class) ("@\"" #class "\"")
+#define FLEXEncodeObject(obj) (obj ? [NSString stringWithFormat:@"@\"%@\"", [obj class]].UTF8String : @encode(id))
+
+// Arguments 0 and 1 are self and _cmd always
+extern const unsigned int kFLEXNumberOfImplicitArgs;
+
+// See https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html#//apple_ref/doc/uid/TP40008048-CH101-SW6
+extern NSString *const kFLEXPropertyAttributeKeyTypeEncoding;
+extern NSString *const kFLEXPropertyAttributeKeyBackingIvarName;
+extern NSString *const kFLEXPropertyAttributeKeyReadOnly;
+extern NSString *const kFLEXPropertyAttributeKeyCopy;
+extern NSString *const kFLEXPropertyAttributeKeyRetain;
+extern NSString *const kFLEXPropertyAttributeKeyNonAtomic;
+extern NSString *const kFLEXPropertyAttributeKeyCustomGetter;
+extern NSString *const kFLEXPropertyAttributeKeyCustomSetter;
+extern NSString *const kFLEXPropertyAttributeKeyDynamic;
+extern NSString *const kFLEXPropertyAttributeKeyWeak;
+extern NSString *const kFLEXPropertyAttributeKeyGarbageCollectable;
+extern NSString *const kFLEXPropertyAttributeKeyOldStyleTypeEncoding;
+
+typedef NS_ENUM(NSUInteger, FLEXPropertyAttribute) {
+    FLEXPropertyAttributeTypeEncoding       = 'T',
+    FLEXPropertyAttributeBackingIvarName    = 'V',
+    FLEXPropertyAttributeCopy               = 'C',
+    FLEXPropertyAttributeCustomGetter       = 'G',
+    FLEXPropertyAttributeCustomSetter       = 'S',
+    FLEXPropertyAttributeDynamic            = 'D',
+    FLEXPropertyAttributeGarbageCollectible = 'P',
+    FLEXPropertyAttributeNonAtomic          = 'N',
+    FLEXPropertyAttributeOldTypeEncoding    = 't',
+    FLEXPropertyAttributeReadOnly           = 'R',
+    FLEXPropertyAttributeRetain             = '&',
+    FLEXPropertyAttributeWeak               = 'W'
+};
+
+typedef NS_ENUM(char, FLEXTypeEncoding) {
+    FLEXTypeEncodingNull             = '\0',
+    FLEXTypeEncodingUnknown          = '?',
+    FLEXTypeEncodingChar             = 'c',
+    FLEXTypeEncodingInt              = 'i',
+    FLEXTypeEncodingShort            = 's',
+    FLEXTypeEncodingLong             = 'l',
+    FLEXTypeEncodingLongLong         = 'q',
+    FLEXTypeEncodingUnsignedChar     = 'C',
+    FLEXTypeEncodingUnsignedInt      = 'I',
+    FLEXTypeEncodingUnsignedShort    = 'S',
+    FLEXTypeEncodingUnsignedLong     = 'L',
+    FLEXTypeEncodingUnsignedLongLong = 'Q',
+    FLEXTypeEncodingFloat            = 'f',
+    FLEXTypeEncodingDouble           = 'd',
+    FLEXTypeEncodingLongDouble       = 'D',
+    FLEXTypeEncodingCBool            = 'B',
+    FLEXTypeEncodingVoid             = 'v',
+    FLEXTypeEncodingCString          = '*',
+    FLEXTypeEncodingObjcObject       = '@',
+    FLEXTypeEncodingObjcClass        = '#',
+    FLEXTypeEncodingSelector         = ':',
+    FLEXTypeEncodingArrayBegin       = '[',
+    FLEXTypeEncodingArrayEnd         = ']',
+    FLEXTypeEncodingStructBegin      = '{',
+    FLEXTypeEncodingStructEnd        = '}',
+    FLEXTypeEncodingUnionBegin       = '(',
+    FLEXTypeEncodingUnionEnd         = ')',
+    FLEXTypeEncodingQuote            = '\"',
+    FLEXTypeEncodingBitField         = 'b',
+    FLEXTypeEncodingPointer          = '^',
+    FLEXTypeEncodingConst            = 'r'
+};

+ 24 - 0
Classes/Utility/Runtime/Objc/FLEXRuntimeConstants.m

@@ -0,0 +1,24 @@
+//
+//  FLEXRuntimeConstants.m
+//  FLEX
+//
+//  Created by Tanner on 3/11/20.
+//  Copyright © 2020 Flipboard. All rights reserved.
+//
+
+#import "FLEXRuntimeConstants.h"
+
+const unsigned int kFLEXNumberOfImplicitArgs = 2;
+
+NSString *const kFLEXPropertyAttributeKeyTypeEncoding = @"T";
+NSString *const kFLEXPropertyAttributeKeyBackingIvarName = @"V";
+NSString *const kFLEXPropertyAttributeKeyReadOnly = @"R";
+NSString *const kFLEXPropertyAttributeKeyCopy = @"C";
+NSString *const kFLEXPropertyAttributeKeyRetain = @"&";
+NSString *const kFLEXPropertyAttributeKeyNonAtomic = @"N";
+NSString *const kFLEXPropertyAttributeKeyCustomGetter = @"G";
+NSString *const kFLEXPropertyAttributeKeyCustomSetter = @"S";
+NSString *const kFLEXPropertyAttributeKeyDynamic = @"D";
+NSString *const kFLEXPropertyAttributeKeyWeak = @"W";
+NSString *const kFLEXPropertyAttributeKeyGarbageCollectable = @"P";
+NSString *const kFLEXPropertyAttributeKeyOldStyleTypeEncoding = @"t";

Classes/Utility/Runtime/FLEXTypeEncodingParser.h → Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.h


Classes/Utility/Runtime/FLEXTypeEncodingParser.m → Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.m


Classes/Utility/Runtime/FLEXBlockDescription.h → Classes/Utility/Runtime/Objc/Reflection/FLEXBlockDescription.h


Classes/Utility/Runtime/FLEXBlockDescription.m → Classes/Utility/Runtime/Objc/Reflection/FLEXBlockDescription.m


Classes/Utility/Runtime/Objc/FLEXClassBuilder.h → Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.h


Classes/Utility/Runtime/Objc/FLEXClassBuilder.m → Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.m


+ 1 - 4
Classes/Utility/Runtime/Objc/FLEXIvar.h

@@ -7,10 +7,7 @@
 //  Copyright (c) 2015 Tanner Bennett. All rights reserved.
 //
 
-#import <Foundation/Foundation.h>
-#import "FLEXRuntimeUtility.h"
-#import <objc/runtime.h>
-
+#import "FLEXRuntimeConstants.h"
 
 @interface FLEXIvar : NSObject
 

Classes/Utility/Runtime/Objc/FLEXIvar.m → Classes/Utility/Runtime/Objc/Reflection/FLEXIvar.m


+ 1 - 3
Classes/Utility/Runtime/Objc/FLEXMethod.h

@@ -7,10 +7,8 @@
 //  Copyright (c) 2015 Tanner Bennett. All rights reserved.
 //
 
-#import <Foundation/Foundation.h>
+#import "FLEXRuntimeConstants.h"
 #import "FLEXMethodBase.h"
-#import "FLEXRuntimeUtility.h"
-#import <objc/runtime.h>
 
 NS_ASSUME_NONNULL_BEGIN
 

+ 1 - 0
Classes/Utility/Runtime/Objc/FLEXMethod.m

@@ -10,6 +10,7 @@
 #import "FLEXMethod.h"
 #import "FLEXMirror.h"
 #import "FLEXTypeEncodingParser.h"
+#import "FLEXRuntimeUtility.h"
 
 @implementation FLEXMethod
 @dynamic implementation;

Classes/Utility/Runtime/Objc/FLEXMethodBase.h → Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.h


Classes/Utility/Runtime/Objc/FLEXMethodBase.m → Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.m


Classes/Utility/Runtime/Objc/FLEXMirror.h → Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.h


Classes/Utility/Runtime/Objc/FLEXMirror.m → Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.m


+ 1 - 3
Classes/Utility/Runtime/Objc/FLEXProperty.h

@@ -7,9 +7,7 @@
 //  Copyright (c) 2015 Tanner Bennett. All rights reserved.
 //
 
-#import <Foundation/Foundation.h>
-#import "FLEXRuntimeUtility.h"
-#import <objc/runtime.h>
+#import "FLEXRuntimeConstants.h"
 @class FLEXPropertyAttributes, FLEXMethodBase;
 
 

Classes/Utility/Runtime/Objc/FLEXProperty.m → Classes/Utility/Runtime/Objc/Reflection/FLEXProperty.m


Classes/Utility/Runtime/Objc/FLEXPropertyAttributes.h → Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.h


Classes/Utility/Runtime/Objc/FLEXPropertyAttributes.m → Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.m


+ 1 - 2
Classes/Utility/Runtime/Objc/FLEXProtocol.h

@@ -7,8 +7,7 @@
 //  Copyright (c) 2015 Tanner Bennett. All rights reserved.
 //
 
-#import <Foundation/Foundation.h>
-#import "FLEXRuntimeUtility.h"
+#import "FLEXRuntimeConstants.h"
 @class FLEXProperty, FLEXMethodDescription;
 
 #pragma mark FLEXProtocol

+ 1 - 1
Classes/Utility/Runtime/Objc/FLEXProtocol.m

@@ -9,7 +9,7 @@
 
 #import "FLEXProtocol.h"
 #import "FLEXProperty.h"
-#import <objc/runtime.h>
+#import "FLEXRuntimeUtility.h"
 
 
 @implementation FLEXProtocol

Classes/Utility/Runtime/Objc/FLEXProtocolBuilder.h → Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.h


Classes/Utility/Runtime/Objc/FLEXProtocolBuilder.m → Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.m


+ 2 - 0
Example/UICatalog.xcodeproj/project.pbxproj

@@ -591,6 +591,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_WARN_STRICT_PROTOTYPES = NO;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
 				DEVELOPMENT_TEAM = S6N2F22V2Z;
@@ -615,6 +616,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_WARN_STRICT_PROTOTYPES = NO;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
 				DEVELOPMENT_TEAM = S6N2F22V2Z;

+ 0 - 2
Example/UICatalog/AAPLCatalogTableTableViewController.m

@@ -6,10 +6,8 @@
 
 #import "AAPLCatalogTableTableViewController.h"
 
-#if DEBUG
 // FLEX should only be compiled and used in debug builds.
 #import <FLEX/FLEX.h>
-#endif
 
 @implementation AAPLCatalogTableTableViewController
 

+ 8 - 3
FLEX.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |spec|
   spec.name             = "FLEX"
-  spec.version          = "3.1.2"
+  spec.version          = "4.0.0"
   spec.summary          = "A set of in-app debugging and exploration tools for iOS"
   spec.description      = <<-DESC
                         - Inspect and modify views in the hierarchy.
@@ -31,10 +31,15 @@ Pod::Spec.new do |spec|
   spec.social_media_url = "https://twitter.com/NSExceptional"
   spec.platform         = :ios, "9.0"
   spec.source           = { :git => "https://github.com/Flipboard/FLEX.git", :tag => "#{spec.version}" }
-  spec.source_files     = "Classes/**/*.{h,m,mm}"
+  spec.source_files     = "Classes/**/*.{h,c,m,mm}"
   spec.frameworks       = [ "Foundation", "UIKit", "CoreGraphics", "ImageIO", "QuartzCore", "WebKit", "Security" ]
   spec.libraries        = [ "z", "sqlite3" ]
   spec.requires_arc     = true
   spec.compiler_flags   = "-Wno-unsupported-availability-guard -Wno-strict-prototypes"
-  spec.public_header_files = [ "Classes/**/FLEXManager.h", "Classes/FLEX.h" ]
+  spec.public_header_files = [ "Classes/*.h", "Classes/Manager/*.h", "Classes/Toolbar/*.h",
+                               "Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h",
+                               "Classes/Core/**/*.h", "Classes/Utility/Runtime/Objc/**/*.h",
+                               "Classes/ObjectExplorers/**/*.h", "Classes/Editing/**/*.h",
+                               "Classes/Utility/FLEXMacros.h", "Classes/Utility/Categories/*.h",
+                               "Classes/Utility/FLEXAlert.h", "Classes/Utility/FLEXResources.h" ]
 end

+ 136 - 98
FLEX.xcodeproj/project.pbxproj

@@ -18,15 +18,15 @@
 		2EF6B04D1D494BE50006BDA5 /* FLEXNetworkCurlLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EF6B04B1D494BE50006BDA5 /* FLEXNetworkCurlLogger.m */; };
 		2EF6B04E1D494BE50006BDA5 /* FLEXNetworkCurlLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EF6B04C1D494BE50006BDA5 /* FLEXNetworkCurlLogger.h */; };
 		3A4C94251B5B20570088C3F2 /* FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C94241B5B20570088C3F2 /* FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		3A4C94CD1B5B21410088C3F2 /* FLEXGlobalsEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C94441B5B21410088C3F2 /* FLEXGlobalsEntry.h */; };
+		3A4C94CD1B5B21410088C3F2 /* FLEXGlobalsEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C94441B5B21410088C3F2 /* FLEXGlobalsEntry.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		3A4C94CE1B5B21410088C3F2 /* FLEXGlobalsEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C94451B5B21410088C3F2 /* FLEXGlobalsEntry.m */; };
-		3A4C94D31B5B21410088C3F2 /* FLEXObjectExplorerFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C944A1B5B21410088C3F2 /* FLEXObjectExplorerFactory.h */; };
+		3A4C94D31B5B21410088C3F2 /* FLEXObjectExplorerFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C944A1B5B21410088C3F2 /* FLEXObjectExplorerFactory.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		3A4C94D41B5B21410088C3F2 /* FLEXObjectExplorerFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C944B1B5B21410088C3F2 /* FLEXObjectExplorerFactory.m */; };
-		3A4C94D51B5B21410088C3F2 /* FLEXObjectExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C944C1B5B21410088C3F2 /* FLEXObjectExplorerViewController.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		3A4C94D51B5B21410088C3F2 /* FLEXObjectExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C944C1B5B21410088C3F2 /* FLEXObjectExplorerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		3A4C94D61B5B21410088C3F2 /* FLEXObjectExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C944D1B5B21410088C3F2 /* FLEXObjectExplorerViewController.m */; };
 		3A4C94DD1B5B21410088C3F2 /* FLEXHeapEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C94551B5B21410088C3F2 /* FLEXHeapEnumerator.h */; };
 		3A4C94DE1B5B21410088C3F2 /* FLEXHeapEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C94561B5B21410088C3F2 /* FLEXHeapEnumerator.m */; };
-		3A4C94E11B5B21410088C3F2 /* FLEXResources.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C94591B5B21410088C3F2 /* FLEXResources.h */; };
+		3A4C94E11B5B21410088C3F2 /* FLEXResources.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C94591B5B21410088C3F2 /* FLEXResources.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		3A4C94E21B5B21410088C3F2 /* FLEXResources.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C945A1B5B21410088C3F2 /* FLEXResources.m */; };
 		3A4C94E31B5B21410088C3F2 /* FLEXRuntimeUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C945B1B5B21410088C3F2 /* FLEXRuntimeUtility.h */; };
 		3A4C94E41B5B21410088C3F2 /* FLEXRuntimeUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C945C1B5B21410088C3F2 /* FLEXRuntimeUtility.m */; };
@@ -136,12 +136,12 @@
 		94A515201C4CA1F10063292F /* FLEXWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 94A5151C1C4CA1F10063292F /* FLEXWindow.m */; };
 		94A515251C4CA2080063292F /* FLEXExplorerToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 94A515211C4CA2080063292F /* FLEXExplorerToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		94A515261C4CA2080063292F /* FLEXExplorerToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 94A515221C4CA2080063292F /* FLEXExplorerToolbar.m */; };
-		94A515271C4CA2080063292F /* FLEXToolbarItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 94A515231C4CA2080063292F /* FLEXToolbarItem.h */; };
-		94A515281C4CA2080063292F /* FLEXToolbarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 94A515241C4CA2080063292F /* FLEXToolbarItem.m */; };
+		94A515271C4CA2080063292F /* FLEXExplorerToolbarItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 94A515231C4CA2080063292F /* FLEXExplorerToolbarItem.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		94A515281C4CA2080063292F /* FLEXExplorerToolbarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 94A515241C4CA2080063292F /* FLEXExplorerToolbarItem.m */; };
 		94AAF0381BAF2E1F00DE8760 /* FLEXKeyboardHelpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 94AAF0361BAF2E1F00DE8760 /* FLEXKeyboardHelpViewController.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		94AAF0391BAF2E1F00DE8760 /* FLEXKeyboardHelpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 94AAF0371BAF2E1F00DE8760 /* FLEXKeyboardHelpViewController.m */; };
 		94AAF03A1BAF2F0300DE8760 /* FLEXKeyboardShortcutManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 942DCD821BAE0AD300DB5DC2 /* FLEXKeyboardShortcutManager.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		C301994A2409B38A00759E8E /* CALayer+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C30199482409B38A00759E8E /* CALayer+FLEX.h */; };
+		C301994A2409B38A00759E8E /* CALayer+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C30199482409B38A00759E8E /* CALayer+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C301994B2409B38A00759E8E /* CALayer+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = C30199492409B38A00759E8E /* CALayer+FLEX.m */; };
 		C309B82F223ED64400B228EC /* FLEXLogController.h in Headers */ = {isa = PBXBuildFile; fileRef = C309B82D223ED64400B228EC /* FLEXLogController.h */; };
 		C312A13023ECB5D300E38049 /* FLEXBookmarkManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C312A12E23ECB5D300E38049 /* FLEXBookmarkManager.h */; };
@@ -154,32 +154,32 @@
 		C313854023F5C1A10046E63C /* FLEXViewControllersViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C313853E23F5C1A10046E63C /* FLEXViewControllersViewController.m */; };
 		C313854823F5F7D50046E63C /* flex_fishhook.c in Sources */ = {isa = PBXBuildFile; fileRef = C313854623F5F7D40046E63C /* flex_fishhook.c */; };
 		C313854923F5F7D50046E63C /* flex_fishhook.h in Headers */ = {isa = PBXBuildFile; fileRef = C313854723F5F7D50046E63C /* flex_fishhook.h */; };
-		C31C4A6923342A2200C35F12 /* FLEXMetadataSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C31C4A6723342A2200C35F12 /* FLEXMetadataSection.h */; };
+		C31C4A6923342A2200C35F12 /* FLEXMetadataSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C31C4A6723342A2200C35F12 /* FLEXMetadataSection.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C31C4A6A23342A2200C35F12 /* FLEXMetadataSection.m in Sources */ = {isa = PBXBuildFile; fileRef = C31C4A6823342A2200C35F12 /* FLEXMetadataSection.m */; };
-		C31D93E423E38CBE005517BF /* FLEXBlockShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C31D93E223E38CBE005517BF /* FLEXBlockShortcuts.h */; };
+		C31D93E423E38CBE005517BF /* FLEXBlockShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C31D93E223E38CBE005517BF /* FLEXBlockShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C31D93E523E38CBE005517BF /* FLEXBlockShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = C31D93E323E38CBE005517BF /* FLEXBlockShortcuts.m */; };
-		C31D93E823E38E97005517BF /* FLEXBlockDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = C31D93E623E38E97005517BF /* FLEXBlockDescription.h */; };
+		C31D93E823E38E97005517BF /* FLEXBlockDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = C31D93E623E38E97005517BF /* FLEXBlockDescription.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C31D93E923E38E97005517BF /* FLEXBlockDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = C31D93E723E38E97005517BF /* FLEXBlockDescription.m */; };
-		C32A195E231732E800EB02AC /* FLEXCollectionContentSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C32A195C231732E800EB02AC /* FLEXCollectionContentSection.h */; };
+		C32A195E231732E800EB02AC /* FLEXCollectionContentSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C32A195C231732E800EB02AC /* FLEXCollectionContentSection.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C32A195F231732E800EB02AC /* FLEXCollectionContentSection.m in Sources */ = {isa = PBXBuildFile; fileRef = C32A195D231732E800EB02AC /* FLEXCollectionContentSection.m */; };
-		C32A19622317378C00EB02AC /* FLEXDefaultsContentSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C32A19602317378C00EB02AC /* FLEXDefaultsContentSection.h */; };
+		C32A19622317378C00EB02AC /* FLEXDefaultsContentSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C32A19602317378C00EB02AC /* FLEXDefaultsContentSection.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C32A19632317378C00EB02AC /* FLEXDefaultsContentSection.m in Sources */ = {isa = PBXBuildFile; fileRef = C32A19612317378C00EB02AC /* FLEXDefaultsContentSection.m */; };
 		C33C825B23159EAF00DD2451 /* FLEXTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C33C825A23159EAF00DD2451 /* FLEXTests.m */; };
-		C33C825E2316DC8600DD2451 /* FLEXObjectExplorer.h in Headers */ = {isa = PBXBuildFile; fileRef = C33C825C2316DC8600DD2451 /* FLEXObjectExplorer.h */; };
+		C33C825E2316DC8600DD2451 /* FLEXObjectExplorer.h in Headers */ = {isa = PBXBuildFile; fileRef = C33C825C2316DC8600DD2451 /* FLEXObjectExplorer.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C33C825F2316DC8600DD2451 /* FLEXObjectExplorer.m in Sources */ = {isa = PBXBuildFile; fileRef = C33C825D2316DC8600DD2451 /* FLEXObjectExplorer.m */; };
 		C33E46AF223B02CD004BD0E6 /* FLEXASLLogController.h in Headers */ = {isa = PBXBuildFile; fileRef = C33E46AD223B02CD004BD0E6 /* FLEXASLLogController.h */; };
 		C33E46B0223B02CD004BD0E6 /* FLEXASLLogController.m in Sources */ = {isa = PBXBuildFile; fileRef = C33E46AE223B02CD004BD0E6 /* FLEXASLLogController.m */; };
-		C3474C4023DA496400466532 /* FLEXKeyValueTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C3474C3E23DA496400466532 /* FLEXKeyValueTableViewCell.h */; };
+		C3474C4023DA496400466532 /* FLEXKeyValueTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C3474C3E23DA496400466532 /* FLEXKeyValueTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3474C4123DA496400466532 /* FLEXKeyValueTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C3474C3F23DA496400466532 /* FLEXKeyValueTableViewCell.m */; };
-		C3490E1F233BDD73002AE200 /* FLEXSingleRowSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C3490E1D233BDD73002AE200 /* FLEXSingleRowSection.h */; };
+		C3490E1F233BDD73002AE200 /* FLEXSingleRowSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C3490E1D233BDD73002AE200 /* FLEXSingleRowSection.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3490E20233BDD73002AE200 /* FLEXSingleRowSection.m in Sources */ = {isa = PBXBuildFile; fileRef = C3490E1E233BDD73002AE200 /* FLEXSingleRowSection.m */; };
-		C34C9BDD23A7F2740031CA3E /* FLEXRuntime+UIKitHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = C34C9BDB23A7F2740031CA3E /* FLEXRuntime+UIKitHelpers.h */; };
+		C34C9BDD23A7F2740031CA3E /* FLEXRuntime+UIKitHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = C34C9BDB23A7F2740031CA3E /* FLEXRuntime+UIKitHelpers.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C34C9BDE23A7F2740031CA3E /* FLEXRuntime+UIKitHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = C34C9BDC23A7F2740031CA3E /* FLEXRuntime+UIKitHelpers.m */; };
-		C34D4EB023A2ABD900C1F903 /* FLEXLayerShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C34D4EAE23A2ABD900C1F903 /* FLEXLayerShortcuts.h */; };
+		C34D4EB023A2ABD900C1F903 /* FLEXLayerShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C34D4EAE23A2ABD900C1F903 /* FLEXLayerShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C34D4EB123A2ABD900C1F903 /* FLEXLayerShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = C34D4EAF23A2ABD900C1F903 /* FLEXLayerShortcuts.m */; };
-		C34D4EB423A2AF2A00C1F903 /* FLEXColorPreviewSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C34D4EB223A2AF2A00C1F903 /* FLEXColorPreviewSection.h */; };
+		C34D4EB423A2AF2A00C1F903 /* FLEXColorPreviewSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C34D4EB223A2AF2A00C1F903 /* FLEXColorPreviewSection.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C34D4EB523A2AF2A00C1F903 /* FLEXColorPreviewSection.m in Sources */ = {isa = PBXBuildFile; fileRef = C34D4EB323A2AF2A00C1F903 /* FLEXColorPreviewSection.m */; };
-		C34D4EB823A2B17900C1F903 /* FLEXBundleShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C34D4EB623A2B17900C1F903 /* FLEXBundleShortcuts.h */; };
+		C34D4EB823A2B17900C1F903 /* FLEXBundleShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C34D4EB623A2B17900C1F903 /* FLEXBundleShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C34D4EB923A2B17900C1F903 /* FLEXBundleShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = C34D4EB723A2B17900C1F903 /* FLEXBundleShortcuts.m */; };
 		C34EE30821CB23CC00BD3A7C /* FLEXOSLogController.h in Headers */ = {isa = PBXBuildFile; fileRef = C34EE30621CB23CC00BD3A7C /* FLEXOSLogController.h */; };
 		C3511B9122D7C99E0057BAB7 /* FLEXGlobalsSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C3511B8F22D7C99E0057BAB7 /* FLEXGlobalsSection.h */; };
@@ -188,62 +188,70 @@
 		C3531B9E23E69BB200A184AD /* FLEXManager+Networking.m in Sources */ = {isa = PBXBuildFile; fileRef = C3531B9C23E69BB200A184AD /* FLEXManager+Networking.m */; };
 		C3531BA123E796BD00A184AD /* FLEXManager+Extensibility.h in Headers */ = {isa = PBXBuildFile; fileRef = C3531B9F23E796BD00A184AD /* FLEXManager+Extensibility.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3531BA223E796BD00A184AD /* FLEXManager+Extensibility.m in Sources */ = {isa = PBXBuildFile; fileRef = C3531BA023E796BD00A184AD /* FLEXManager+Extensibility.m */; };
-		C3531BA523E88A2100A184AD /* FLEXNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = C3531BA323E88A2100A184AD /* FLEXNavigationController.h */; };
+		C3531BA523E88A2100A184AD /* FLEXNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = C3531BA323E88A2100A184AD /* FLEXNavigationController.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3531BA623E88A2100A184AD /* FLEXNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3531BA423E88A2100A184AD /* FLEXNavigationController.m */; };
 		C3531BAA23E88FAC00A184AD /* FLEXTabList.h in Headers */ = {isa = PBXBuildFile; fileRef = C3531BA823E88FAC00A184AD /* FLEXTabList.h */; };
 		C3531BAB23E88FAC00A184AD /* FLEXTabList.m in Sources */ = {isa = PBXBuildFile; fileRef = C3531BA923E88FAC00A184AD /* FLEXTabList.m */; };
-		C362AE8123C7E9D1005A86AE /* NSMapTable+FLEX_Subscripting.h in Headers */ = {isa = PBXBuildFile; fileRef = C362AE7F23C7E9D1005A86AE /* NSMapTable+FLEX_Subscripting.h */; };
+		C362AE8123C7E9D1005A86AE /* NSMapTable+FLEX_Subscripting.h in Headers */ = {isa = PBXBuildFile; fileRef = C362AE7F23C7E9D1005A86AE /* NSMapTable+FLEX_Subscripting.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C362AE8223C7E9D1005A86AE /* NSMapTable+FLEX_Subscripting.m in Sources */ = {isa = PBXBuildFile; fileRef = C362AE8023C7E9D1005A86AE /* NSMapTable+FLEX_Subscripting.m */; };
 		C3694DBA23EA1096006625D7 /* FLEXTabsViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C3694DB823EA1096006625D7 /* FLEXTabsViewController.h */; };
 		C3694DBB23EA1096006625D7 /* FLEXTabsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3694DB923EA1096006625D7 /* FLEXTabsViewController.m */; };
-		C3694DC223EA147F006625D7 /* UIBarButtonItem+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C3694DC023EA147F006625D7 /* UIBarButtonItem+FLEX.h */; };
+		C3694DC223EA147F006625D7 /* UIBarButtonItem+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C3694DC023EA147F006625D7 /* UIBarButtonItem+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3694DC323EA147F006625D7 /* UIBarButtonItem+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = C3694DC123EA147F006625D7 /* UIBarButtonItem+FLEX.m */; };
-		C36B096523E0D4A1008F5D47 /* UIMenu+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C36B096323E0D4A1008F5D47 /* UIMenu+FLEX.h */; };
+		C36B096523E0D4A1008F5D47 /* UIMenu+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C36B096323E0D4A1008F5D47 /* UIMenu+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C36B096623E0D4A1008F5D47 /* UIMenu+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = C36B096423E0D4A1008F5D47 /* UIMenu+FLEX.m */; };
-		C36B097023E1EDCD008F5D47 /* FLEXTableViewSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C36B096E23E1EDCD008F5D47 /* FLEXTableViewSection.h */; };
+		C36B097023E1EDCD008F5D47 /* FLEXTableViewSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C36B096E23E1EDCD008F5D47 /* FLEXTableViewSection.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C36B097123E1EDCD008F5D47 /* FLEXTableViewSection.m in Sources */ = {isa = PBXBuildFile; fileRef = C36B096F23E1EDCD008F5D47 /* FLEXTableViewSection.m */; };
 		C36FBFCB230F3B98008D95D5 /* FLEXMirror.m in Sources */ = {isa = PBXBuildFile; fileRef = C36FBFB9230F3B97008D95D5 /* FLEXMirror.m */; };
-		C36FBFCC230F3B98008D95D5 /* FLEXProtocolBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFBA230F3B97008D95D5 /* FLEXProtocolBuilder.h */; };
+		C36FBFCC230F3B98008D95D5 /* FLEXProtocolBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFBA230F3B97008D95D5 /* FLEXProtocolBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C36FBFCD230F3B98008D95D5 /* FLEXMethod.m in Sources */ = {isa = PBXBuildFile; fileRef = C36FBFBB230F3B97008D95D5 /* FLEXMethod.m */; };
-		C36FBFCE230F3B98008D95D5 /* FLEXProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFBC230F3B97008D95D5 /* FLEXProperty.h */; };
-		C36FBFCF230F3B98008D95D5 /* FLEXProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFBD230F3B97008D95D5 /* FLEXProtocol.h */; };
+		C36FBFCE230F3B98008D95D5 /* FLEXProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFBC230F3B97008D95D5 /* FLEXProperty.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C36FBFCF230F3B98008D95D5 /* FLEXProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFBD230F3B97008D95D5 /* FLEXProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C36FBFD0230F3B98008D95D5 /* FLEXProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = C36FBFBE230F3B97008D95D5 /* FLEXProperty.m */; };
 		C36FBFD1230F3B98008D95D5 /* FLEXClassBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = C36FBFBF230F3B98008D95D5 /* FLEXClassBuilder.m */; };
-		C36FBFD2230F3B98008D95D5 /* FLEXMethodBase.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFC0230F3B98008D95D5 /* FLEXMethodBase.h */; };
-		C36FBFD3230F3B98008D95D5 /* FLEXMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFC1230F3B98008D95D5 /* FLEXMethod.h */; };
+		C36FBFD2230F3B98008D95D5 /* FLEXMethodBase.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFC0230F3B98008D95D5 /* FLEXMethodBase.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C36FBFD3230F3B98008D95D5 /* FLEXMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFC1230F3B98008D95D5 /* FLEXMethod.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C36FBFD4230F3B98008D95D5 /* FLEXProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = C36FBFC2230F3B98008D95D5 /* FLEXProtocol.m */; };
 		C36FBFD5230F3B98008D95D5 /* FLEXMethodBase.m in Sources */ = {isa = PBXBuildFile; fileRef = C36FBFC3230F3B98008D95D5 /* FLEXMethodBase.m */; };
-		C36FBFD6230F3B98008D95D5 /* FLEXIvar.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFC4230F3B98008D95D5 /* FLEXIvar.h */; };
-		C36FBFD7230F3B98008D95D5 /* FLEXMirror.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFC5230F3B98008D95D5 /* FLEXMirror.h */; };
-		C36FBFD8230F3B98008D95D5 /* FLEXPropertyAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFC6230F3B98008D95D5 /* FLEXPropertyAttributes.h */; };
+		C36FBFD6230F3B98008D95D5 /* FLEXIvar.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFC4230F3B98008D95D5 /* FLEXIvar.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C36FBFD7230F3B98008D95D5 /* FLEXMirror.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFC5230F3B98008D95D5 /* FLEXMirror.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C36FBFD8230F3B98008D95D5 /* FLEXPropertyAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFC6230F3B98008D95D5 /* FLEXPropertyAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C36FBFD9230F3B98008D95D5 /* FLEXProtocolBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = C36FBFC7230F3B98008D95D5 /* FLEXProtocolBuilder.m */; };
 		C36FBFDA230F3B98008D95D5 /* FLEXPropertyAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = C36FBFC8230F3B98008D95D5 /* FLEXPropertyAttributes.m */; };
-		C36FBFDB230F3B98008D95D5 /* FLEXClassBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFC9230F3B98008D95D5 /* FLEXClassBuilder.h */; };
+		C36FBFDB230F3B98008D95D5 /* FLEXClassBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C36FBFC9230F3B98008D95D5 /* FLEXClassBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C36FBFDC230F3B98008D95D5 /* FLEXIvar.m in Sources */ = {isa = PBXBuildFile; fileRef = C36FBFCA230F3B98008D95D5 /* FLEXIvar.m */; };
-		C37A0C93218BAC9600848CA7 /* FLEXObjcInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = C37A0C91218BAC9600848CA7 /* FLEXObjcInternal.h */; };
+		C37A0C93218BAC9600848CA7 /* FLEXObjcInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = C37A0C91218BAC9600848CA7 /* FLEXObjcInternal.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C37A0C94218BAC9600848CA7 /* FLEXObjcInternal.mm in Sources */ = {isa = PBXBuildFile; fileRef = C37A0C92218BAC9600848CA7 /* FLEXObjcInternal.mm */; };
-		C383C3B923B6A62A007A321B /* FLEXRuntimeSafety.h in Headers */ = {isa = PBXBuildFile; fileRef = C383C3B723B6A62A007A321B /* FLEXRuntimeSafety.h */; };
+		C383C3B923B6A62A007A321B /* FLEXRuntimeSafety.h in Headers */ = {isa = PBXBuildFile; fileRef = C383C3B723B6A62A007A321B /* FLEXRuntimeSafety.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C383C3BA23B6A62A007A321B /* FLEXRuntimeSafety.m in Sources */ = {isa = PBXBuildFile; fileRef = C383C3B823B6A62A007A321B /* FLEXRuntimeSafety.m */; };
 		C383C3BD23B6B398007A321B /* UITextField+Range.m in Sources */ = {isa = PBXBuildFile; fileRef = C383C3BB23B6B398007A321B /* UITextField+Range.m */; };
-		C383C3BE23B6B398007A321B /* UITextField+Range.h in Headers */ = {isa = PBXBuildFile; fileRef = C383C3BC23B6B398007A321B /* UITextField+Range.h */; };
+		C383C3BE23B6B398007A321B /* UITextField+Range.h in Headers */ = {isa = PBXBuildFile; fileRef = C383C3BC23B6B398007A321B /* UITextField+Range.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C383C3C123B6B429007A321B /* NSTimer+Blocks.m in Sources */ = {isa = PBXBuildFile; fileRef = C383C3BF23B6B429007A321B /* NSTimer+Blocks.m */; };
-		C383C3C223B6B429007A321B /* NSTimer+Blocks.h in Headers */ = {isa = PBXBuildFile; fileRef = C383C3C023B6B429007A321B /* NSTimer+Blocks.h */; };
-		C383C3C523B6BB81007A321B /* FLEXCodeFontCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C383C3C323B6BB81007A321B /* FLEXCodeFontCell.h */; };
+		C383C3C223B6B429007A321B /* NSTimer+Blocks.h in Headers */ = {isa = PBXBuildFile; fileRef = C383C3C023B6B429007A321B /* NSTimer+Blocks.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C383C3C523B6BB81007A321B /* FLEXCodeFontCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C383C3C323B6BB81007A321B /* FLEXCodeFontCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C383C3C623B6BB81007A321B /* FLEXCodeFontCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C383C3C423B6BB81007A321B /* FLEXCodeFontCell.m */; };
 		C3854DF023F36C1700FCD1E2 /* FLEXTypeEncodingParserTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3854DEF23F36C1700FCD1E2 /* FLEXTypeEncodingParserTests.m */; };
+		C386D6A9241995A800699085 /* FLEXTypeEncodingParser.h in Headers */ = {isa = PBXBuildFile; fileRef = C3854DF223F36C9E00FCD1E2 /* FLEXTypeEncodingParser.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C386D6E924199C1B00699085 /* FLEX-Core.h in Headers */ = {isa = PBXBuildFile; fileRef = C386D6E824199C1B00699085 /* FLEX-Core.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C386D6EB24199E9600699085 /* FLEX-ObjectExploring.h in Headers */ = {isa = PBXBuildFile; fileRef = C386D6EA24199E9600699085 /* FLEX-ObjectExploring.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C386D6ED24199EC600699085 /* FLEX-Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = C386D6EC24199EC600699085 /* FLEX-Runtime.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C386D6F02419A33F00699085 /* FLEXRuntimeConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C386D6EF2419A33F00699085 /* FLEXRuntimeConstants.m */; };
+		C386D6F2241A96AD00699085 /* FLEXMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = C386D6F1241A96AD00699085 /* FLEXMacros.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C386D6F3241A976100699085 /* FLEXRuntimeConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C386D6EE2419A2F400699085 /* FLEXRuntimeConstants.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C386D6F6241A9D6900699085 /* FLEX-Categories.h in Headers */ = {isa = PBXBuildFile; fileRef = C386D6F5241A9D6900699085 /* FLEX-Categories.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3878DBA23A749960038FDBE /* FLEXVariableEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3878DB823A749960038FDBE /* FLEXVariableEditorViewController.m */; };
 		C3878DBB23A749960038FDBE /* FLEXVariableEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C3878DB923A749960038FDBE /* FLEXVariableEditorViewController.h */; };
 		C3878DBC23A749F70038FDBE /* FLEXFieldEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C94871B5B21410088C3F2 /* FLEXFieldEditorViewController.m */; };
 		C3878DBE23A74A8F0038FDBE /* FLEXNetworkRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C94B81B5B21410088C3F2 /* FLEXNetworkRecorder.m */; };
 		C387C87A22DFCD6A00750E58 /* FLEXCarouselCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C387C87822DFCD6A00750E58 /* FLEXCarouselCell.h */; };
 		C387C87B22DFCD6A00750E58 /* FLEXCarouselCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C387C87922DFCD6A00750E58 /* FLEXCarouselCell.m */; };
-		C387C88322E0D24A00750E58 /* UIView+FLEX_Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = C387C88122E0D24A00750E58 /* UIView+FLEX_Layout.h */; };
+		C387C88322E0D24A00750E58 /* UIView+FLEX_Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = C387C88122E0D24A00750E58 /* UIView+FLEX_Layout.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C387C88422E0D24A00750E58 /* UIView+FLEX_Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = C387C88222E0D24A00750E58 /* UIView+FLEX_Layout.m */; };
-		C38DF0EA22CFE4370077B4AD /* FLEXTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DF0E822CFE4370077B4AD /* FLEXTableViewController.h */; };
+		C38DF0EA22CFE4370077B4AD /* FLEXTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C38DF0E822CFE4370077B4AD /* FLEXTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C38DF0EB22CFE4370077B4AD /* FLEXTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C38DF0E922CFE4370077B4AD /* FLEXTableViewController.m */; };
 		C38EF26223A2FCD20047A7EC /* FLEXViewControllerShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = C38EF26023A2FCD20047A7EC /* FLEXViewControllerShortcuts.m */; };
-		C38EF26323A2FCD20047A7EC /* FLEXViewControllerShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C38EF26123A2FCD20047A7EC /* FLEXViewControllerShortcuts.h */; };
-		C38F3F31230C958F004E3731 /* FLEXAlert.h in Headers */ = {isa = PBXBuildFile; fileRef = C38F3F2F230C958F004E3731 /* FLEXAlert.h */; };
+		C38EF26323A2FCD20047A7EC /* FLEXViewControllerShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C38EF26123A2FCD20047A7EC /* FLEXViewControllerShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C38F3F31230C958F004E3731 /* FLEXAlert.h in Headers */ = {isa = PBXBuildFile; fileRef = C38F3F2F230C958F004E3731 /* FLEXAlert.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C38F3F32230C958F004E3731 /* FLEXAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = C38F3F30230C958F004E3731 /* FLEXAlert.m */; };
 		C397E318240EC98F0091E4EC /* FLEXSQLResult.h in Headers */ = {isa = PBXBuildFile; fileRef = C397E316240EC98F0091E4EC /* FLEXSQLResult.h */; };
 		C397E319240EC98F0091E4EC /* FLEXSQLResult.m in Sources */ = {isa = PBXBuildFile; fileRef = C397E317240EC98F0091E4EC /* FLEXSQLResult.m */; };
@@ -259,7 +267,7 @@
 		C398625623AD6C67007E6793 /* FLEXRuntimeBrowserToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = C398624C23AD6C67007E6793 /* FLEXRuntimeBrowserToolbar.m */; };
 		C398625923AD6C88007E6793 /* FLEXSearchToken.h in Headers */ = {isa = PBXBuildFile; fileRef = C398625723AD6C88007E6793 /* FLEXSearchToken.h */; };
 		C398625A23AD6C88007E6793 /* FLEXSearchToken.m in Sources */ = {isa = PBXBuildFile; fileRef = C398625823AD6C88007E6793 /* FLEXSearchToken.m */; };
-		C398625D23AD6E90007E6793 /* UIFont+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C398625B23AD6E90007E6793 /* UIFont+FLEX.h */; };
+		C398625D23AD6E90007E6793 /* UIFont+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C398625B23AD6E90007E6793 /* UIFont+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C398625E23AD6E90007E6793 /* UIFont+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = C398625C23AD6E90007E6793 /* UIFont+FLEX.m */; };
 		C398626123AD70DF007E6793 /* FLEXKeyboardToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = C398625F23AD70DF007E6793 /* FLEXKeyboardToolbar.h */; };
 		C398626223AD70DF007E6793 /* FLEXKeyboardToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = C398626023AD70DF007E6793 /* FLEXKeyboardToolbar.m */; };
@@ -269,14 +277,14 @@
 		C398626C23AD71C1007E6793 /* FLEXRuntimeController.h in Headers */ = {isa = PBXBuildFile; fileRef = C398626823AD71C1007E6793 /* FLEXRuntimeController.h */; };
 		C398626D23AD71C1007E6793 /* FLEXRuntimeController.m in Sources */ = {isa = PBXBuildFile; fileRef = C398626923AD71C1007E6793 /* FLEXRuntimeController.m */; };
 		C398626E23AD71C1007E6793 /* FLEXRuntimeClient.m in Sources */ = {isa = PBXBuildFile; fileRef = C398626A23AD71C1007E6793 /* FLEXRuntimeClient.m */; };
-		C398627223AD7951007E6793 /* UIGestureRecognizer+Blocks.h in Headers */ = {isa = PBXBuildFile; fileRef = C398627023AD7951007E6793 /* UIGestureRecognizer+Blocks.h */; };
+		C398627223AD7951007E6793 /* UIGestureRecognizer+Blocks.h in Headers */ = {isa = PBXBuildFile; fileRef = C398627023AD7951007E6793 /* UIGestureRecognizer+Blocks.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C398627323AD7951007E6793 /* UIGestureRecognizer+Blocks.m in Sources */ = {isa = PBXBuildFile; fileRef = C398627123AD7951007E6793 /* UIGestureRecognizer+Blocks.m */; };
-		C398627623AD79B7007E6793 /* NSString+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C398627423AD79B6007E6793 /* NSString+FLEX.h */; };
+		C398627623AD79B7007E6793 /* NSString+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C398627423AD79B6007E6793 /* NSString+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C398627723AD79B7007E6793 /* NSString+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = C398627523AD79B7007E6793 /* NSString+FLEX.m */; };
 		C398682523AC359600E9E391 /* FLEXShortcutsFactory+Defaults.m in Sources */ = {isa = PBXBuildFile; fileRef = C398682323AC359600E9E391 /* FLEXShortcutsFactory+Defaults.m */; };
-		C398682623AC359600E9E391 /* FLEXShortcutsFactory+Defaults.h in Headers */ = {isa = PBXBuildFile; fileRef = C398682423AC359600E9E391 /* FLEXShortcutsFactory+Defaults.h */; };
+		C398682623AC359600E9E391 /* FLEXShortcutsFactory+Defaults.h in Headers */ = {isa = PBXBuildFile; fileRef = C398682423AC359600E9E391 /* FLEXShortcutsFactory+Defaults.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C398682823AC36EC00E9E391 /* FLEXViewShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F527C4231891F6009CBA07 /* FLEXViewShortcuts.m */; };
-		C398682923AC370100E9E391 /* FLEXViewShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F527C3231891F6009CBA07 /* FLEXViewShortcuts.h */; };
+		C398682923AC370100E9E391 /* FLEXViewShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F527C3231891F6009CBA07 /* FLEXViewShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C39EADC923F37B89005618BE /* FLEXTypeEncodingParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C3854DF123F36C9E00FCD1E2 /* FLEXTypeEncodingParser.m */; };
 		C39ED92822D63F3200B5773A /* FLEXAddressExplorerCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = C39ED92622D63F3200B5773A /* FLEXAddressExplorerCoordinator.h */; };
 		C39ED92922D63F3200B5773A /* FLEXAddressExplorerCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = C39ED92722D63F3200B5773A /* FLEXAddressExplorerCoordinator.m */; };
@@ -296,45 +304,45 @@
 		C3A9424A23C78878006871A3 /* FLEXHierarchyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A9424823C78878006871A3 /* FLEXHierarchyViewController.m */; };
 		C3A9424D23C78CFF006871A3 /* FHSViewSnapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = C3A9424B23C78CFF006871A3 /* FHSViewSnapshot.h */; };
 		C3A9424E23C78CFF006871A3 /* FHSViewSnapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A9424C23C78CFF006871A3 /* FHSViewSnapshot.m */; };
-		C3BFD070233C23ED0015FB82 /* NSArray+Functional.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BFD06E233C23ED0015FB82 /* NSArray+Functional.h */; };
+		C3BFD070233C23ED0015FB82 /* NSArray+Functional.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BFD06E233C23ED0015FB82 /* NSArray+Functional.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3BFD071233C23ED0015FB82 /* NSArray+Functional.m in Sources */ = {isa = PBXBuildFile; fileRef = C3BFD06F233C23ED0015FB82 /* NSArray+Functional.m */; };
 		C3DB9F642107FC9600B46809 /* FLEXObjectRef.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DB9F622107FC9600B46809 /* FLEXObjectRef.h */; };
 		C3DB9F652107FC9600B46809 /* FLEXObjectRef.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DB9F632107FC9600B46809 /* FLEXObjectRef.m */; };
 		C3DC287C223ED5F200F48AA6 /* FLEXOSLogController.m in Sources */ = {isa = PBXBuildFile; fileRef = C34EE30721CB23CC00BD3A7C /* FLEXOSLogController.m */; };
-		C3DFCD942416BC6500BB7084 /* FLEXFilteringTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DFCD922416BC6500BB7084 /* FLEXFilteringTableViewController.h */; };
+		C3DFCD942416BC6500BB7084 /* FLEXFilteringTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DFCD922416BC6500BB7084 /* FLEXFilteringTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3DFCD952416BC6500BB7084 /* FLEXFilteringTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DFCD932416BC6500BB7084 /* FLEXFilteringTableViewController.m */; };
-		C3DFCD982416E7DD00BB7084 /* FLEXMutableListSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DFCD962416E7DD00BB7084 /* FLEXMutableListSection.h */; };
+		C3DFCD982416E7DD00BB7084 /* FLEXMutableListSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DFCD962416E7DD00BB7084 /* FLEXMutableListSection.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3DFCD992416E7DD00BB7084 /* FLEXMutableListSection.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DFCD972416E7DD00BB7084 /* FLEXMutableListSection.m */; };
-		C3DFCDB82418336D00BB7084 /* NSUserDefaults+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DFCDB62418336D00BB7084 /* NSUserDefaults+FLEX.h */; };
+		C3DFCDB82418336D00BB7084 /* NSUserDefaults+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DFCDB62418336D00BB7084 /* NSUserDefaults+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3DFCDB92418336D00BB7084 /* NSUserDefaults+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DFCDB72418336D00BB7084 /* NSUserDefaults+FLEX.m */; };
-		C3E5D9FD2316E83700E655DB /* FLEXRuntime+Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E5D9FB2316E83700E655DB /* FLEXRuntime+Compare.h */; };
+		C3E5D9FD2316E83700E655DB /* FLEXRuntime+Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E5D9FB2316E83700E655DB /* FLEXRuntime+Compare.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3E5D9FE2316E83700E655DB /* FLEXRuntime+Compare.m in Sources */ = {isa = PBXBuildFile; fileRef = C3E5D9FC2316E83700E655DB /* FLEXRuntime+Compare.m */; };
-		C3E5DA02231700EE00E655DB /* FLEXObjectInfoSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E5DA00231700EE00E655DB /* FLEXObjectInfoSection.h */; };
-		C3EE76BF22DFC63600EC0AA0 /* FLEXScopeCarousel.h in Headers */ = {isa = PBXBuildFile; fileRef = C3EE76BD22DFC63600EC0AA0 /* FLEXScopeCarousel.h */; };
+		C3E5DA02231700EE00E655DB /* FLEXObjectInfoSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E5DA00231700EE00E655DB /* FLEXObjectInfoSection.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C3EE76BF22DFC63600EC0AA0 /* FLEXScopeCarousel.h in Headers */ = {isa = PBXBuildFile; fileRef = C3EE76BD22DFC63600EC0AA0 /* FLEXScopeCarousel.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3EE76C022DFC63600EC0AA0 /* FLEXScopeCarousel.m in Sources */ = {isa = PBXBuildFile; fileRef = C3EE76BE22DFC63600EC0AA0 /* FLEXScopeCarousel.m */; };
-		C3F31D3D2267D883003C991A /* FLEXSubtitleTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31D342267D883003C991A /* FLEXSubtitleTableViewCell.h */; };
-		C3F31D3E2267D883003C991A /* FLEXTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31D352267D883003C991A /* FLEXTableViewCell.h */; };
-		C3F31D3F2267D883003C991A /* FLEXMultilineTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31D362267D883003C991A /* FLEXMultilineTableViewCell.h */; };
+		C3F31D3D2267D883003C991A /* FLEXSubtitleTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31D342267D883003C991A /* FLEXSubtitleTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C3F31D3E2267D883003C991A /* FLEXTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31D352267D883003C991A /* FLEXTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		C3F31D3F2267D883003C991A /* FLEXMultilineTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31D362267D883003C991A /* FLEXMultilineTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3F31D402267D883003C991A /* FLEXSubtitleTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31D372267D883003C991A /* FLEXSubtitleTableViewCell.m */; };
 		C3F31D412267D883003C991A /* FLEXMultilineTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31D382267D883003C991A /* FLEXMultilineTableViewCell.m */; };
 		C3F31D422267D883003C991A /* FLEXTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31D392267D883003C991A /* FLEXTableViewCell.m */; };
-		C3F31D432267D883003C991A /* FLEXTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31D3B2267D883003C991A /* FLEXTableView.h */; };
+		C3F31D432267D883003C991A /* FLEXTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F31D3B2267D883003C991A /* FLEXTableView.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3F31D442267D883003C991A /* FLEXTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F31D3C2267D883003C991A /* FLEXTableView.m */; };
-		C3F527BD2318603F009CBA07 /* FLEXShortcutsSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F527BB2318603F009CBA07 /* FLEXShortcutsSection.h */; };
+		C3F527BD2318603F009CBA07 /* FLEXShortcutsSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F527BB2318603F009CBA07 /* FLEXShortcutsSection.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3F527BE2318603F009CBA07 /* FLEXShortcutsSection.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F527BC2318603F009CBA07 /* FLEXShortcutsSection.m */; };
-		C3F527C12318670F009CBA07 /* FLEXImageShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F527BF2318670F009CBA07 /* FLEXImageShortcuts.h */; };
+		C3F527C12318670F009CBA07 /* FLEXImageShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F527BF2318670F009CBA07 /* FLEXImageShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3F527C22318670F009CBA07 /* FLEXImageShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F527C02318670F009CBA07 /* FLEXImageShortcuts.m */; };
-		C3F646C1239EAA8F00D4A011 /* UIPasteboard+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F646BF239EAA8F00D4A011 /* UIPasteboard+FLEX.h */; };
+		C3F646C1239EAA8F00D4A011 /* UIPasteboard+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F646BF239EAA8F00D4A011 /* UIPasteboard+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3F646C2239EAA8F00D4A011 /* UIPasteboard+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F646C0239EAA8F00D4A011 /* UIPasteboard+FLEX.m */; };
-		C3F646F223A045DB00D4A011 /* FLEXClassShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F646F023A045DB00D4A011 /* FLEXClassShortcuts.h */; };
+		C3F646F223A045DB00D4A011 /* FLEXClassShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F646F023A045DB00D4A011 /* FLEXClassShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3F646F323A045DB00D4A011 /* FLEXClassShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F646F123A045DB00D4A011 /* FLEXClassShortcuts.m */; };
-		C3F646F623A04A7500D4A011 /* FLEXShortcut.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F646F423A04A7500D4A011 /* FLEXShortcut.h */; };
+		C3F646F623A04A7500D4A011 /* FLEXShortcut.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F646F423A04A7500D4A011 /* FLEXShortcut.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3F646F723A04A7500D4A011 /* FLEXShortcut.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F646F523A04A7500D4A011 /* FLEXShortcut.m */; };
-		C3F977832311B38F0032776D /* NSString+ObjcRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F9777D2311B38E0032776D /* NSString+ObjcRuntime.h */; };
+		C3F977832311B38F0032776D /* NSString+ObjcRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F9777D2311B38E0032776D /* NSString+ObjcRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3F977842311B38F0032776D /* NSDictionary+ObjcRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F9777E2311B38E0032776D /* NSDictionary+ObjcRuntime.m */; };
-		C3F977852311B38F0032776D /* NSDictionary+ObjcRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F9777F2311B38F0032776D /* NSDictionary+ObjcRuntime.h */; };
+		C3F977852311B38F0032776D /* NSDictionary+ObjcRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F9777F2311B38F0032776D /* NSDictionary+ObjcRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3F977862311B38F0032776D /* NSString+ObjcRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F977802311B38F0032776D /* NSString+ObjcRuntime.m */; };
-		C3F977872311B38F0032776D /* NSObject+Reflection.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F977812311B38F0032776D /* NSObject+Reflection.h */; };
+		C3F977872311B38F0032776D /* NSObject+Reflection.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F977812311B38F0032776D /* NSObject+Reflection.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C3F977882311B38F0032776D /* NSObject+Reflection.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F977822311B38F0032776D /* NSObject+Reflection.m */; };
 /* End PBXBuildFile section */
 
@@ -486,8 +494,8 @@
 		94A5151C1C4CA1F10063292F /* FLEXWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXWindow.m; sourceTree = "<group>"; };
 		94A515211C4CA2080063292F /* FLEXExplorerToolbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FLEXExplorerToolbar.h; path = Classes/Toolbar/FLEXExplorerToolbar.h; sourceTree = SOURCE_ROOT; };
 		94A515221C4CA2080063292F /* FLEXExplorerToolbar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FLEXExplorerToolbar.m; path = Classes/Toolbar/FLEXExplorerToolbar.m; sourceTree = SOURCE_ROOT; };
-		94A515231C4CA2080063292F /* FLEXToolbarItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FLEXToolbarItem.h; path = Classes/Toolbar/FLEXToolbarItem.h; sourceTree = SOURCE_ROOT; };
-		94A515241C4CA2080063292F /* FLEXToolbarItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FLEXToolbarItem.m; path = Classes/Toolbar/FLEXToolbarItem.m; sourceTree = SOURCE_ROOT; };
+		94A515231C4CA2080063292F /* FLEXExplorerToolbarItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FLEXExplorerToolbarItem.h; path = Classes/Toolbar/FLEXExplorerToolbarItem.h; sourceTree = SOURCE_ROOT; };
+		94A515241C4CA2080063292F /* FLEXExplorerToolbarItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FLEXExplorerToolbarItem.m; path = Classes/Toolbar/FLEXExplorerToolbarItem.m; sourceTree = SOURCE_ROOT; };
 		94AAF0361BAF2E1F00DE8760 /* FLEXKeyboardHelpViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLEXKeyboardHelpViewController.h; sourceTree = "<group>"; };
 		94AAF0371BAF2E1F00DE8760 /* FLEXKeyboardHelpViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXKeyboardHelpViewController.m; sourceTree = "<group>"; };
 		C30199482409B38A00759E8E /* CALayer+FLEX.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CALayer+FLEX.h"; sourceTree = "<group>"; };
@@ -584,6 +592,13 @@
 		C3854DEF23F36C1700FCD1E2 /* FLEXTypeEncodingParserTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXTypeEncodingParserTests.m; sourceTree = "<group>"; };
 		C3854DF123F36C9E00FCD1E2 /* FLEXTypeEncodingParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXTypeEncodingParser.m; sourceTree = "<group>"; };
 		C3854DF223F36C9E00FCD1E2 /* FLEXTypeEncodingParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLEXTypeEncodingParser.h; sourceTree = "<group>"; };
+		C386D6E824199C1B00699085 /* FLEX-Core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FLEX-Core.h"; sourceTree = "<group>"; };
+		C386D6EA24199E9600699085 /* FLEX-ObjectExploring.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FLEX-ObjectExploring.h"; sourceTree = "<group>"; };
+		C386D6EC24199EC600699085 /* FLEX-Runtime.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FLEX-Runtime.h"; sourceTree = "<group>"; };
+		C386D6EE2419A2F400699085 /* FLEXRuntimeConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FLEXRuntimeConstants.h; sourceTree = "<group>"; };
+		C386D6EF2419A33F00699085 /* FLEXRuntimeConstants.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FLEXRuntimeConstants.m; sourceTree = "<group>"; };
+		C386D6F1241A96AD00699085 /* FLEXMacros.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FLEXMacros.h; sourceTree = "<group>"; };
+		C386D6F5241A9D6900699085 /* FLEX-Categories.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FLEX-Categories.h"; sourceTree = "<group>"; };
 		C3878DB823A749960038FDBE /* FLEXVariableEditorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXVariableEditorViewController.m; sourceTree = "<group>"; };
 		C3878DB923A749960038FDBE /* FLEXVariableEditorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLEXVariableEditorViewController.h; sourceTree = "<group>"; };
 		C387C87822DFCD6A00750E58 /* FLEXCarouselCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FLEXCarouselCell.h; sourceTree = "<group>"; };
@@ -742,7 +757,10 @@
 			isa = PBXGroup;
 			children = (
 				3A4C94241B5B20570088C3F2 /* FLEX.h */,
-				94A515131C4CA1C00063292F /* FLEXManager.h */,
+				C386D6E824199C1B00699085 /* FLEX-Core.h */,
+				C386D6EC24199EC600699085 /* FLEX-Runtime.h */,
+				C386D6F5241A9D6900699085 /* FLEX-Categories.h */,
+				C386D6EA24199E9600699085 /* FLEX-ObjectExploring.h */,
 				94A515111C4C9C1B0063292F /* Manager */,
 				C38DF0E722CFE4140077B4AD /* Core */,
 				94A515121C4C9E7B0063292F /* ExplorerInterface */,
@@ -797,6 +815,7 @@
 				C38F3F30230C958F004E3731 /* FLEXAlert.m */,
 				7349FD6822B93CDF00051810 /* FLEXColor.h */,
 				7349FD6922B93CDF00051810 /* FLEXColor.m */,
+				C386D6F1241A96AD00699085 /* FLEXMacros.h */,
 			);
 			path = Utility;
 			sourceTree = "<group>";
@@ -870,8 +889,8 @@
 			children = (
 				94A515211C4CA2080063292F /* FLEXExplorerToolbar.h */,
 				94A515221C4CA2080063292F /* FLEXExplorerToolbar.m */,
-				94A515231C4CA2080063292F /* FLEXToolbarItem.h */,
-				94A515241C4CA2080063292F /* FLEXToolbarItem.m */,
+				94A515231C4CA2080063292F /* FLEXExplorerToolbarItem.h */,
+				94A515241C4CA2080063292F /* FLEXExplorerToolbarItem.m */,
 			);
 			path = Toolbar;
 			sourceTree = "<group>";
@@ -1005,8 +1024,9 @@
 		94A515111C4C9C1B0063292F /* Manager */ = {
 			isa = PBXGroup;
 			children = (
-				94A515161C4CA1D70063292F /* FLEXManager+Private.h */,
+				94A515131C4CA1C00063292F /* FLEXManager.h */,
 				94A515151C4CA1D70063292F /* FLEXManager.m */,
+				94A515161C4CA1D70063292F /* FLEXManager+Private.h */,
 				C3531B9F23E796BD00A184AD /* FLEXManager+Extensibility.h */,
 				C3531BA023E796BD00A184AD /* FLEXManager+Extensibility.m */,
 				C3531B9B23E69BB200A184AD /* FLEXManager+Networking.h */,
@@ -1046,28 +1066,15 @@
 		C313854523F5F6120046E63C /* Objc */ = {
 			isa = PBXGroup;
 			children = (
+				C386D6F4241A9B5300699085 /* Reflection */,
 				C383C3B723B6A62A007A321B /* FLEXRuntimeSafety.h */,
 				C383C3B823B6A62A007A321B /* FLEXRuntimeSafety.m */,
 				C37A0C91218BAC9600848CA7 /* FLEXObjcInternal.h */,
 				C37A0C92218BAC9600848CA7 /* FLEXObjcInternal.mm */,
-				C36FBFC5230F3B98008D95D5 /* FLEXMirror.h */,
-				C36FBFB9230F3B97008D95D5 /* FLEXMirror.m */,
-				C36FBFC0230F3B98008D95D5 /* FLEXMethodBase.h */,
-				C36FBFC3230F3B98008D95D5 /* FLEXMethodBase.m */,
-				C36FBFC1230F3B98008D95D5 /* FLEXMethod.h */,
-				C36FBFBB230F3B97008D95D5 /* FLEXMethod.m */,
-				C36FBFC4230F3B98008D95D5 /* FLEXIvar.h */,
-				C36FBFCA230F3B98008D95D5 /* FLEXIvar.m */,
-				C36FBFBC230F3B97008D95D5 /* FLEXProperty.h */,
-				C36FBFBE230F3B97008D95D5 /* FLEXProperty.m */,
-				C36FBFC6230F3B98008D95D5 /* FLEXPropertyAttributes.h */,
-				C36FBFC8230F3B98008D95D5 /* FLEXPropertyAttributes.m */,
-				C36FBFBD230F3B97008D95D5 /* FLEXProtocol.h */,
-				C36FBFC2230F3B98008D95D5 /* FLEXProtocol.m */,
-				C36FBFBA230F3B97008D95D5 /* FLEXProtocolBuilder.h */,
-				C36FBFC7230F3B98008D95D5 /* FLEXProtocolBuilder.m */,
-				C36FBFC9230F3B98008D95D5 /* FLEXClassBuilder.h */,
-				C36FBFBF230F3B98008D95D5 /* FLEXClassBuilder.m */,
+				C386D6EE2419A2F400699085 /* FLEXRuntimeConstants.h */,
+				C386D6EF2419A33F00699085 /* FLEXRuntimeConstants.m */,
+				C3854DF223F36C9E00FCD1E2 /* FLEXTypeEncodingParser.h */,
+				C3854DF123F36C9E00FCD1E2 /* FLEXTypeEncodingParser.m */,
 			);
 			path = Objc;
 			sourceTree = "<group>";
@@ -1152,14 +1159,10 @@
 			isa = PBXGroup;
 			children = (
 				C313854523F5F6120046E63C /* Objc */,
-				3A4C945B1B5B21410088C3F2 /* FLEXRuntimeUtility.h */,
-				3A4C945C1B5B21410088C3F2 /* FLEXRuntimeUtility.m */,
-				C31D93E623E38E97005517BF /* FLEXBlockDescription.h */,
-				C31D93E723E38E97005517BF /* FLEXBlockDescription.m */,
-				C3854DF223F36C9E00FCD1E2 /* FLEXTypeEncodingParser.h */,
-				C3854DF123F36C9E00FCD1E2 /* FLEXTypeEncodingParser.m */,
 				C313854723F5F7D50046E63C /* flex_fishhook.h */,
 				C313854623F5F7D40046E63C /* flex_fishhook.c */,
+				3A4C945B1B5B21410088C3F2 /* FLEXRuntimeUtility.h */,
+				3A4C945C1B5B21410088C3F2 /* FLEXRuntimeUtility.m */,
 			);
 			path = Runtime;
 			sourceTree = "<group>";
@@ -1175,6 +1178,33 @@
 			path = Keyboard;
 			sourceTree = "<group>";
 		};
+		C386D6F4241A9B5300699085 /* Reflection */ = {
+			isa = PBXGroup;
+			children = (
+				C31D93E623E38E97005517BF /* FLEXBlockDescription.h */,
+				C31D93E723E38E97005517BF /* FLEXBlockDescription.m */,
+				C36FBFC5230F3B98008D95D5 /* FLEXMirror.h */,
+				C36FBFB9230F3B97008D95D5 /* FLEXMirror.m */,
+				C36FBFC0230F3B98008D95D5 /* FLEXMethodBase.h */,
+				C36FBFC3230F3B98008D95D5 /* FLEXMethodBase.m */,
+				C36FBFC1230F3B98008D95D5 /* FLEXMethod.h */,
+				C36FBFBB230F3B97008D95D5 /* FLEXMethod.m */,
+				C36FBFC4230F3B98008D95D5 /* FLEXIvar.h */,
+				C36FBFCA230F3B98008D95D5 /* FLEXIvar.m */,
+				C36FBFBC230F3B97008D95D5 /* FLEXProperty.h */,
+				C36FBFBE230F3B97008D95D5 /* FLEXProperty.m */,
+				C36FBFC6230F3B98008D95D5 /* FLEXPropertyAttributes.h */,
+				C36FBFC8230F3B98008D95D5 /* FLEXPropertyAttributes.m */,
+				C36FBFBD230F3B97008D95D5 /* FLEXProtocol.h */,
+				C36FBFC2230F3B98008D95D5 /* FLEXProtocol.m */,
+				C36FBFBA230F3B97008D95D5 /* FLEXProtocolBuilder.h */,
+				C36FBFC7230F3B98008D95D5 /* FLEXProtocolBuilder.m */,
+				C36FBFC9230F3B98008D95D5 /* FLEXClassBuilder.h */,
+				C36FBFBF230F3B98008D95D5 /* FLEXClassBuilder.m */,
+			);
+			path = Reflection;
+			sourceTree = "<group>";
+		};
 		C387C88022E0D22600750E58 /* Categories */ = {
 			isa = PBXGroup;
 			children = (
@@ -1407,6 +1437,7 @@
 				3A4C95321B5B21410088C3F2 /* FLEXSystemLogCell.h in Headers */,
 				C3F977852311B38F0032776D /* NSDictionary+ObjcRuntime.h in Headers */,
 				C3DFCD982416E7DD00BB7084 /* FLEXMutableListSection.h in Headers */,
+				C386D6F6241A9D6900699085 /* FLEX-Categories.h in Headers */,
 				C398625123AD6C67007E6793 /* FLEXRuntimeKeyPath.h in Headers */,
 				3A4C94F91B5B21410088C3F2 /* FLEXArgumentInputNumberView.h in Headers */,
 				C3F646F223A045DB00D4A011 /* FLEXClassShortcuts.h in Headers */,
@@ -1424,7 +1455,7 @@
 				C31D93E823E38E97005517BF /* FLEXBlockDescription.h in Headers */,
 				C3531BA123E796BD00A184AD /* FLEXManager+Extensibility.h in Headers */,
 				C36FBFCF230F3B98008D95D5 /* FLEXProtocol.h in Headers */,
-				94A515271C4CA2080063292F /* FLEXToolbarItem.h in Headers */,
+				94A515271C4CA2080063292F /* FLEXExplorerToolbarItem.h in Headers */,
 				C312A13023ECB5D300E38049 /* FLEXBookmarkManager.h in Headers */,
 				3A4C95341B5B21410088C3F2 /* FLEXSystemLogViewController.h in Headers */,
 				C34C9BDD23A7F2740031CA3E /* FLEXRuntime+UIKitHelpers.h in Headers */,
@@ -1453,12 +1484,14 @@
 				C398625423AD6C67007E6793 /* FLEXRuntimeBrowserToolbar.h in Headers */,
 				3A4C94E71B5B21410088C3F2 /* FLEXHierarchyTableViewCell.h in Headers */,
 				224D49AA1C673AB5000EAB86 /* FLEXSQLiteDatabaseManager.h in Headers */,
+				C386D6A9241995A800699085 /* FLEXTypeEncodingParser.h in Headers */,
 				3A4C95031B5B21410088C3F2 /* FLEXArgumentInputView.h in Headers */,
 				C398627623AD79B7007E6793 /* NSString+FLEX.h in Headers */,
 				94A5151D1C4CA1F10063292F /* FLEXExplorerViewController.h in Headers */,
 				C3F31D3F2267D883003C991A /* FLEXMultilineTableViewCell.h in Headers */,
 				71E1C2132307FBB800F5032A /* FLEXKeychain.h in Headers */,
 				C36FBFD7230F3B98008D95D5 /* FLEXMirror.h in Headers */,
+				C386D6F3241A976100699085 /* FLEXRuntimeConstants.h in Headers */,
 				C3F31D432267D883003C991A /* FLEXTableView.h in Headers */,
 				3A4C95071B5B21410088C3F2 /* FLEXDefaultEditorViewController.h in Headers */,
 				C309B82F223ED64400B228EC /* FLEXLogController.h in Headers */,
@@ -1484,6 +1517,7 @@
 				C3F31D3E2267D883003C991A /* FLEXTableViewCell.h in Headers */,
 				3A4C94E51B5B21410088C3F2 /* FLEXUtility.h in Headers */,
 				2EF6B04E1D494BE50006BDA5 /* FLEXNetworkCurlLogger.h in Headers */,
+				C386D6E924199C1B00699085 /* FLEX-Core.h in Headers */,
 				C3F31D3D2267D883003C991A /* FLEXSubtitleTableViewCell.h in Headers */,
 				94A515251C4CA2080063292F /* FLEXExplorerToolbar.h in Headers */,
 				C387C88322E0D24A00750E58 /* UIView+FLEX_Layout.h in Headers */,
@@ -1503,6 +1537,7 @@
 				C383C3BE23B6B398007A321B /* UITextField+Range.h in Headers */,
 				224D49A81C673AB5000EAB86 /* FLEXRealmDatabaseManager.h in Headers */,
 				C313853F23F5C1A10046E63C /* FLEXViewControllersViewController.h in Headers */,
+				C386D6ED24199EC600699085 /* FLEX-Runtime.h in Headers */,
 				C398682623AC359600E9E391 /* FLEXShortcutsFactory+Defaults.h in Headers */,
 				C397E318240EC98F0091E4EC /* FLEXSQLResult.h in Headers */,
 				7349FD6A22B93CDF00051810 /* FLEXColor.h in Headers */,
@@ -1511,6 +1546,7 @@
 				3A4C94FB1B5B21410088C3F2 /* FLEXArgumentInputStringView.h in Headers */,
 				C38EF26323A2FCD20047A7EC /* FLEXViewControllerShortcuts.h in Headers */,
 				3A4C95421B5B21410088C3F2 /* FLEXNetworkObserver.h in Headers */,
+				C386D6EB24199E9600699085 /* FLEX-ObjectExploring.h in Headers */,
 				679F64861BD53B7B00A8C94C /* FLEXCookiesTableViewController.h in Headers */,
 				C3F977872311B38F0032776D /* NSObject+Reflection.h in Headers */,
 				C3DB9F642107FC9600B46809 /* FLEXObjectRef.h in Headers */,
@@ -1524,6 +1560,7 @@
 				C36FBFD6230F3B98008D95D5 /* FLEXIvar.h in Headers */,
 				C3A9423823C51B8D006871A3 /* FHSRangeSlider.h in Headers */,
 				C398626123AD70DF007E6793 /* FLEXKeyboardToolbar.h in Headers */,
+				C386D6F2241A96AD00699085 /* FLEXMacros.h in Headers */,
 				94AAF03A1BAF2F0300DE8760 /* FLEXKeyboardShortcutManager.h in Headers */,
 				94A515181C4CA1D70063292F /* FLEXManager+Private.h in Headers */,
 				C383C3B923B6A62A007A321B /* FLEXRuntimeSafety.h in Headers */,
@@ -1730,7 +1767,7 @@
 				C36FBFD1230F3B98008D95D5 /* FLEXClassBuilder.m in Sources */,
 				779B1ED51C0C4D7C001F5E49 /* FLEXDBQueryRowCell.m in Sources */,
 				3A4C94E21B5B21410088C3F2 /* FLEXResources.m in Sources */,
-				94A515281C4CA2080063292F /* FLEXToolbarItem.m in Sources */,
+				94A515281C4CA2080063292F /* FLEXExplorerToolbarItem.m in Sources */,
 				3A4C95311B5B21410088C3F2 /* FLEXSystemLogMessage.m in Sources */,
 				C3F31D422267D883003C991A /* FLEXTableViewCell.m in Sources */,
 				3A4C94F41B5B21410088C3F2 /* FLEXArgumentInputFontView.m in Sources */,
@@ -1776,6 +1813,7 @@
 				C36FBFCB230F3B98008D95D5 /* FLEXMirror.m in Sources */,
 				C36FBFD5230F3B98008D95D5 /* FLEXMethodBase.m in Sources */,
 				3A4C95001B5B21410088C3F2 /* FLEXArgumentInputSwitchView.m in Sources */,
+				C386D6F02419A33F00699085 /* FLEXRuntimeConstants.m in Sources */,
 				C3F31D442267D883003C991A /* FLEXTableView.m in Sources */,
 				3A4C953F1B5B21410088C3F2 /* FLEXNetworkTransactionDetailTableViewController.m in Sources */,
 				224D49AB1C673AB5000EAB86 /* FLEXSQLiteDatabaseManager.m in Sources */,