Compare commits
22 Commits
4.6.1
...
wip/reflex
| Author | SHA1 | Date | |
|---|---|---|---|
| 9db1b544df | |||
| b58629b8ea | |||
| adeb22af15 | |||
| 6ab183e109 | |||
| 034f401cb4 | |||
| da1958def5 | |||
| ffa658c49b | |||
| 6066de480f | |||
| 0fd7dfa002 | |||
| 60403e614d | |||
| fa7db997bd | |||
| d15e72c681 | |||
| 4f1ff7784d | |||
| 8129a034e3 | |||
| 838db6954b | |||
| 5b3d3af99c | |||
| 2f9f266493 | |||
| 9d94979d08 | |||
| 19b83f4404 | |||
| 2b13378d98 | |||
| 4ae9d41104 | |||
| 1490170eb4 |
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"search.exclude": {
|
||||
"Classes/Headers": true
|
||||
}
|
||||
}
|
||||
+11
-11
@@ -8,15 +8,15 @@
|
||||
|
||||
|
||||
|
||||
#import <FLEX/UIBarButtonItem+FLEX.h>
|
||||
#import <FLEX/CALayer+FLEX.h>
|
||||
#import <FLEX/UIFont+FLEX.h>
|
||||
#import <FLEX/UIGestureRecognizer+Blocks.h>
|
||||
#import <FLEX/UIPasteboard+FLEX.h>
|
||||
#import <FLEX/UIMenu+FLEX.h>
|
||||
#import <FLEX/UITextField+Range.h>
|
||||
#import <UIBarButtonItem+FLEX.h>
|
||||
#import <CALayer+FLEX.h>
|
||||
#import <UIFont+FLEX.h>
|
||||
#import <UIGestureRecognizer+Blocks.h>
|
||||
#import <UIPasteboard+FLEX.h>
|
||||
#import <UIMenu+FLEX.h>
|
||||
#import <UITextField+Range.h>
|
||||
|
||||
#import <FLEX/NSObject+FLEX_Reflection.h>
|
||||
#import <FLEX/NSArray+FLEX.h>
|
||||
#import <FLEX/NSUserDefaults+FLEX.h>
|
||||
#import <FLEX/NSTimer+FLEX.h>
|
||||
#import <NSObject+FLEX_Reflection.h>
|
||||
#import <NSArray+FLEX.h>
|
||||
#import <NSUserDefaults+FLEX.h>
|
||||
#import <NSTimer+FLEX.h>
|
||||
|
||||
+11
-12
@@ -6,18 +6,17 @@
|
||||
// Copyright © 2020 FLEX Team. All rights reserved.
|
||||
//
|
||||
|
||||
#import <FLEX/FLEXFilteringTableViewController.h>
|
||||
#import <FLEX/FLEXNavigationController.h>
|
||||
#import <FLEX/FLEXTableViewController.h>
|
||||
#import <FLEX/FLEXTableView.h>
|
||||
#import <FLEXFilteringTableViewController.h>
|
||||
#import <FLEXNavigationController.h>
|
||||
#import <FLEXTableViewController.h>
|
||||
#import <FLEXTableView.h>
|
||||
|
||||
#import <FLEX/FLEXSingleRowSection.h>
|
||||
#import <FLEX/FLEXTableViewSection.h>
|
||||
#import <FLEXSingleRowSection.h>
|
||||
#import <FLEXTableViewSection.h>
|
||||
|
||||
#import <FLEX/FLEXCodeFontCell.h>
|
||||
#import <FLEX/FLEXSubtitleTableViewCell.h>
|
||||
#import <FLEX/FLEXTableViewCell.h>
|
||||
#import <FLEX/FLEXMultilineTableViewCell.h>
|
||||
#import <FLEX/FLEXKeyValueTableViewCell.h>
|
||||
#import <FLEXCodeFontCell.h>
|
||||
#import <FLEXSubtitleTableViewCell.h>
|
||||
#import <FLEXTableViewCell.h>
|
||||
#import <FLEXMultilineTableViewCell.h>
|
||||
#import <FLEXKeyValueTableViewCell.h>
|
||||
|
||||
#import <FLEX/FLEXScopeCarousel.h>
|
||||
|
||||
@@ -6,25 +6,17 @@
|
||||
// Copyright © 2020 FLEX Team. All rights reserved.
|
||||
//
|
||||
|
||||
#import <FLEX/FLEXObjectExplorerFactory.h>
|
||||
#import <FLEX/FLEXObjectExplorerViewController.h>
|
||||
#import <FLEXObjectExplorerFactory.h>
|
||||
#import <FLEXObjectExplorerViewController.h>
|
||||
|
||||
#import <FLEX/FLEXObjectExplorer.h>
|
||||
#import <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 <FLEXShortcut.h>
|
||||
#import <FLEXShortcutsSection.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>
|
||||
#import <FLEXCollectionContentSection.h>
|
||||
#import <FLEXColorPreviewSection.h>
|
||||
#import <FLEXDefaultsContentSection.h>
|
||||
#import <FLEXMetadataSection.h>
|
||||
#import <FLEXMutableListSection.h>
|
||||
#import <FLEXObjectInfoSection.h>
|
||||
|
||||
+16
-15
@@ -6,20 +6,21 @@
|
||||
// Copyright © 2020 FLEX Team. All rights reserved.
|
||||
//
|
||||
|
||||
#import <FLEX/FLEXObjcInternal.h>
|
||||
#import <FLEX/FLEXRuntimeSafety.h>
|
||||
#import <FLEX/FLEXBlockDescription.h>
|
||||
#import <FLEX/FLEXTypeEncodingParser.h>
|
||||
#import <FLEXObjcInternal.h>
|
||||
#import <FLEXSwiftInternal.h>
|
||||
#import <FLEXRuntimeSafety.h>
|
||||
#import <FLEXBlockDescription.h>
|
||||
#import <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 <FLEXMirror.h>
|
||||
#import <FLEXProtocol.h>
|
||||
#import <FLEXProperty.h>
|
||||
#import <FLEXIvar.h>
|
||||
#import <FLEXMethodBase.h>
|
||||
#import <FLEXMethod.h>
|
||||
#import <FLEXPropertyAttributes.h>
|
||||
#import <FLEXRuntime+Compare.h>
|
||||
#import <FLEXRuntime+UIKitHelpers.h>
|
||||
|
||||
#import <FLEX/FLEXProtocolBuilder.h>
|
||||
#import <FLEX/FLEXClassBuilder.h>
|
||||
#import <FLEXProtocolBuilder.h>
|
||||
#import <FLEXClassBuilder.h>
|
||||
|
||||
+13
-12
@@ -7,18 +7,19 @@
|
||||
// Copyright (c) 2020 FLEX Team. All rights reserved.
|
||||
//
|
||||
|
||||
#import <FLEX/FLEXManager.h>
|
||||
#import <FLEX/FLEXManager+Extensibility.h>
|
||||
#import <FLEX/FLEXManager+Networking.h>
|
||||
#import <FLEXManager.h>
|
||||
#import <FLEXManager+Extensibility.h>
|
||||
#import <FLEXManager+Networking.h>
|
||||
|
||||
#import <FLEX/FLEXExplorerToolbar.h>
|
||||
#import <FLEX/FLEXExplorerToolbarItem.h>
|
||||
#import <FLEX/FLEXGlobalsEntry.h>
|
||||
#import <FLEXExplorerToolbar.h>
|
||||
#import <FLEXExplorerToolbarItem.h>
|
||||
#import <FLEXGlobalsEntry.h>
|
||||
|
||||
#import <FLEX/FLEX-Core.h>
|
||||
#import <FLEX/FLEX-Runtime.h>
|
||||
#import <FLEX/FLEX-Categories.h>
|
||||
#import <FLEX/FLEX-ObjectExploring.h>
|
||||
#import <FLEX-Core.h>
|
||||
#import <FLEX-Runtime.h>
|
||||
#import <FLEX-Categories.h>
|
||||
#import <FLEX-ObjectExploring.h>
|
||||
|
||||
#import <FLEX/FLEXAlert.h>
|
||||
#import <FLEX/FLEXResources.h>
|
||||
#import <FLEXMacros.h>
|
||||
#import <FLEXAlert.h>
|
||||
#import <FLEXResources.h>
|
||||
|
||||
@@ -71,7 +71,10 @@
|
||||
self.tables.selectionHandler = ^(FLEXTableListViewController *host, NSString *tableName) {
|
||||
NSArray *rows = [host.dbm queryAllDataInTable:tableName];
|
||||
NSArray *columns = [host.dbm queryAllColumnsOfTable:tableName];
|
||||
NSArray *rowIDs = [host.dbm queryRowIDsInTable:tableName];
|
||||
NSArray *rowIDs = nil;
|
||||
if ([host.dbm respondsToSelector:@selector(queryRowIDsInTable:)]) {
|
||||
rowIDs = [host.dbm queryRowIDsInTable:tableName];
|
||||
}
|
||||
UIViewController *resultsScreen = [FLEXTableContentViewController
|
||||
columns:columns rows:rows rowIDs:rowIDs tableName:tableName database:host.dbm
|
||||
];
|
||||
|
||||
@@ -168,15 +168,6 @@ typedef NS_ENUM(NSUInteger, FLEXObjectReferenceSection) {
|
||||
}
|
||||
|
||||
+ (instancetype)objectsWithReferencesToObject:(id)object retained:(BOOL)retain {
|
||||
static Class SwiftObjectClass = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
SwiftObjectClass = NSClassFromString(@"SwiftObject");
|
||||
if (!SwiftObjectClass) {
|
||||
SwiftObjectClass = NSClassFromString(@"Swift._SwiftObject");
|
||||
}
|
||||
});
|
||||
|
||||
NSArray<FLEXObjectRef *> *instances = [FLEXHeapEnumerator
|
||||
objectsWithReferencesToObject:object retained:retain
|
||||
];
|
||||
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/CALayer+FLEX.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/FLEX-Categories.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/FLEX-Core.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/FLEX-ObjectExploring.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/FLEX-Runtime.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/FLEX.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/FLEXAlert.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/Reflection/FLEXBlockDescription.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Core/Views/Cells/FLEXCodeFontCell.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/ObjectExplorers/Sections/FLEXCollectionContentSection.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/ObjectExplorers/Sections/FLEXColorPreviewSection.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/ObjectExplorers/Sections/FLEXDefaultsContentSection.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Toolbar/FLEXExplorerToolbar.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Toolbar/FLEXExplorerToolbarItem.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Core/Controllers/FLEXFilteringTableViewController.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/Reflection/FLEXIvar.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Core/Views/Cells/FLEXKeyValueTableViewCell.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/FLEXMacros.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Manager/FLEXManager+Extensibility.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Manager/FLEXManager+Networking.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Manager/FLEXManager.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/ObjectExplorers/Sections/FLEXMetadataSection.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/Reflection/FLEXMethod.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Core/Views/Cells/FLEXMultilineTableViewCell.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/ObjectExplorers/Sections/FLEXMutableListSection.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Core/Controllers/FLEXNavigationController.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/FLEXObjcInternal.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/ObjectExplorers/FLEXObjectExplorer.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/ObjectExplorers/FLEXObjectExplorerFactory.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/ObjectExplorers/FLEXObjectExplorerViewController.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/ObjectExplorers/Sections/FLEXObjectInfoSection.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/Reflection/FLEXProperty.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/Reflection/FLEXProtocol.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/FLEXResources.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/FLEXRuntime+Compare.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/FLEXRuntime+UIKitHelpers.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/FLEXRuntimeConstants.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/FLEXRuntimeSafety.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcut.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsSection.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Core/FLEXSingleRowSection.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Core/Views/Cells/FLEXSubtitleTableViewCell.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/FLEXSwiftInternal.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Core/Views/FLEXTableView.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Core/Views/Cells/FLEXTableViewCell.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Core/Controllers/FLEXTableViewController.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Core/FLEXTableViewSection.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/NSArray+FLEX.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/NSObject+FLEX_Reflection.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/NSTimer+FLEX.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/NSUserDefaults+FLEX.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/UIBarButtonItem+FLEX.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/UIFont+FLEX.h
|
||||
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/UIGestureRecognizer+Blocks.h
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/UIMenu+FLEX.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/UIPasteboard+FLEX.h
|
||||
+1
@@ -0,0 +1 @@
|
||||
../../Classes/Utility/Categories/UITextField+Range.h
|
||||
@@ -0,0 +1,8 @@
|
||||
module FLEX {
|
||||
umbrella header "FLEX.h"
|
||||
|
||||
link "flex"
|
||||
|
||||
export *
|
||||
module * { export * }
|
||||
}
|
||||
@@ -71,3 +71,12 @@
|
||||
- (void)reloadClassHierarchy;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface FLEXObjectExplorer (Reflex)
|
||||
|
||||
/// Do not enable this property manually; Reflex will flip the switch when it is loaded.
|
||||
/// If you wish, you may \e disable it manually.
|
||||
@property (nonatomic, class) BOOL reflexAvailable;
|
||||
|
||||
@end
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
#import "FLEXPropertyAttributes.h"
|
||||
#import "FLEXMetadataSection.h"
|
||||
#import "NSUserDefaults+FLEX.h"
|
||||
#import "FLEXMirror.h"
|
||||
#import "FLEXSwiftInternal.h"
|
||||
|
||||
@implementation FLEXObjectExplorerDefaults
|
||||
|
||||
@@ -38,10 +40,18 @@
|
||||
NSMutableArray<FLEXStaticMetadata *> *_allImageNames;
|
||||
NSString *_objectDescription;
|
||||
}
|
||||
|
||||
@property (nonatomic, readonly) id<FLEXMirror> initialMirror;
|
||||
@end
|
||||
|
||||
@implementation FLEXObjectExplorer
|
||||
|
||||
+ (void)initialize {
|
||||
if (self == FLEXObjectExplorer.class) {
|
||||
FLEXObjectExplorer.reflexAvailable = NSClassFromString(@"FLEXSwiftMirror") != nil;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Initialization
|
||||
|
||||
+ (id)forObject:(id)objectOrClass {
|
||||
@@ -62,6 +72,25 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id<FLEXMirror>)initialMirror {
|
||||
static Class FLEXSwiftMirror = nil;
|
||||
|
||||
id obj = _object;
|
||||
|
||||
// Should we use Reflex?
|
||||
if (FLEXIsSwiftObjectOrClass(obj) && FLEXObjectExplorer.reflexAvailable) {
|
||||
// Initialize FLEXSwiftMirror class if needed
|
||||
if (!FLEXSwiftMirror) {
|
||||
FLEXSwiftMirror = NSClassFromString(@"FLEXSwiftMirror");
|
||||
}
|
||||
|
||||
return [(id<FLEXMirror>)[FLEXSwiftMirror alloc] initWithSubject:obj];
|
||||
}
|
||||
|
||||
// No; not swift object, or Reflex unavailable
|
||||
return [FLEXMirror reflect:obj];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Public
|
||||
|
||||
@@ -149,42 +178,43 @@
|
||||
Class superclass = nil;
|
||||
NSInteger count = self.classHierarchyClasses.count;
|
||||
NSInteger rootIdx = count - 1;
|
||||
id<FLEXMirror> mirror = self.initialMirror;
|
||||
for (NSInteger i = 0; i < count; i++) {
|
||||
Class cls = self.classHierarchyClasses[i];
|
||||
superclass = (i < rootIdx) ? self.classHierarchyClasses[i+1] : nil;
|
||||
|
||||
[allProperties addObject:[self
|
||||
metadataUniquedByName:[cls flex_allInstanceProperties]
|
||||
metadataUniquedByName:mirror.properties
|
||||
superclass:superclass
|
||||
kind:FLEXMetadataKindProperties
|
||||
skip:showMethodOverrides
|
||||
]];
|
||||
[allClassProps addObject:[self
|
||||
metadataUniquedByName:[cls flex_allClassProperties]
|
||||
metadataUniquedByName:mirror.classProperties
|
||||
superclass:superclass
|
||||
kind:FLEXMetadataKindClassProperties
|
||||
skip:showMethodOverrides
|
||||
]];
|
||||
[_allIvars addObject:[self
|
||||
metadataUniquedByName:[cls flex_allIvars]
|
||||
metadataUniquedByName:mirror.ivars
|
||||
superclass:nil
|
||||
kind:FLEXMetadataKindIvars
|
||||
skip:NO
|
||||
]];
|
||||
[allMethods addObject:[self
|
||||
metadataUniquedByName:[cls flex_allInstanceMethods]
|
||||
metadataUniquedByName:mirror.methods
|
||||
superclass:superclass
|
||||
kind:FLEXMetadataKindMethods
|
||||
skip:showMethodOverrides
|
||||
]];
|
||||
[allClassMethods addObject:[self
|
||||
metadataUniquedByName:[cls flex_allClassMethods]
|
||||
metadataUniquedByName:mirror.classMethods
|
||||
superclass:superclass
|
||||
kind:FLEXMetadataKindClassMethods
|
||||
skip:showMethodOverrides
|
||||
]];
|
||||
[_allConformedProtocols addObject:[self
|
||||
metadataUniquedByName:[cls flex_protocols]
|
||||
metadataUniquedByName:mirror.protocols
|
||||
superclass:superclass
|
||||
kind:FLEXMetadataKindProtocols
|
||||
skip:NO
|
||||
@@ -376,3 +406,13 @@
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
#pragma mark - Reflex
|
||||
@implementation FLEXObjectExplorer (Reflex)
|
||||
static BOOL _reflexAvailable = NO;
|
||||
|
||||
+ (BOOL)reflexAvailable { return _reflexAvailable; }
|
||||
+ (void)setReflexAvailable:(BOOL)enable { _reflexAvailable = enable; }
|
||||
|
||||
@end
|
||||
|
||||
@@ -145,15 +145,6 @@ static kern_return_t reader(__unused task_t remote_task, vm_address_t remote_add
|
||||
}
|
||||
|
||||
+ (NSArray<FLEXObjectRef *> *)objectsWithReferencesToObject:(id)object retained:(BOOL)retain {
|
||||
static Class SwiftObjectClass = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
SwiftObjectClass = NSClassFromString(@"SwiftObject");
|
||||
if (!SwiftObjectClass) {
|
||||
SwiftObjectClass = NSClassFromString(@"Swift._SwiftObject");
|
||||
}
|
||||
});
|
||||
|
||||
NSMutableArray<FLEXObjectRef *> *instances = [NSMutableArray new];
|
||||
[FLEXHeapEnumerator enumerateLiveObjectsUsingBlock:^(__unsafe_unretained id tryObject, __unsafe_unretained Class actualClass) {
|
||||
// Skip known-invalid objects
|
||||
|
||||
@@ -9,10 +9,13 @@
|
||||
#ifndef FLEXMacros_h
|
||||
#define FLEXMacros_h
|
||||
|
||||
|
||||
#define flex_keywordify class NSObject;
|
||||
#define ctor flex_keywordify __attribute__((constructor)) void __flex_ctor_##__LINE__()
|
||||
#define dtor flex_keywordify __attribute__((destructor)) void __flex_dtor_##__LINE__()
|
||||
|
||||
#ifndef strongify
|
||||
|
||||
#define weakify(var) __weak __typeof(var) __weak__##var = var;
|
||||
|
||||
#define strongify(var) \
|
||||
@@ -21,6 +24,8 @@ _Pragma("clang diagnostic ignored \"-Wshadow\"") \
|
||||
__strong typeof(var) var = __weak__##var; \
|
||||
_Pragma("clang diagnostic pop")
|
||||
|
||||
#endif
|
||||
|
||||
// A macro to check if we are running in a test environment
|
||||
#define FLEX_IS_TESTING() (NSClassFromString(@"XCTest") != nil)
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
//
|
||||
// FLEXSwiftInternal.h
|
||||
// FLEX
|
||||
//
|
||||
// Created by Tanner Bennett on 10/28/21.
|
||||
// Copyright © 2021 Flipboard. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
BOOL FLEXIsSwiftObjectOrClass(id objOrClass);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,92 @@
|
||||
//
|
||||
// FLEXSwiftInternal.m
|
||||
// FLEX
|
||||
//
|
||||
// Created by Tanner Bennett on 10/28/21.
|
||||
// Copyright © 2021 Flipboard. All rights reserved.
|
||||
//
|
||||
|
||||
#import "FLEXSwiftInternal.h"
|
||||
#import <objc/runtime.h>
|
||||
#include <atomic>
|
||||
|
||||
// class is a Swift class from the pre-stable Swift ABI
|
||||
#define FAST_IS_SWIFT_LEGACY (1UL<<0)
|
||||
// class is a Swift class from the stable Swift ABI
|
||||
#define FAST_IS_SWIFT_STABLE (1UL<<1)
|
||||
// data pointer
|
||||
#define FAST_DATA_MASK 0xfffffffcUL
|
||||
|
||||
typedef uintptr_t class_data_bits_t;
|
||||
#if __LP64__
|
||||
typedef uint32_t mask_t; // x86_64 & arm64 asm are less efficient with 16-bits
|
||||
#else
|
||||
typedef uint16_t mask_t;
|
||||
#endif
|
||||
|
||||
/* dyld_shared_cache_builder and obj-C agree on these definitions */
|
||||
struct preopt_cache_entry_t {
|
||||
uint32_t sel_offs;
|
||||
uint32_t imp_offs;
|
||||
};
|
||||
|
||||
/* dyld_shared_cache_builder and obj-C agree on these definitions */
|
||||
struct preopt_cache_t {
|
||||
int32_t fallback_class_offset;
|
||||
union {
|
||||
struct {
|
||||
uint16_t shift : 5;
|
||||
uint16_t mask : 11;
|
||||
};
|
||||
uint16_t hash_params;
|
||||
};
|
||||
uint16_t occupied : 14;
|
||||
uint16_t has_inlines : 1;
|
||||
uint16_t bit_one : 1;
|
||||
preopt_cache_entry_t entries[];
|
||||
};
|
||||
|
||||
union isa_t {
|
||||
uintptr_t bits;
|
||||
// Accessing the class requires custom ptrauth operations
|
||||
Class cls;
|
||||
};
|
||||
|
||||
struct cache_t {
|
||||
std::atomic<uintptr_t> _bucketsAndMaybeMask;
|
||||
union {
|
||||
struct {
|
||||
std::atomic<mask_t> _maybeMask;
|
||||
#if __LP64__
|
||||
uint16_t _flags;
|
||||
#endif
|
||||
uint16_t _occupied;
|
||||
};
|
||||
std::atomic<preopt_cache_t *> _originalPreoptCache;
|
||||
};
|
||||
};
|
||||
|
||||
struct objc_object_ {
|
||||
union isa_t isa;
|
||||
};
|
||||
|
||||
struct objc_class_ : objc_object_ {
|
||||
Class superclass;
|
||||
cache_t cache; // formerly cache pointer and vtable
|
||||
class_data_bits_t bits;
|
||||
};
|
||||
|
||||
extern "C" BOOL FLEXIsSwiftObjectOrClass(id objOrClass) {
|
||||
Class cls = objOrClass;
|
||||
if (!object_isClass(objOrClass)) {
|
||||
cls = object_getClass(objOrClass);
|
||||
}
|
||||
|
||||
class_data_bits_t rodata = ((__bridge objc_class_ *)(cls))->bits;
|
||||
|
||||
if (@available(macOS 10.14.4, iOS 12.2, tvOS 12.2, watchOS 5.2, *)) {
|
||||
return rodata & FAST_IS_SWIFT_STABLE;
|
||||
} else {
|
||||
return rodata & FAST_IS_SWIFT_LEGACY;
|
||||
}
|
||||
}
|
||||
@@ -18,21 +18,28 @@ NS_SWIFT_NAME(FLEXMirrorProtocol)
|
||||
@protocol FLEXMirror <NSObject>
|
||||
|
||||
/// Swift initializer
|
||||
/// @throws If a metaclass object is passed in.
|
||||
- (instancetype)initWithSubject:(id)objectOrClass NS_SWIFT_NAME(init(reflecting:));
|
||||
|
||||
/// The underlying object or \c Class used to create this \c FLEXMirror instance.
|
||||
/// The underlying object or \c Class used to create this \c FLEXMirror.
|
||||
@property (nonatomic, readonly) id value;
|
||||
/// Whether the reflected thing was a class or a class instance.
|
||||
/// Whether \c value was a class or a class instance.
|
||||
@property (nonatomic, readonly) BOOL isClass;
|
||||
/// The name of the \c Class of the \c value property.
|
||||
@property (nonatomic, readonly) NSString *className;
|
||||
|
||||
@property (nonatomic, readonly) NSArray<FLEXProperty *> *properties;
|
||||
@property (nonatomic, readonly) NSArray<FLEXProperty *> *classProperties;
|
||||
@property (nonatomic, readonly) NSArray<FLEXIvar *> *ivars;
|
||||
@property (nonatomic, readonly) NSArray<FLEXMethod *> *methods;
|
||||
@property (nonatomic, readonly) NSArray<FLEXMethod *> *classMethods;
|
||||
@property (nonatomic, readonly) NSArray<FLEXProtocol *> *protocols;
|
||||
|
||||
/// @return A reflection of \c value.superClass.
|
||||
/// Super mirrors are initialized with the class that corresponds to the value passed in.
|
||||
/// If you passed in an instance of a class, it's superclass is used to create this mirror.
|
||||
/// If you passed in a class, then that class's superclass is used.
|
||||
///
|
||||
/// @note This property should be computed, not cached.
|
||||
@property (nonatomic, readonly, nullable) id<FLEXMirror> superMirror NS_SWIFT_NAME(superMirror);
|
||||
|
||||
@end
|
||||
@@ -45,11 +52,12 @@ NS_SWIFT_NAME(FLEXMirrorProtocol)
|
||||
/// \c NSObject categories provided if your code will only use a few pieces of information,
|
||||
/// or if your code needs to run faster.
|
||||
///
|
||||
/// If you reflect an instance of a class then \c methods and \c properties will be populated
|
||||
/// with instance methods and properties. If you reflect a class itself, then \c methods
|
||||
/// and \c properties will be populated with class methods and properties as you'd expect.
|
||||
/// Regardless of whether you reflect an instance or a class object, \c methods and \c properties
|
||||
/// will be populated with instance methods and properties, and \c classMethods and \c classProperties
|
||||
/// will be populated with class methods and properties.
|
||||
///
|
||||
/// @param objectOrClass An instance of an objct or a \c Class object.
|
||||
/// @throws If a metaclass object is passed in.
|
||||
/// @return An instance of \c FLEXMirror.
|
||||
+ (instancetype)reflect:(id)objectOrClass;
|
||||
|
||||
@@ -58,8 +66,10 @@ NS_SWIFT_NAME(FLEXMirrorProtocol)
|
||||
@property (nonatomic, readonly) NSString *className;
|
||||
|
||||
@property (nonatomic, readonly) NSArray<FLEXProperty *> *properties;
|
||||
@property (nonatomic, readonly) NSArray<FLEXProperty *> *classProperties;
|
||||
@property (nonatomic, readonly) NSArray<FLEXIvar *> *ivars;
|
||||
@property (nonatomic, readonly) NSArray<FLEXMethod *> *methods;
|
||||
@property (nonatomic, readonly) NSArray<FLEXMethod *> *classMethods;
|
||||
@property (nonatomic, readonly) NSArray<FLEXProtocol *> *protocols;
|
||||
|
||||
@property (nonatomic, readonly, nullable) FLEXMirror *superMirror NS_SWIFT_NAME(superMirror);
|
||||
@@ -69,10 +79,14 @@ NS_SWIFT_NAME(FLEXMirrorProtocol)
|
||||
|
||||
@interface FLEXMirror (ExtendedMirror)
|
||||
|
||||
/// @return The method with the given name, or \c nil if one does not exist.
|
||||
/// @return The instance method with the given name, or \c nil if one does not exist.
|
||||
- (nullable FLEXMethod *)methodNamed:(nullable NSString *)name;
|
||||
/// @return The property with the given name, or \c nil if one does not exist.
|
||||
/// @return The class method with the given name, or \c nil if one does not exist.
|
||||
- (nullable FLEXMethod *)classMethodNamed:(nullable NSString *)name;
|
||||
/// @return The instance property with the given name, or \c nil if one does not exist.
|
||||
- (nullable FLEXProperty *)propertyNamed:(nullable NSString *)name;
|
||||
/// @return The class property with the given name, or \c nil if one does not exist.
|
||||
- (nullable FLEXProperty *)classPropertyNamed:(nullable NSString *)name;
|
||||
/// @return The instance variable with the given name, or \c nil if one does not exist.
|
||||
- (nullable FLEXIvar *)ivarNamed:(nullable NSString *)name;
|
||||
/// @return The protocol with the given name, or \c nil if one does not exist.
|
||||
|
||||
@@ -45,64 +45,65 @@
|
||||
}
|
||||
|
||||
- (NSString *)description {
|
||||
NSString *type = self.isClass ? @"metaclass" : @"class";
|
||||
return [NSString
|
||||
stringWithFormat:@"<%@ %@=%@, %lu properties, %lu ivars, %lu methods, %lu protocols>",
|
||||
return [NSString stringWithFormat:@"<%@ %@=%@>",
|
||||
NSStringFromClass(self.class),
|
||||
type,
|
||||
self.className,
|
||||
(unsigned long)self.properties.count,
|
||||
(unsigned long)self.ivars.count,
|
||||
(unsigned long)self.methods.count,
|
||||
(unsigned long)self.protocols.count
|
||||
self.isClass ? @"metaclass" : @"class",
|
||||
self.className
|
||||
];
|
||||
}
|
||||
|
||||
- (void)examine {
|
||||
// cls is a metaclass if self.value is a class
|
||||
Class cls = object_getClass(self.value);
|
||||
|
||||
unsigned int pcount, mcount, ivcount, pccount;
|
||||
objc_property_t *objcproperties = class_copyPropertyList(cls, &pcount);
|
||||
Protocol*__unsafe_unretained *procs = class_copyProtocolList(cls, &pccount);
|
||||
Method *objcmethods = class_copyMethodList(cls, &mcount);
|
||||
Ivar *objcivars = class_copyIvarList(cls, &ivcount);
|
||||
|
||||
BOOL isClass = object_isClass(self.value);
|
||||
Class cls = isClass ? self.value : object_getClass(self.value);
|
||||
Class meta = object_getClass(cls);
|
||||
_className = NSStringFromClass(cls);
|
||||
_isClass = class_isMetaClass(cls); // or object_isClass(self.value)
|
||||
_isClass = isClass;
|
||||
|
||||
NSMutableArray *properties = [NSMutableArray new];
|
||||
for (int i = 0; i < pcount; i++)
|
||||
[properties addObject:[FLEXProperty property:objcproperties[i]]];
|
||||
_properties = properties;
|
||||
unsigned int pcount, cpcount, mcount, cmcount, ivcount, pccount;
|
||||
Ivar *objcIvars = class_copyIvarList(cls, &ivcount);
|
||||
Method *objcMethods = class_copyMethodList(cls, &mcount);
|
||||
Method *objcClsMethods = class_copyMethodList(meta, &cmcount);
|
||||
objc_property_t *objcProperties = class_copyPropertyList(cls, &pcount);
|
||||
objc_property_t *objcClsProperties = class_copyPropertyList(meta, &cpcount);
|
||||
Protocol *__unsafe_unretained *protos = class_copyProtocolList(cls, &pccount);
|
||||
|
||||
NSMutableArray *methods = [NSMutableArray new];
|
||||
for (int i = 0; i < mcount; i++)
|
||||
[methods addObject:[FLEXMethod method:objcmethods[i]]];
|
||||
_methods = methods;
|
||||
_ivars = [NSArray flex_forEachUpTo:ivcount map:^id(NSUInteger i) {
|
||||
return [FLEXIvar ivar:objcIvars[i]];
|
||||
}];
|
||||
|
||||
NSMutableArray *ivars = [NSMutableArray new];
|
||||
for (int i = 0; i < ivcount; i++)
|
||||
[ivars addObject:[FLEXIvar ivar:objcivars[i]]];
|
||||
_ivars = ivars;
|
||||
_methods = [NSArray flex_forEachUpTo:mcount map:^id(NSUInteger i) {
|
||||
return [FLEXMethod method:objcMethods[i] isInstanceMethod:YES];
|
||||
}];
|
||||
_classMethods = [NSArray flex_forEachUpTo:cmcount map:^id(NSUInteger i) {
|
||||
return [FLEXMethod method:objcClsMethods[i] isInstanceMethod:NO];
|
||||
}];
|
||||
|
||||
NSMutableArray *protocols = [NSMutableArray new];
|
||||
for (int i = 0; i < pccount; i++)
|
||||
[protocols addObject:[FLEXProtocol protocol:procs[i]]];
|
||||
_protocols = protocols;
|
||||
_properties = [NSArray flex_forEachUpTo:pcount map:^id(NSUInteger i) {
|
||||
return [FLEXProperty property:objcProperties[i] onClass:cls];
|
||||
}];
|
||||
_classProperties = [NSArray flex_forEachUpTo:cpcount map:^id(NSUInteger i) {
|
||||
return [FLEXProperty property:objcClsProperties[i] onClass:meta];
|
||||
}];
|
||||
|
||||
_protocols = [NSArray flex_forEachUpTo:pccount map:^id(NSUInteger i) {
|
||||
return [FLEXProtocol protocol:protos[i]];
|
||||
}];
|
||||
|
||||
// Cleanup
|
||||
free(objcproperties);
|
||||
free(objcmethods);
|
||||
free(objcivars);
|
||||
free(procs);
|
||||
procs = NULL;
|
||||
free(objcClsProperties);
|
||||
free(objcProperties);
|
||||
free(objcClsMethods);
|
||||
free(objcMethods);
|
||||
free(objcIvars);
|
||||
free(protos);
|
||||
protos = NULL;
|
||||
}
|
||||
|
||||
#pragma mark Misc
|
||||
|
||||
- (FLEXMirror *)superMirror {
|
||||
return [FLEXMirror reflect:[self.value superclass]];
|
||||
Class cls = _isClass ? _value : object_getClass(_value);
|
||||
return [FLEXMirror reflect:class_getSuperclass(cls)];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -121,10 +122,18 @@
|
||||
return [self filter:self.methods forName:name];
|
||||
}
|
||||
|
||||
- (FLEXMethod *)classMethodNamed:(NSString *)name {
|
||||
return [self filter:self.classMethods forName:name];
|
||||
}
|
||||
|
||||
- (FLEXProperty *)propertyNamed:(NSString *)name {
|
||||
return [self filter:self.properties forName:name];
|
||||
}
|
||||
|
||||
- (FLEXProperty *)classPropertyNamed:(NSString *)name {
|
||||
return [self filter:self.classProperties forName:name];
|
||||
}
|
||||
|
||||
- (FLEXIvar *)ivarNamed:(NSString *)name {
|
||||
return [self filter:self.ivars forName:name];
|
||||
}
|
||||
|
||||
+15
-14
@@ -7,6 +7,7 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
A9D70EC640E633FE829EF695 /* libPods-FLEXample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BBD699DDBAC5A16D8CFD39AC /* libPods-FLEXample.a */; };
|
||||
C386D6D02419975A00699085 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C386D6CF2419975A00699085 /* AppDelegate.swift */; };
|
||||
C386D6D22419975A00699085 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C386D6D12419975A00699085 /* SceneDelegate.swift */; };
|
||||
C386D6D62419975B00699085 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C386D6D52419975B00699085 /* Assets.xcassets */; };
|
||||
@@ -24,13 +25,12 @@
|
||||
C3A67856241AB8AD005A4681 /* MiscNetworkRequests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A67855241AB8AD005A4681 /* MiscNetworkRequests.m */; };
|
||||
C3A67858241ADDF7005A4681 /* Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3A67857241ADDF7005A4681 /* Commit.swift */; };
|
||||
C3B3760025B8CDA300AD43AB /* Person.m in Sources */ = {isa = PBXBuildFile; fileRef = C3B375FF25B8CDA300AD43AB /* Person.m */; };
|
||||
E211705F801A8167D308F94A /* libPods-FLEXample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BBD699DDBAC5A16D8CFD39AC /* libPods-FLEXample.a */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
33A4EDAC37AA215CF95EEA24 /* Pods-FLEXample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FLEXample.release.xcconfig"; path = "Target Support Files/Pods-FLEXample/Pods-FLEXample.release.xcconfig"; sourceTree = "<group>"; };
|
||||
57041F764D8B1C098B9B4073 /* Pods-FLEXample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FLEXample.debug.xcconfig"; path = "Target Support Files/Pods-FLEXample/Pods-FLEXample.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
92E1E1EECA3F2533E1B8BF35 /* Pods-FLEXample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FLEXample.debug.xcconfig"; path = "Target Support Files/Pods-FLEXample/Pods-FLEXample.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
BBD699DDBAC5A16D8CFD39AC /* libPods-FLEXample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FLEXample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
BE1780244AEC542DDB894B08 /* Pods-FLEXample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FLEXample.release.xcconfig"; path = "Target Support Files/Pods-FLEXample/Pods-FLEXample.release.xcconfig"; sourceTree = "<group>"; };
|
||||
C386D6CC2419975A00699085 /* FLEXample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FLEXample.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
C386D6CF2419975A00699085 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
C386D6D12419975A00699085 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
||||
@@ -64,7 +64,7 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E211705F801A8167D308F94A /* libPods-FLEXample.a in Frameworks */,
|
||||
A9D70EC640E633FE829EF695 /* libPods-FLEXample.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -77,8 +77,8 @@
|
||||
C386D6CE2419975A00699085 /* FLEXample */,
|
||||
C3A67853241AB88F005A4681 /* Realm */,
|
||||
C386D6CD2419975A00699085 /* Products */,
|
||||
E367791A4E4085CCB945F0F8 /* Pods */,
|
||||
DCEB5037DA3D5C01CB9CEE93 /* Frameworks */,
|
||||
EB0852B7D285AB31D7532049 /* Pods */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
@@ -169,12 +169,13 @@
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E367791A4E4085CCB945F0F8 /* Pods */ = {
|
||||
EB0852B7D285AB31D7532049 /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
57041F764D8B1C098B9B4073 /* Pods-FLEXample.debug.xcconfig */,
|
||||
33A4EDAC37AA215CF95EEA24 /* Pods-FLEXample.release.xcconfig */,
|
||||
92E1E1EECA3F2533E1B8BF35 /* Pods-FLEXample.debug.xcconfig */,
|
||||
BE1780244AEC542DDB894B08 /* Pods-FLEXample.release.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
path = Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
@@ -185,7 +186,7 @@
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = C386D6E02419975B00699085 /* Build configuration list for PBXNativeTarget "FLEXample" */;
|
||||
buildPhases = (
|
||||
E25E87A42AA269B0CF1830D1 /* [CP] Check Pods Manifest.lock */,
|
||||
FC7B42D14DC20FF97D095393 /* [CP] Check Pods Manifest.lock */,
|
||||
C386D6C82419975A00699085 /* Sources */,
|
||||
C386D6C92419975A00699085 /* Frameworks */,
|
||||
C386D6CA2419975A00699085 /* Resources */,
|
||||
@@ -215,7 +216,7 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = C386D6C72419975A00699085 /* Build configuration list for PBXProject "FLEXample" */;
|
||||
buildConfigurationList = C386D6C72419975A00699085 /* Build configuration list for PBXProject "FLEXample-Cocoapods" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
@@ -253,7 +254,7 @@
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
E25E87A42AA269B0CF1830D1 /* [CP] Check Pods Manifest.lock */ = {
|
||||
FC7B42D14DC20FF97D095393 /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
@@ -425,7 +426,7 @@
|
||||
};
|
||||
C386D6E12419975B00699085 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 57041F764D8B1C098B9B4073 /* Pods-FLEXample.debug.xcconfig */;
|
||||
baseConfigurationReference = 92E1E1EECA3F2533E1B8BF35 /* Pods-FLEXample.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
@@ -450,7 +451,7 @@
|
||||
};
|
||||
C386D6E22419975B00699085 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 33A4EDAC37AA215CF95EEA24 /* Pods-FLEXample.release.xcconfig */;
|
||||
baseConfigurationReference = BE1780244AEC542DDB894B08 /* Pods-FLEXample.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
@@ -475,7 +476,7 @@
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
C386D6C72419975A00699085 /* Build configuration list for PBXProject "FLEXample" */ = {
|
||||
C386D6C72419975A00699085 /* Build configuration list for PBXProject "FLEXample-Cocoapods" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
C386D6DE2419975B00699085 /* Debug */,
|
||||
@@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1240"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "C386D6CB2419975A00699085"
|
||||
BuildableName = "FLEXample.app"
|
||||
BlueprintName = "FLEXample"
|
||||
ReferencedContainer = "container:FLEXample-Cocoapods.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "C386D6CB2419975A00699085"
|
||||
BuildableName = "FLEXample.app"
|
||||
BlueprintName = "FLEXample"
|
||||
ReferencedContainer = "container:FLEXample-Cocoapods.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "C386D6CB2419975A00699085"
|
||||
BuildableName = "FLEXample.app"
|
||||
BlueprintName = "FLEXample"
|
||||
ReferencedContainer = "container:FLEXample-Cocoapods.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,484 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 52;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
C386D6D02419975A00699085 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C386D6CF2419975A00699085 /* AppDelegate.swift */; };
|
||||
C386D6D22419975A00699085 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C386D6D12419975A00699085 /* SceneDelegate.swift */; };
|
||||
C386D6D62419975B00699085 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C386D6D52419975B00699085 /* Assets.xcassets */; };
|
||||
C386D6D92419975B00699085 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C386D6D82419975B00699085 /* Preview Assets.xcassets */; };
|
||||
C386D6DC2419975B00699085 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C386D6DA2419975B00699085 /* LaunchScreen.storyboard */; };
|
||||
C386D6E62419984700699085 /* CommitListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C386D6E52419984700699085 /* CommitListViewController.m */; };
|
||||
C386D6FD241AA4B700699085 /* image.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = C386D6F8241AA4B700699085 /* image.jpeg */; };
|
||||
C386D6FE241AA4B700699085 /* image in Resources */ = {isa = PBXBuildFile; fileRef = C386D6F9241AA4B700699085 /* image */; };
|
||||
C386D6FF241AA4B700699085 /* image.png in Resources */ = {isa = PBXBuildFile; fileRef = C386D6FA241AA4B700699085 /* image.png */; };
|
||||
C386D701241AA4B700699085 /* image.jpg in Resources */ = {isa = PBXBuildFile; fileRef = C386D6FC241AA4B700699085 /* image.jpg */; };
|
||||
C386D704241AA61600699085 /* music_library.db in Resources */ = {isa = PBXBuildFile; fileRef = C386D702241AA61600699085 /* music_library.db */; };
|
||||
C386D705241AA61600699085 /* music_library_schema.jpg in Resources */ = {isa = PBXBuildFile; fileRef = C386D703241AA61600699085 /* music_library_schema.jpg */; };
|
||||
C386D70B241AA67800699085 /* Dog.m in Sources */ = {isa = PBXBuildFile; fileRef = C386D709241AA67800699085 /* Dog.m */; };
|
||||
C386D70C241AA67800699085 /* Owner.m in Sources */ = {isa = PBXBuildFile; fileRef = C386D70A241AA67800699085 /* Owner.m */; };
|
||||
C3A67856241AB8AD005A4681 /* MiscNetworkRequests.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A67855241AB8AD005A4681 /* MiscNetworkRequests.m */; };
|
||||
C3A67858241ADDF7005A4681 /* Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3A67857241ADDF7005A4681 /* Commit.swift */; };
|
||||
C3B3760025B8CDA300AD43AB /* Person.m in Sources */ = {isa = PBXBuildFile; fileRef = C3B375FF25B8CDA300AD43AB /* Person.m */; };
|
||||
C3F86CD72740ED2600E094BF /* Reflex in Frameworks */ = {isa = PBXBuildFile; productRef = C3F86CD62740ED2600E094BF /* Reflex */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
BBD699DDBAC5A16D8CFD39AC /* libPods-FLEXample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FLEXample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
C386D6CC2419975A00699085 /* FLEXample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FLEXample.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
C386D6CF2419975A00699085 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
C386D6D12419975A00699085 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
||||
C386D6D52419975B00699085 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
C386D6D82419975B00699085 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
|
||||
C386D6DB2419975B00699085 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
C386D6DD2419975B00699085 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
C386D6E32419984700699085 /* FLEXample-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FLEXample-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
C386D6E42419984700699085 /* CommitListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CommitListViewController.h; sourceTree = "<group>"; };
|
||||
C386D6E52419984700699085 /* CommitListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CommitListViewController.m; sourceTree = "<group>"; };
|
||||
C386D6F8241AA4B700699085 /* image.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = image.jpeg; sourceTree = "<group>"; };
|
||||
C386D6F9241AA4B700699085 /* image */ = {isa = PBXFileReference; lastKnownFileType = file; path = image; sourceTree = "<group>"; };
|
||||
C386D6FA241AA4B700699085 /* image.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = image.png; sourceTree = "<group>"; };
|
||||
C386D6FC241AA4B700699085 /* image.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = image.jpg; sourceTree = "<group>"; };
|
||||
C386D702241AA61600699085 /* music_library.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = music_library.db; sourceTree = "<group>"; };
|
||||
C386D703241AA61600699085 /* music_library_schema.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = music_library_schema.jpg; sourceTree = "<group>"; };
|
||||
C386D706241AA66100699085 /* dogs.realm */ = {isa = PBXFileReference; lastKnownFileType = file; path = dogs.realm; sourceTree = "<group>"; };
|
||||
C386D707241AA67800699085 /* Dog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Dog.h; sourceTree = "<group>"; };
|
||||
C386D708241AA67800699085 /* Owner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Owner.h; sourceTree = "<group>"; };
|
||||
C386D709241AA67800699085 /* Dog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Dog.m; sourceTree = "<group>"; };
|
||||
C386D70A241AA67800699085 /* Owner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Owner.m; sourceTree = "<group>"; };
|
||||
C3A67854241AB8AD005A4681 /* MiscNetworkRequests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MiscNetworkRequests.h; sourceTree = "<group>"; };
|
||||
C3A67855241AB8AD005A4681 /* MiscNetworkRequests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MiscNetworkRequests.m; sourceTree = "<group>"; };
|
||||
C3A67857241ADDF7005A4681 /* Commit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Commit.swift; sourceTree = "<group>"; };
|
||||
C3B375FE25B8CDA300AD43AB /* Person.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Person.h; sourceTree = "<group>"; };
|
||||
C3B375FF25B8CDA300AD43AB /* Person.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Person.m; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
C386D6C92419975A00699085 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
C3F86CD72740ED2600E094BF /* Reflex in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
C386D6C32419975A00699085 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C386D6CE2419975A00699085 /* FLEXample */,
|
||||
C3A67853241AB88F005A4681 /* Realm */,
|
||||
C386D6CD2419975A00699085 /* Products */,
|
||||
DCEB5037DA3D5C01CB9CEE93 /* Frameworks */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C386D6CD2419975A00699085 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C386D6CC2419975A00699085 /* FLEXample.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C386D6CE2419975A00699085 /* FLEXample */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C386D6E72419985E00699085 /* Supporting Files */,
|
||||
C386D6CF2419975A00699085 /* AppDelegate.swift */,
|
||||
C386D6D12419975A00699085 /* SceneDelegate.swift */,
|
||||
C3A67854241AB8AD005A4681 /* MiscNetworkRequests.h */,
|
||||
C3A67855241AB8AD005A4681 /* MiscNetworkRequests.m */,
|
||||
C3A67852241AB86D005A4681 /* App */,
|
||||
);
|
||||
path = FLEXample;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C386D6D72419975B00699085 /* Preview Content */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C386D6D82419975B00699085 /* Preview Assets.xcassets */,
|
||||
);
|
||||
path = "Preview Content";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C386D6E72419985E00699085 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C386D6D52419975B00699085 /* Assets.xcassets */,
|
||||
C386D6D72419975B00699085 /* Preview Content */,
|
||||
C386D6F7241AA4AA00699085 /* Bundle */,
|
||||
C386D6DA2419975B00699085 /* LaunchScreen.storyboard */,
|
||||
C386D6DD2419975B00699085 /* Info.plist */,
|
||||
C386D6E32419984700699085 /* FLEXample-Bridging-Header.h */,
|
||||
);
|
||||
path = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C386D6F7241AA4AA00699085 /* Bundle */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C386D702241AA61600699085 /* music_library.db */,
|
||||
C386D703241AA61600699085 /* music_library_schema.jpg */,
|
||||
C386D706241AA66100699085 /* dogs.realm */,
|
||||
C386D6F9241AA4B700699085 /* image */,
|
||||
C386D6F8241AA4B700699085 /* image.jpeg */,
|
||||
C386D6FC241AA4B700699085 /* image.jpg */,
|
||||
C386D6FA241AA4B700699085 /* image.png */,
|
||||
);
|
||||
path = Bundle;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C3A67852241AB86D005A4681 /* App */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C3B375FE25B8CDA300AD43AB /* Person.h */,
|
||||
C3B375FF25B8CDA300AD43AB /* Person.m */,
|
||||
C3A67857241ADDF7005A4681 /* Commit.swift */,
|
||||
C386D6E42419984700699085 /* CommitListViewController.h */,
|
||||
C386D6E52419984700699085 /* CommitListViewController.m */,
|
||||
);
|
||||
path = App;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C3A67853241AB88F005A4681 /* Realm */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C386D707241AA67800699085 /* Dog.h */,
|
||||
C386D709241AA67800699085 /* Dog.m */,
|
||||
C386D708241AA67800699085 /* Owner.h */,
|
||||
C386D70A241AA67800699085 /* Owner.m */,
|
||||
);
|
||||
path = Realm;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
DCEB5037DA3D5C01CB9CEE93 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
BBD699DDBAC5A16D8CFD39AC /* libPods-FLEXample.a */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
C386D6CB2419975A00699085 /* FLEXample */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = C386D6E02419975B00699085 /* Build configuration list for PBXNativeTarget "FLEXample" */;
|
||||
buildPhases = (
|
||||
C386D6C82419975A00699085 /* Sources */,
|
||||
C386D6C92419975A00699085 /* Frameworks */,
|
||||
C386D6CA2419975A00699085 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = FLEXample;
|
||||
packageProductDependencies = (
|
||||
C3F86CD62740ED2600E094BF /* Reflex */,
|
||||
);
|
||||
productName = FLEXample;
|
||||
productReference = C386D6CC2419975A00699085 /* FLEXample.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
C386D6C42419975A00699085 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 1130;
|
||||
LastUpgradeCheck = 1200;
|
||||
ORGANIZATIONNAME = Flipboard;
|
||||
TargetAttributes = {
|
||||
C386D6CB2419975A00699085 = {
|
||||
CreatedOnToolsVersion = 11.3.1;
|
||||
LastSwiftMigration = 1130;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = C386D6C72419975A00699085 /* Build configuration list for PBXProject "FLEXample-SPM" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = C386D6C32419975A00699085;
|
||||
packageReferences = (
|
||||
C3F86CD52740ED2600E094BF /* XCRemoteSwiftPackageReference "Reflex" */,
|
||||
);
|
||||
productRefGroup = C386D6CD2419975A00699085 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
C386D6CB2419975A00699085 /* FLEXample */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
C386D6CA2419975A00699085 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
C386D6DC2419975B00699085 /* LaunchScreen.storyboard in Resources */,
|
||||
C386D6FF241AA4B700699085 /* image.png in Resources */,
|
||||
C386D704241AA61600699085 /* music_library.db in Resources */,
|
||||
C386D6FE241AA4B700699085 /* image in Resources */,
|
||||
C386D6FD241AA4B700699085 /* image.jpeg in Resources */,
|
||||
C386D701241AA4B700699085 /* image.jpg in Resources */,
|
||||
C386D6D92419975B00699085 /* Preview Assets.xcassets in Resources */,
|
||||
C386D6D62419975B00699085 /* Assets.xcassets in Resources */,
|
||||
C386D705241AA61600699085 /* music_library_schema.jpg in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
C386D6C82419975A00699085 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
C3A67858241ADDF7005A4681 /* Commit.swift in Sources */,
|
||||
C386D6D02419975A00699085 /* AppDelegate.swift in Sources */,
|
||||
C3B3760025B8CDA300AD43AB /* Person.m in Sources */,
|
||||
C386D6E62419984700699085 /* CommitListViewController.m in Sources */,
|
||||
C386D70B241AA67800699085 /* Dog.m in Sources */,
|
||||
C3A67856241AB8AD005A4681 /* MiscNetworkRequests.m in Sources */,
|
||||
C386D70C241AA67800699085 /* Owner.m in Sources */,
|
||||
C386D6D22419975A00699085 /* SceneDelegate.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
C386D6DA2419975B00699085 /* LaunchScreen.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
C386D6DB2419975B00699085 /* Base */,
|
||||
);
|
||||
name = LaunchScreen.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
C386D6DE2419975B00699085 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = NO;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
C386D6DF2419975B00699085 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = NO;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
C386D6E12419975B00699085 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_ASSET_PATHS = "\"FLEXample/Supporting Files/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = S6N2F22V2Z;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
INFOPLIST_FILE = "FLEXample/Supporting Files/Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.flipboard.flex.FLEXample;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "FLEXample/Supporting Files/FLEXample-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
C386D6E22419975B00699085 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_ASSET_PATHS = "\"FLEXample/Supporting Files/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = S6N2F22V2Z;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
INFOPLIST_FILE = "FLEXample/Supporting Files/Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.flipboard.flex.FLEXample;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "FLEXample/Supporting Files/FLEXample-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
C386D6C72419975A00699085 /* Build configuration list for PBXProject "FLEXample-SPM" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
C386D6DE2419975B00699085 /* Debug */,
|
||||
C386D6DF2419975B00699085 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
C386D6E02419975B00699085 /* Build configuration list for PBXNativeTarget "FLEXample" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
C386D6E12419975B00699085 /* Debug */,
|
||||
C386D6E22419975B00699085 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCRemoteSwiftPackageReference section */
|
||||
C3F86CD52740ED2600E094BF /* XCRemoteSwiftPackageReference "Reflex" */ = {
|
||||
isa = XCRemoteSwiftPackageReference;
|
||||
repositoryURL = "file:///Users/tanner/Repos/Reflex";
|
||||
requirement = {
|
||||
branch = master;
|
||||
kind = branch;
|
||||
};
|
||||
};
|
||||
/* End XCRemoteSwiftPackageReference section */
|
||||
|
||||
/* Begin XCSwiftPackageProductDependency section */
|
||||
C3F86CD62740ED2600E094BF /* Reflex */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = C3F86CD52740ED2600E094BF /* XCRemoteSwiftPackageReference "Reflex" */;
|
||||
productName = Reflex;
|
||||
};
|
||||
/* End XCSwiftPackageProductDependency section */
|
||||
};
|
||||
rootObject = C386D6C42419975A00699085 /* Project object */;
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1240"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "C386D6CB2419975A00699085"
|
||||
BuildableName = "FLEXample.app"
|
||||
BlueprintName = "FLEXample"
|
||||
ReferencedContainer = "container:FLEXample-SPM.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "C386D6CB2419975A00699085"
|
||||
BuildableName = "FLEXample.app"
|
||||
BlueprintName = "FLEXample"
|
||||
ReferencedContainer = "container:FLEXample-SPM.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "C386D6CB2419975A00699085"
|
||||
BuildableName = "FLEXample.app"
|
||||
BlueprintName = "FLEXample"
|
||||
ReferencedContainer = "container:FLEXample-SPM.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:FLEXample.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:FLEXample.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:Pods/Pods.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,5 +1,6 @@
|
||||
platform :ios, '13.0'
|
||||
|
||||
target 'FLEXample' do
|
||||
project 'FLEXample-Cocoapods'
|
||||
pod 'FLEX', :path => '../'
|
||||
end
|
||||
|
||||
+15
-5
@@ -32,14 +32,24 @@ Pod::Spec.new do |spec|
|
||||
spec.platform = :ios, "9.0"
|
||||
spec.source = { :git => "https://github.com/FLEXTool/FLEX.git", :tag => "#{spec.version}" }
|
||||
spec.source_files = "Classes/**/*.{h,c,m,mm}"
|
||||
spec.exclude_files = "Classes/Headers/*.{h,c,m,mm}"
|
||||
spec.frameworks = [ "Foundation", "UIKit", "CoreGraphics", "ImageIO", "QuartzCore", "WebKit", "Security", "SceneKit" ]
|
||||
spec.libraries = [ "z", "sqlite3" ]
|
||||
spec.requires_arc = true
|
||||
spec.compiler_flags = "-Wno-unsupported-availability-guard"
|
||||
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/Categories/*.h", "Classes/Utility/FLEXAlert.h",
|
||||
"Classes/Utility/FLEXResources.h" ]
|
||||
"Classes/Core/Controllers/*.h", "Classes/Core/Views/*.h",
|
||||
"Classes/Core/Views/Cells/*.h", "Classes/Core/*.h",
|
||||
"Classes/Utility/Categories/*.h",
|
||||
"Classes/Utility/Runtime/Objc/**/*.h",
|
||||
"Classes/ObjectExplorers/*.h",
|
||||
"Classes/ObjectExplorers/Sections/*.h",
|
||||
|
||||
"Classes/Utility/FLEXMacros.h",
|
||||
"Classes/Utility/FLEXAlert.h",
|
||||
"Classes/Utility/FLEXResources.h",
|
||||
"Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcut.h",
|
||||
"Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsSection.h",
|
||||
"Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h"
|
||||
]
|
||||
end
|
||||
|
||||
@@ -242,6 +242,8 @@
|
||||
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 */; };
|
||||
C38568FA272B3BFC00B1E37F /* FLEXSwiftInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = C38568F8272B3BFC00B1E37F /* FLEXSwiftInternal.h */; };
|
||||
C38568FB272B3BFC00B1E37F /* FLEXSwiftInternal.mm in Sources */ = {isa = PBXBuildFile; fileRef = C38568F9272B3BFC00B1E37F /* FLEXSwiftInternal.mm */; };
|
||||
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, ); }; };
|
||||
@@ -619,6 +621,8 @@
|
||||
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>"; };
|
||||
C38568F8272B3BFC00B1E37F /* FLEXSwiftInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FLEXSwiftInternal.h; sourceTree = "<group>"; };
|
||||
C38568F9272B3BFC00B1E37F /* FLEXSwiftInternal.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FLEXSwiftInternal.mm; 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>"; };
|
||||
@@ -1106,6 +1110,8 @@
|
||||
C383C3B823B6A62A007A321B /* FLEXRuntimeSafety.m */,
|
||||
C37A0C91218BAC9600848CA7 /* FLEXObjcInternal.h */,
|
||||
C37A0C92218BAC9600848CA7 /* FLEXObjcInternal.mm */,
|
||||
C38568F8272B3BFC00B1E37F /* FLEXSwiftInternal.h */,
|
||||
C38568F9272B3BFC00B1E37F /* FLEXSwiftInternal.mm */,
|
||||
C386D6EE2419A2F400699085 /* FLEXRuntimeConstants.h */,
|
||||
C386D6EF2419A33F00699085 /* FLEXRuntimeConstants.m */,
|
||||
C3854DF223F36C9E00FCD1E2 /* FLEXTypeEncodingParser.h */,
|
||||
@@ -1561,6 +1567,7 @@
|
||||
3A4C95221B5B21410088C3F2 /* FLEXFileBrowserSearchOperation.h in Headers */,
|
||||
C33E46AF223B02CD004BD0E6 /* FLEXASLLogController.h in Headers */,
|
||||
C34EE30821CB23CC00BD3A7C /* FLEXOSLogController.h in Headers */,
|
||||
C38568FA272B3BFC00B1E37F /* FLEXSwiftInternal.h in Headers */,
|
||||
3A4C94FF1B5B21410088C3F2 /* FLEXArgumentInputSwitchView.h in Headers */,
|
||||
C398625423AD6C67007E6793 /* FLEXRuntimeBrowserToolbar.h in Headers */,
|
||||
3A4C94E71B5B21410088C3F2 /* FLEXHierarchyTableViewCell.h in Headers */,
|
||||
@@ -1794,6 +1801,7 @@
|
||||
3A4C95101B5B21410088C3F2 /* FLEXMethodCallingViewController.m in Sources */,
|
||||
C362AE8223C7E9D1005A86AE /* NSMapTable+FLEX_Subscripting.m in Sources */,
|
||||
C3F646C2239EAA8F00D4A011 /* UIPasteboard+FLEX.m in Sources */,
|
||||
C38568FB272B3BFC00B1E37F /* FLEXSwiftInternal.mm in Sources */,
|
||||
C3EB6F8D242E9C83006EA386 /* FLEXRuntimeExporter.m in Sources */,
|
||||
3A4C94F61B5B21410088C3F2 /* FLEXArgumentInputObjectView.m in Sources */,
|
||||
3A4C94EC1B5B21410088C3F2 /* FLEXImagePreviewViewController.m in Sources */,
|
||||
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
// swift-tools-version:5.3
|
||||
|
||||
import PackageDescription
|
||||
|
||||
enum FLEXBuildOptions {
|
||||
/// Set this to `true` to use `.unsafeFlags` to silence warnings.
|
||||
static let silenceWarnings = false
|
||||
}
|
||||
|
||||
let package = Package(
|
||||
name: "FLEX",
|
||||
platforms: [.iOS(.v10)],
|
||||
products: [
|
||||
.library(name: "FLEX", targets: ["FLEX"])
|
||||
],
|
||||
targets: [
|
||||
.target(
|
||||
name: "FLEX",
|
||||
path: "Classes",
|
||||
exclude: [
|
||||
"Info.plist",
|
||||
"Utility/APPLE_LICENSE",
|
||||
"Network/OSCache/LICENSE.md",
|
||||
"Network/PonyDebugger/LICENSE",
|
||||
"GlobalStateExplorers/DatabaseBrowser/LICENSE",
|
||||
"GlobalStateExplorers/Keychain/SSKeychain_LICENSE",
|
||||
"GlobalStateExplorers/SystemLog/LLVM_LICENSE.TXT",
|
||||
],
|
||||
publicHeadersPath: "Headers",
|
||||
cSettings: .headerSearchPaths + .warningFlags
|
||||
)
|
||||
],
|
||||
// Required to compile FLEXSwiftInternal.mm
|
||||
cxxLanguageStandard: .gnucxx11
|
||||
)
|
||||
|
||||
extension Array where Element == CSetting {
|
||||
static var warningFlags: [Element] {
|
||||
if FLEXBuildOptions.silenceWarnings {
|
||||
return [.unsafeFlags([
|
||||
"-Wno-deprecated-declarations",
|
||||
"-Wno-strict-prototypes",
|
||||
"-Wno-unsupported-availability-guard",
|
||||
])]
|
||||
}
|
||||
|
||||
return []
|
||||
}
|
||||
|
||||
/// These are the header search paths needed for FLEX to compile, not
|
||||
/// the headers used by projects linking against FLEX.
|
||||
///
|
||||
/// Do not modify the contents of this property by hand;
|
||||
/// Instead, run `bash generate-spm-headers.sh | grep headerSearchPath | pbcopy`
|
||||
/// and paste (and indent) the result below. Do this any time new folders are added.
|
||||
static var headerSearchPaths: [Element] {
|
||||
[
|
||||
.headerSearchPath("Classes"),
|
||||
.headerSearchPath("Core"),
|
||||
.headerSearchPath("Core/Controllers"),
|
||||
.headerSearchPath("Core/Views"),
|
||||
.headerSearchPath("Core/Views/Cells"),
|
||||
.headerSearchPath("Core/Views/Carousel"),
|
||||
.headerSearchPath("ObjectExplorers"),
|
||||
.headerSearchPath("ObjectExplorers/Sections"),
|
||||
.headerSearchPath("ObjectExplorers/Sections/Shortcuts"),
|
||||
.headerSearchPath("Network"),
|
||||
.headerSearchPath("Network/PonyDebugger"),
|
||||
.headerSearchPath("Network/OSCache"),
|
||||
.headerSearchPath("Toolbar"),
|
||||
.headerSearchPath("Manager"),
|
||||
.headerSearchPath("Manager/Private"),
|
||||
.headerSearchPath("Editing"),
|
||||
.headerSearchPath("Editing/ArgumentInputViews"),
|
||||
.headerSearchPath("Headers"),
|
||||
.headerSearchPath("ExplorerInterface"),
|
||||
.headerSearchPath("ExplorerInterface/Tabs"),
|
||||
.headerSearchPath("ExplorerInterface/Bookmarks"),
|
||||
.headerSearchPath("GlobalStateExplorers"),
|
||||
.headerSearchPath("GlobalStateExplorers/Globals"),
|
||||
.headerSearchPath("GlobalStateExplorers/Keychain"),
|
||||
.headerSearchPath("GlobalStateExplorers/FileBrowser"),
|
||||
.headerSearchPath("GlobalStateExplorers/SystemLog"),
|
||||
.headerSearchPath("GlobalStateExplorers/DatabaseBrowser"),
|
||||
.headerSearchPath("GlobalStateExplorers/RuntimeBrowser"),
|
||||
.headerSearchPath("GlobalStateExplorers/RuntimeBrowser/DataSources"),
|
||||
.headerSearchPath("ViewHierarchy"),
|
||||
.headerSearchPath("ViewHierarchy/SnapshotExplorer"),
|
||||
.headerSearchPath("ViewHierarchy/SnapshotExplorer/Scene"),
|
||||
.headerSearchPath("ViewHierarchy/TreeExplorer"),
|
||||
.headerSearchPath("Utility"),
|
||||
.headerSearchPath("Utility/Runtime"),
|
||||
.headerSearchPath("Utility/Runtime/Objc"),
|
||||
.headerSearchPath("Utility/Runtime/Objc/Reflection"),
|
||||
.headerSearchPath("Utility/Categories"),
|
||||
.headerSearchPath("Utility/Categories/Private"),
|
||||
.headerSearchPath("Utility/Keyboard")
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -168,6 +168,27 @@ Add the following flags to to **Other Warnings Flags** in **Build Settings:**
|
||||
- `-Wno-strict-prototypes`
|
||||
- `-Wno-unsupported-availability-guard`
|
||||
|
||||
### Swift Package Manager
|
||||
|
||||
Include the dependency in the `depdendencies` value of your `Package.swift`
|
||||
|
||||
``` swift
|
||||
dependencies: [
|
||||
.package(url: "https://github.com/FLEXTool/FLEX.git", .upToNextMajor(from: "4.3.0"))
|
||||
]
|
||||
```
|
||||
|
||||
Next, include the library in your target:
|
||||
|
||||
```js
|
||||
.target(
|
||||
name: "YourDependency",
|
||||
dependencies: [
|
||||
"FLEX"
|
||||
]
|
||||
)
|
||||
```
|
||||
|
||||
## Excluding FLEX from Release (App Store) Builds
|
||||
|
||||
FLEX makes it easy to explore the internals of your app, so it is not something you should expose to your users. Fortunately, it is easy to exclude FLEX files from Release builds. The strategies differ depending on how you integrated FLEX in your project, and are described below.
|
||||
@@ -198,6 +219,13 @@ pod 'FLEX', :configurations => ['Debug']
|
||||
|
||||
<img width=75% height=75% src=https://user-images.githubusercontent.com/8371943/70274062-0d4b3f80-1771-11ea-94ea-ca7e7b5ca244.jpg>
|
||||
|
||||
### Swift Package Manager
|
||||
|
||||
In Xcode, navigate to `Build Settings > Build Options > Excluded Source File Names`. For your `Release` configuration, set it to `FLEX.o` like this to exclude all files with the `FLEX` prefix:
|
||||
|
||||
<img width=75% height=75% src=https://user-images.githubusercontent.com/1234765/98673373-8545c080-2357-11eb-9587-0743998e23ba.png>
|
||||
|
||||
|
||||
### FLEX files added manually to a project
|
||||
|
||||
In Xcode, navigate to `Build Settings > Build Options > Excluded Source File Names`. For your `Release` configuration, set it to `FLEX*` like this to exclude all files with the `FLEX` prefix:
|
||||
|
||||
Executable
+65
@@ -0,0 +1,65 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Link a specific header
|
||||
makeheader() {
|
||||
/bin/rm -f "Classes/Headers/$(basename $1)"
|
||||
ln -s "../../$1" "Classes/Headers/$(basename $1)"
|
||||
}
|
||||
|
||||
# Link all headers under the given path and in subfolders
|
||||
generate_headers_recursive() {
|
||||
for path in `find "Classes/$1" -not -path "*Headers*" -name "*.h"`; do
|
||||
makeheader "$path"
|
||||
done
|
||||
}
|
||||
|
||||
# Link all headers directly under the given path, only
|
||||
generate_headers() {
|
||||
for path in `ls "Classes/$1" | grep '\.h'`; do
|
||||
if [[ $1 ]]; then
|
||||
makeheader "Classes/$1/$path"
|
||||
else
|
||||
makeheader "Classes/$path"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# The code below MUST match what is public_header_files in the podspec.
|
||||
# When this file was last updated, this was the content of 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"
|
||||
|
||||
rm -rf Classes/Headers
|
||||
mkdir -p Classes/Headers
|
||||
|
||||
# Include all headers in these folders
|
||||
generate_headers "" # Top-level headers
|
||||
generate_headers "Manager"
|
||||
generate_headers "Toolbar"
|
||||
generate_headers "Utility/Categories"
|
||||
generate_headers "Core"
|
||||
generate_headers "Core/Controllers"
|
||||
generate_headers "Core/Views"
|
||||
generate_headers "Core/Views/Cells"
|
||||
generate_headers "ObjectExplorers"
|
||||
generate_headers "ObjectExplorers/Sections"
|
||||
generate_headers_recursive "Utility/Runtime/Objc"
|
||||
|
||||
# Include only headers in these specific folders,
|
||||
# such as those with subfolders that should not be linked
|
||||
makeheader "Classes/Utility/FLEXMacros.h"
|
||||
makeheader "Classes/Utility/FLEXAlert.h"
|
||||
makeheader "Classes/Utility/FLEXResources.h"
|
||||
makeheader "Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcut.h"
|
||||
makeheader "Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsSection.h"
|
||||
makeheader "Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h"
|
||||
|
||||
# Print all folders in Classes for use in Package.swift
|
||||
for folder in `find "Classes" -type d`; do
|
||||
echo ".headerSearchPath(\"${folder#Classes/}\"),"
|
||||
done
|
||||
Reference in New Issue
Block a user