├── .gitignore ├── Build.sh ├── CHANGELOG.md ├── CHANGELOG_CN.md ├── Example ├── Build.sh ├── Example.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Example.xcscheme ├── Example.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Example │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-1024.0@1x.jpg │ │ │ ├── Icon-20.0@1x.png │ │ │ ├── Icon-20.0@2x.png │ │ │ ├── Icon-20.0@3x.png │ │ │ ├── Icon-29.0@1x.png │ │ │ ├── Icon-29.0@2x.png │ │ │ ├── Icon-29.0@3x.png │ │ │ ├── Icon-40.0@1x.png │ │ │ ├── Icon-40.0@2x.png │ │ │ ├── Icon-40.0@3x.png │ │ │ ├── Icon-60.0@2x.png │ │ │ ├── Icon-60.0@3x.png │ │ │ ├── Icon-76.0@1x.png │ │ │ ├── Icon-76.0@2x.png │ │ │ └── Icon-83.5@2x.png │ │ └── Contents.json │ ├── Example-Bridging-Header.h │ ├── Info.plist │ ├── LaunchScreen.storyboard │ ├── ObjectivecController.h │ ├── ObjectivecController.m │ ├── SwiftController.swift │ ├── SwiftHeader.h │ ├── ViewController.h │ ├── ViewController.m │ └── main.m ├── Podfile ├── Podfile.lock └── Pods │ ├── Local Podspecs │ └── FWDebug.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── Target Support Files │ ├── FWDebug │ ├── FWDebug-Info.plist │ ├── FWDebug-dummy.m │ ├── FWDebug-prefix.pch │ ├── FWDebug-umbrella.h │ ├── FWDebug-xcframeworks.sh │ ├── FWDebug.debug.xcconfig │ ├── FWDebug.modulemap │ └── FWDebug.release.xcconfig │ └── Pods-Example │ ├── Pods-Example-Info.plist │ ├── Pods-Example-acknowledgements.markdown │ ├── Pods-Example-acknowledgements.plist │ ├── Pods-Example-dummy.m │ ├── Pods-Example-frameworks.sh │ ├── Pods-Example-umbrella.h │ ├── Pods-Example.debug.xcconfig │ ├── Pods-Example.modulemap │ └── Pods-Example.release.xcconfig ├── FWDebug.gif ├── FWDebug.podspec ├── FWDebug ├── Assets │ ├── .gitkeep │ └── GCDWebUploader.bundle │ │ └── Contents │ │ ├── Info.plist │ │ └── Resources │ │ ├── css │ │ ├── bootstrap-theme.css │ │ ├── bootstrap.css │ │ ├── debug.css │ │ ├── index.css │ │ ├── jquery.fileupload.css │ │ ├── logger.css │ │ ├── screenshot.css │ │ └── url.css │ │ ├── debug.html │ │ ├── en.lproj │ │ └── Localizable.strings │ │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── index.html │ │ ├── js │ │ ├── bootstrap.min.js │ │ ├── debug.js │ │ ├── eruda.min.js │ │ ├── html5shiv.min.js │ │ ├── index.js │ │ ├── jquery.fileupload.js │ │ ├── jquery.iframe-transport.js │ │ ├── jquery.jeditable.js │ │ ├── jquery.min.js │ │ ├── jquery.ui.widget.js │ │ ├── logger.js │ │ ├── respond.min.js │ │ ├── screenshot.js │ │ ├── tmpl.min.js │ │ ├── url.js │ │ └── vconsole.min.js │ │ ├── logger.html │ │ ├── screenshot.html │ │ └── url.html └── Classes │ ├── .gitkeep │ ├── Private │ ├── FBRetainCycleDetector │ │ ├── FBRetainCycleDetector+FWDebug.h │ │ ├── FBRetainCycleDetector+FWDebug.m │ │ ├── FWDebugRetainCycle.h │ │ └── FWDebugRetainCycle.m │ ├── FLEX │ │ ├── FLEXExplorerToolbar+FWDebug.h │ │ ├── FLEXExplorerToolbar+FWDebug.m │ │ ├── FLEXExplorerViewController+FWDebug.h │ │ ├── FLEXExplorerViewController+FWDebug.m │ │ ├── FLEXFileBrowserController+FWDebug.h │ │ ├── FLEXFileBrowserController+FWDebug.m │ │ ├── FLEXManager+FWDebug.h │ │ ├── FLEXManager+FWDebug.m │ │ ├── FLEXOSLogController+FWDebug.h │ │ ├── FLEXOSLogController+FWDebug.m │ │ ├── FLEXObjectExplorerViewController+FWDebug.h │ │ ├── FLEXObjectExplorerViewController+FWDebug.m │ │ ├── FLEXObjectListViewController+FWDebug.h │ │ ├── FLEXObjectListViewController+FWDebug.m │ │ ├── FWDebugAppConfig.h │ │ ├── FWDebugAppConfig.m │ │ ├── FWDebugFakeLocation.h │ │ ├── FWDebugFakeLocation.m │ │ ├── FWDebugFakeNotification.h │ │ ├── FWDebugFakeNotification.m │ │ ├── FWDebugFpsInfo.h │ │ ├── FWDebugFpsInfo.m │ │ ├── FWDebugSystemInfo.h │ │ ├── FWDebugSystemInfo.m │ │ ├── FWDebugTimeProfiler.h │ │ └── FWDebugTimeProfiler.m │ ├── GCDWebServer │ │ ├── FWDebugWebServer.h │ │ └── FWDebugWebServer.m │ ├── KSCrash │ │ ├── FWDebugKSCrashInstallationFile.h │ │ ├── FWDebugKSCrashInstallationFile.m │ │ ├── FWDebugKSCrashReportSinkFile.h │ │ ├── FWDebugKSCrashReportSinkFile.m │ │ ├── KSCrash+FWDebug.h │ │ └── KSCrash+FWDebug.m │ ├── Manager │ │ ├── FWDebugManager+FWDebug.h │ │ └── FWDebugManager+FWDebug.m │ └── RuntimeBrowser │ │ ├── FWDebugRuntimeBrowser.h │ │ └── FWDebugRuntimeBrowser.m │ ├── Public │ ├── FWDebug.h │ ├── FWDebugManager.h │ └── FWDebugManager.m │ └── Vendor │ ├── Echo │ ├── CEcho │ │ ├── Builtins.def │ │ ├── CallAccessor.c │ │ ├── CallAccessor.h │ │ ├── Functions.c │ │ ├── Functions.h │ │ ├── ImageInspection.h │ │ ├── ImageInspectionELF.c │ │ ├── ImageInspectionMachO.c │ │ ├── KnownMetadata.c │ │ ├── KnownMetadata.h │ │ ├── ValueWitnessTable.c │ │ └── ValueWitnessTable.h │ └── Echo │ │ ├── ContextDescriptor │ │ ├── AnonymousDescriptor.swift │ │ ├── ClassDescriptor.swift │ │ ├── ContextDescriptor.swift │ │ ├── ContextDescriptorValues.swift │ │ ├── EnumDescriptor.swift │ │ ├── ExtensionDescriptor.swift │ │ ├── FieldDescriptor.swift │ │ ├── GenericContext.swift │ │ ├── ModuleDescriptor.swift │ │ ├── OpaqueDescriptor.swift │ │ ├── ProtocolDescriptor.swift │ │ ├── StructDescriptor.swift │ │ └── TypeContextDescriptor.swift │ │ ├── Echo.swift │ │ ├── Metadata │ │ ├── ClassMetadata.swift │ │ ├── EnumMetadata.swift │ │ ├── EnumValueWitnessTable.swift │ │ ├── ExistentialMetadata.swift │ │ ├── ExistentialMetatypeMetadata.swift │ │ ├── ForeignClassMetadata.swift │ │ ├── FunctionMetadata.swift │ │ ├── HeapGenericLocalVariableMetadata.swift │ │ ├── HeapLocalVariableMetadata.swift │ │ ├── Metadata.swift │ │ ├── MetadataAccessFunction.swift │ │ ├── MetadataRequest.swift │ │ ├── MetadataValues.swift │ │ ├── MetatypeMetadata.swift │ │ ├── ObjCClassWrapperMetadata.swift │ │ ├── OpaqueMetadata.swift │ │ ├── StructMetadata.swift │ │ ├── TupleMetadata.swift │ │ ├── TypeMetadata.swift │ │ └── ValueWitnessTable.swift │ │ ├── Runtime │ │ ├── ConformanceDescriptor.swift │ │ ├── ExistentialContainer.swift │ │ ├── Functions.swift │ │ ├── HeapObject.swift │ │ ├── ImageInspection.swift │ │ ├── KeyPaths.swift │ │ ├── KnownMetadata.swift │ │ ├── RuntimeValues.swift │ │ └── WitnessTable.swift │ │ └── Utils │ │ ├── FieldType.swift │ │ ├── Misc.swift │ │ ├── RelativeDirectPointer.swift │ │ ├── RelativeIndirectPointer.swift │ │ ├── RelativeIndirectablePointer.swift │ │ ├── RelativeIndirectablePointerIntPair.swift │ │ ├── RelativePointer.swift │ │ └── SignedPointer.swift │ ├── FBRetainCycleDetector │ ├── Associations │ │ ├── FBAssociationManager.h │ │ ├── FBAssociationManager.mm │ │ └── Internal │ │ │ └── FBAssociationManager+Internal.h │ ├── Detector │ │ ├── FBNodeEnumerator.h │ │ ├── FBNodeEnumerator.mm │ │ ├── FBRetainCycleDetector+Internal.h │ │ ├── FBRetainCycleDetector.h │ │ └── FBRetainCycleDetector.mm │ ├── FBRetainCycleUtils.h │ ├── FBRetainCycleUtils.m │ ├── Filtering │ │ ├── FBStandardGraphEdgeFilters.h │ │ └── FBStandardGraphEdgeFilters.mm │ ├── Graph │ │ ├── FBObjectGraphConfiguration.h │ │ ├── FBObjectGraphConfiguration.m │ │ ├── FBObjectiveCBlock.h │ │ ├── FBObjectiveCBlock.m │ │ ├── FBObjectiveCGraphElement.h │ │ ├── FBObjectiveCGraphElement.mm │ │ ├── FBObjectiveCObject.h │ │ ├── FBObjectiveCObject.m │ │ ├── Internal │ │ │ └── FBObjectiveCGraphElement+Internal.h │ │ └── Specialization │ │ │ ├── FBObjectiveCNSCFTimer.h │ │ │ └── FBObjectiveCNSCFTimer.mm │ └── Layout │ │ ├── Blocks │ │ ├── Circle-LICENSE │ │ ├── FBBlockInterface.h │ │ ├── FBBlockStrongLayout.h │ │ ├── FBBlockStrongLayout.m │ │ ├── FBBlockStrongRelationDetector.h │ │ └── FBBlockStrongRelationDetector.m │ │ └── Classes │ │ ├── FBClassStrongLayout.h │ │ ├── FBClassStrongLayout.mm │ │ ├── FBClassStrongLayoutHelpers.h │ │ ├── FBClassStrongLayoutHelpers.m │ │ ├── Parser │ │ ├── BaseType.h │ │ ├── FBStructEncodingParser.h │ │ ├── FBStructEncodingParser.mm │ │ ├── Struct.h │ │ ├── Struct.mm │ │ └── Type.h │ │ └── Reference │ │ ├── FBIvarReference.h │ │ ├── FBIvarReference.m │ │ ├── FBObjectInStructReference.h │ │ ├── FBObjectInStructReference.m │ │ └── FBObjectReference.h │ ├── FLEX │ ├── Core │ │ ├── Controllers │ │ │ ├── FLEXFilteringTableViewController.h │ │ │ ├── FLEXFilteringTableViewController.m │ │ │ ├── FLEXNavigationController.h │ │ │ ├── FLEXNavigationController.m │ │ │ ├── FLEXTableViewController.h │ │ │ └── FLEXTableViewController.m │ │ ├── FLEXSingleRowSection.h │ │ ├── FLEXSingleRowSection.m │ │ ├── FLEXTableViewSection.h │ │ ├── FLEXTableViewSection.m │ │ └── Views │ │ │ ├── Carousel │ │ │ ├── FLEXCarouselCell.h │ │ │ ├── FLEXCarouselCell.m │ │ │ ├── FLEXScopeCarousel.h │ │ │ └── FLEXScopeCarousel.m │ │ │ ├── Cells │ │ │ ├── FLEXCodeFontCell.h │ │ │ ├── FLEXCodeFontCell.m │ │ │ ├── FLEXKeyValueTableViewCell.h │ │ │ ├── FLEXKeyValueTableViewCell.m │ │ │ ├── FLEXMultilineTableViewCell.h │ │ │ ├── FLEXMultilineTableViewCell.m │ │ │ ├── FLEXSubtitleTableViewCell.h │ │ │ ├── FLEXSubtitleTableViewCell.m │ │ │ ├── FLEXTableViewCell.h │ │ │ └── FLEXTableViewCell.m │ │ │ ├── FLEXTableView.h │ │ │ └── FLEXTableView.m │ ├── Editing │ │ ├── ArgumentInputViews │ │ │ ├── FLEXArgumentInputColorView.h │ │ │ ├── FLEXArgumentInputColorView.m │ │ │ ├── FLEXArgumentInputDateView.h │ │ │ ├── FLEXArgumentInputDateView.m │ │ │ ├── FLEXArgumentInputFontView.h │ │ │ ├── FLEXArgumentInputFontView.m │ │ │ ├── FLEXArgumentInputFontsPickerView.h │ │ │ ├── FLEXArgumentInputFontsPickerView.m │ │ │ ├── FLEXArgumentInputNotSupportedView.h │ │ │ ├── FLEXArgumentInputNotSupportedView.m │ │ │ ├── FLEXArgumentInputNumberView.h │ │ │ ├── FLEXArgumentInputNumberView.m │ │ │ ├── FLEXArgumentInputObjectView.h │ │ │ ├── FLEXArgumentInputObjectView.m │ │ │ ├── FLEXArgumentInputStringView.h │ │ │ ├── FLEXArgumentInputStringView.m │ │ │ ├── FLEXArgumentInputStructView.h │ │ │ ├── FLEXArgumentInputStructView.m │ │ │ ├── FLEXArgumentInputSwitchView.h │ │ │ ├── FLEXArgumentInputSwitchView.m │ │ │ ├── FLEXArgumentInputTextView.h │ │ │ ├── FLEXArgumentInputTextView.m │ │ │ ├── FLEXArgumentInputView.h │ │ │ └── FLEXArgumentInputView.m │ │ ├── FLEXArgumentInputViewFactory.h │ │ ├── FLEXArgumentInputViewFactory.m │ │ ├── FLEXDefaultEditorViewController.h │ │ ├── FLEXDefaultEditorViewController.m │ │ ├── FLEXFieldEditorView.h │ │ ├── FLEXFieldEditorView.m │ │ ├── FLEXFieldEditorViewController.h │ │ ├── FLEXFieldEditorViewController.m │ │ ├── FLEXMethodCallingViewController.h │ │ ├── FLEXMethodCallingViewController.m │ │ ├── FLEXVariableEditorViewController.h │ │ └── FLEXVariableEditorViewController.m │ ├── ExplorerInterface │ │ ├── Bookmarks │ │ │ ├── FLEXBookmarkManager.h │ │ │ ├── FLEXBookmarkManager.m │ │ │ ├── FLEXBookmarksViewController.h │ │ │ └── FLEXBookmarksViewController.m │ │ ├── FLEXExplorerViewController.h │ │ ├── FLEXExplorerViewController.m │ │ ├── FLEXViewControllersViewController.h │ │ ├── FLEXViewControllersViewController.m │ │ ├── FLEXWindow.h │ │ ├── FLEXWindow.m │ │ ├── FLEXWindowManagerController.h │ │ ├── FLEXWindowManagerController.m │ │ └── Tabs │ │ │ ├── FLEXTabList.h │ │ │ ├── FLEXTabList.m │ │ │ ├── FLEXTabsViewController.h │ │ │ └── FLEXTabsViewController.m │ ├── FLEX-Categories.h │ ├── FLEX-Core.h │ ├── FLEX-ObjectExploring.h │ ├── FLEX-Runtime.h │ ├── FLEX.h │ ├── GlobalStateExplorers │ │ ├── DatabaseBrowser │ │ │ ├── FLEXDBQueryRowCell.h │ │ │ ├── FLEXDBQueryRowCell.m │ │ │ ├── FLEXDatabaseManager.h │ │ │ ├── FLEXMultiColumnTableView.h │ │ │ ├── FLEXMultiColumnTableView.m │ │ │ ├── FLEXRealmDatabaseManager.h │ │ │ ├── FLEXRealmDatabaseManager.m │ │ │ ├── FLEXRealmDefines.h │ │ │ ├── FLEXSQLResult.h │ │ │ ├── FLEXSQLResult.m │ │ │ ├── FLEXSQLiteDatabaseManager.h │ │ │ ├── FLEXSQLiteDatabaseManager.m │ │ │ ├── FLEXTableColumnHeader.h │ │ │ ├── FLEXTableColumnHeader.m │ │ │ ├── FLEXTableContentViewController.h │ │ │ ├── FLEXTableContentViewController.m │ │ │ ├── FLEXTableLeftCell.h │ │ │ ├── FLEXTableLeftCell.m │ │ │ ├── FLEXTableListViewController.h │ │ │ ├── FLEXTableListViewController.m │ │ │ ├── FLEXTableRowDataViewController.h │ │ │ ├── FLEXTableRowDataViewController.m │ │ │ └── LICENSE │ │ ├── FLEXAPNSViewController.h │ │ ├── FLEXAPNSViewController.m │ │ ├── FLEXAddressExplorerCoordinator.h │ │ ├── FLEXAddressExplorerCoordinator.m │ │ ├── FLEXCookiesViewController.h │ │ ├── FLEXCookiesViewController.m │ │ ├── FLEXLiveObjectsController.h │ │ ├── FLEXLiveObjectsController.m │ │ ├── FLEXObjectListViewController.h │ │ ├── FLEXObjectListViewController.m │ │ ├── FLEXObjectRef.h │ │ ├── FLEXObjectRef.m │ │ ├── FLEXWebViewController.h │ │ ├── FLEXWebViewController.m │ │ ├── FileBrowser │ │ │ ├── FLEXActivityViewController.h │ │ │ ├── FLEXActivityViewController.m │ │ │ ├── FLEXFileBrowserController.h │ │ │ ├── FLEXFileBrowserController.m │ │ │ ├── FLEXFileBrowserSearchOperation.h │ │ │ └── FLEXFileBrowserSearchOperation.m │ │ ├── Globals │ │ │ ├── FLEXGlobalsEntry.h │ │ │ ├── FLEXGlobalsEntry.m │ │ │ ├── FLEXGlobalsSection.h │ │ │ ├── FLEXGlobalsSection.m │ │ │ ├── FLEXGlobalsViewController.h │ │ │ └── FLEXGlobalsViewController.m │ │ ├── Keychain │ │ │ ├── FLEXKeychain.h │ │ │ ├── FLEXKeychain.m │ │ │ ├── FLEXKeychainQuery.h │ │ │ ├── FLEXKeychainQuery.m │ │ │ ├── FLEXKeychainViewController.h │ │ │ ├── FLEXKeychainViewController.m │ │ │ └── SSKeychain_LICENSE │ │ ├── RuntimeBrowser │ │ │ ├── DataSources │ │ │ │ ├── FLEXRuntimeClient.h │ │ │ │ ├── FLEXRuntimeClient.m │ │ │ │ ├── FLEXRuntimeController.h │ │ │ │ ├── FLEXRuntimeController.m │ │ │ │ ├── FLEXRuntimeExporter.h │ │ │ │ └── FLEXRuntimeExporter.m │ │ │ ├── FLEXKBToolbarButton.h │ │ │ ├── FLEXKBToolbarButton.m │ │ │ ├── FLEXKeyPathSearchController.h │ │ │ ├── FLEXKeyPathSearchController.m │ │ │ ├── FLEXKeyboardToolbar.h │ │ │ ├── FLEXKeyboardToolbar.m │ │ │ ├── FLEXObjcRuntimeViewController.h │ │ │ ├── FLEXObjcRuntimeViewController.m │ │ │ ├── FLEXRuntimeBrowserToolbar.h │ │ │ ├── FLEXRuntimeBrowserToolbar.m │ │ │ ├── FLEXRuntimeKeyPath.h │ │ │ ├── FLEXRuntimeKeyPath.m │ │ │ ├── FLEXRuntimeKeyPathTokenizer.h │ │ │ ├── FLEXRuntimeKeyPathTokenizer.m │ │ │ ├── FLEXSearchToken.h │ │ │ └── FLEXSearchToken.m │ │ └── SystemLog │ │ │ ├── ActivityStreamAPI.h │ │ │ ├── FLEXASLLogController.h │ │ │ ├── FLEXASLLogController.m │ │ │ ├── FLEXLogController.h │ │ │ ├── FLEXOSLogController.h │ │ │ ├── FLEXOSLogController.m │ │ │ ├── FLEXSystemLogCell.h │ │ │ ├── FLEXSystemLogCell.m │ │ │ ├── FLEXSystemLogMessage.h │ │ │ ├── FLEXSystemLogMessage.m │ │ │ ├── FLEXSystemLogViewController.h │ │ │ ├── FLEXSystemLogViewController.m │ │ │ └── LLVM_LICENSE.TXT │ ├── Manager │ │ ├── FLEXManager+Extensibility.h │ │ ├── FLEXManager+Extensibility.m │ │ ├── FLEXManager+Networking.h │ │ ├── FLEXManager+Networking.m │ │ ├── FLEXManager.h │ │ ├── FLEXManager.m │ │ └── Private │ │ │ └── FLEXManager+Private.h │ ├── Network │ │ ├── FLEXFirebaseTransaction.mm │ │ ├── FLEXHTTPTransactionDetailController.h │ │ ├── FLEXHTTPTransactionDetailController.m │ │ ├── FLEXMITMDataSource.h │ │ ├── FLEXMITMDataSource.m │ │ ├── FLEXNetworkCurlLogger.h │ │ ├── FLEXNetworkCurlLogger.m │ │ ├── FLEXNetworkMITMViewController.h │ │ ├── FLEXNetworkMITMViewController.m │ │ ├── FLEXNetworkRecorder.h │ │ ├── FLEXNetworkRecorder.m │ │ ├── FLEXNetworkSettingsController.h │ │ ├── FLEXNetworkSettingsController.m │ │ ├── FLEXNetworkTransaction.h │ │ ├── FLEXNetworkTransaction.m │ │ ├── FLEXNetworkTransactionCell.h │ │ ├── FLEXNetworkTransactionCell.m │ │ ├── Firestore.h │ │ ├── OSCache │ │ │ ├── LICENSE.md │ │ │ ├── OSCache.h │ │ │ └── OSCache.m │ │ └── PonyDebugger │ │ │ ├── FLEXNetworkObserver.h │ │ │ ├── FLEXNetworkObserver.m │ │ │ └── LICENSE │ ├── ObjectExplorers │ │ ├── FLEXObjectExplorer.h │ │ ├── FLEXObjectExplorer.m │ │ ├── FLEXObjectExplorerFactory.h │ │ ├── FLEXObjectExplorerFactory.m │ │ ├── FLEXObjectExplorerViewController.h │ │ ├── FLEXObjectExplorerViewController.m │ │ └── Sections │ │ │ ├── FLEXCollectionContentSection.h │ │ │ ├── FLEXCollectionContentSection.m │ │ │ ├── FLEXColorPreviewSection.h │ │ │ ├── FLEXColorPreviewSection.m │ │ │ ├── FLEXDefaultsContentSection.h │ │ │ ├── FLEXDefaultsContentSection.m │ │ │ ├── FLEXMetadataSection.h │ │ │ ├── FLEXMetadataSection.m │ │ │ ├── FLEXMutableListSection.h │ │ │ ├── FLEXMutableListSection.m │ │ │ ├── FLEXObjectInfoSection.h │ │ │ └── Shortcuts │ │ │ ├── FLEXBlockShortcuts.h │ │ │ ├── FLEXBlockShortcuts.m │ │ │ ├── FLEXBundleShortcuts.h │ │ │ ├── FLEXBundleShortcuts.m │ │ │ ├── FLEXClassShortcuts.h │ │ │ ├── FLEXClassShortcuts.m │ │ │ ├── FLEXImageShortcuts.h │ │ │ ├── FLEXImageShortcuts.m │ │ │ ├── FLEXLayerShortcuts.h │ │ │ ├── FLEXLayerShortcuts.m │ │ │ ├── FLEXNSDataShortcuts.h │ │ │ ├── FLEXNSDataShortcuts.m │ │ │ ├── FLEXNSStringShortcuts.h │ │ │ ├── FLEXNSStringShortcuts.m │ │ │ ├── FLEXShortcut.h │ │ │ ├── FLEXShortcut.m │ │ │ ├── FLEXShortcutsFactory+Defaults.h │ │ │ ├── FLEXShortcutsFactory+Defaults.m │ │ │ ├── FLEXShortcutsSection.h │ │ │ ├── FLEXShortcutsSection.m │ │ │ ├── FLEXUIAppShortcuts.h │ │ │ ├── FLEXUIAppShortcuts.m │ │ │ ├── FLEXViewControllerShortcuts.h │ │ │ ├── FLEXViewControllerShortcuts.m │ │ │ ├── FLEXViewShortcuts.h │ │ │ ├── FLEXViewShortcuts.m │ │ │ ├── FLEXWindowShortcuts.h │ │ │ └── FLEXWindowShortcuts.m │ ├── Toolbar │ │ ├── FLEXExplorerToolbar.h │ │ ├── FLEXExplorerToolbar.m │ │ ├── FLEXExplorerToolbarItem.h │ │ └── FLEXExplorerToolbarItem.m │ ├── Utility │ │ ├── APPLE_LICENSE │ │ ├── Categories │ │ │ ├── CALayer+FLEX.h │ │ │ ├── CALayer+FLEX.m │ │ │ ├── FLEXRuntime+Compare.h │ │ │ ├── FLEXRuntime+Compare.m │ │ │ ├── FLEXRuntime+UIKitHelpers.h │ │ │ ├── FLEXRuntime+UIKitHelpers.m │ │ │ ├── NSArray+FLEX.h │ │ │ ├── NSArray+FLEX.m │ │ │ ├── NSDateFormatter+FLEX.h │ │ │ ├── NSDateFormatter+FLEX.m │ │ │ ├── NSObject+FLEX_Reflection.h │ │ │ ├── NSObject+FLEX_Reflection.m │ │ │ ├── NSTimer+FLEX.h │ │ │ ├── NSTimer+FLEX.m │ │ │ ├── NSUserDefaults+FLEX.h │ │ │ ├── NSUserDefaults+FLEX.m │ │ │ ├── Private │ │ │ │ ├── Cocoa+FLEXShortcuts.h │ │ │ │ ├── Cocoa+FLEXShortcuts.m │ │ │ │ ├── NSDictionary+ObjcRuntime.h │ │ │ │ ├── NSDictionary+ObjcRuntime.m │ │ │ │ ├── NSMapTable+FLEX_Subscripting.h │ │ │ │ ├── NSMapTable+FLEX_Subscripting.m │ │ │ │ ├── NSString+FLEX.h │ │ │ │ ├── NSString+FLEX.m │ │ │ │ ├── NSString+ObjcRuntime.h │ │ │ │ ├── NSString+ObjcRuntime.m │ │ │ │ ├── UIView+FLEX_Layout.h │ │ │ │ └── UIView+FLEX_Layout.m │ │ │ ├── UIBarButtonItem+FLEX.h │ │ │ ├── UIBarButtonItem+FLEX.m │ │ │ ├── UIFont+FLEX.h │ │ │ ├── UIFont+FLEX.m │ │ │ ├── UIGestureRecognizer+Blocks.h │ │ │ ├── UIGestureRecognizer+Blocks.m │ │ │ ├── UIMenu+FLEX.h │ │ │ ├── UIMenu+FLEX.m │ │ │ ├── UIPasteboard+FLEX.h │ │ │ ├── UIPasteboard+FLEX.m │ │ │ ├── UITextField+Range.h │ │ │ └── UITextField+Range.m │ │ ├── FLEXAlert.h │ │ ├── FLEXAlert.m │ │ ├── FLEXColor.h │ │ ├── FLEXColor.m │ │ ├── FLEXHeapEnumerator.h │ │ ├── FLEXHeapEnumerator.m │ │ ├── FLEXMacros.h │ │ ├── FLEXResources.h │ │ ├── FLEXResources.m │ │ ├── FLEXUtility.h │ │ ├── FLEXUtility.m │ │ ├── Keyboard │ │ │ ├── FLEXKeyboardHelpViewController.h │ │ │ ├── FLEXKeyboardHelpViewController.m │ │ │ ├── FLEXKeyboardShortcutManager.h │ │ │ └── FLEXKeyboardShortcutManager.m │ │ └── Runtime │ │ │ ├── FLEXRuntimeUtility.h │ │ │ ├── FLEXRuntimeUtility.m │ │ │ ├── Objc │ │ │ ├── FLEXObjcInternal.h │ │ │ ├── FLEXObjcInternal.mm │ │ │ ├── FLEXRuntimeConstants.h │ │ │ ├── FLEXRuntimeConstants.m │ │ │ ├── FLEXRuntimeSafety.h │ │ │ ├── FLEXRuntimeSafety.m │ │ │ ├── FLEXSwiftInternal.h │ │ │ ├── FLEXSwiftInternal.mm │ │ │ ├── FLEXTypeEncodingParser.h │ │ │ ├── FLEXTypeEncodingParser.m │ │ │ └── Reflection │ │ │ │ ├── FLEXBlockDescription.h │ │ │ │ ├── FLEXBlockDescription.m │ │ │ │ ├── FLEXClassBuilder.h │ │ │ │ ├── FLEXClassBuilder.m │ │ │ │ ├── FLEXIvar.h │ │ │ │ ├── FLEXIvar.m │ │ │ │ ├── FLEXMetadataExtras.h │ │ │ │ ├── FLEXMetadataExtras.m │ │ │ │ ├── FLEXMethod.h │ │ │ │ ├── FLEXMethod.m │ │ │ │ ├── FLEXMethodBase.h │ │ │ │ ├── FLEXMethodBase.m │ │ │ │ ├── FLEXMirror.h │ │ │ │ ├── FLEXMirror.m │ │ │ │ ├── FLEXProperty.h │ │ │ │ ├── FLEXProperty.m │ │ │ │ ├── FLEXPropertyAttributes.h │ │ │ │ ├── FLEXPropertyAttributes.m │ │ │ │ ├── FLEXProtocol.h │ │ │ │ ├── FLEXProtocol.m │ │ │ │ ├── FLEXProtocolBuilder.h │ │ │ │ └── FLEXProtocolBuilder.m │ │ │ ├── flex_fishhook.c │ │ │ └── flex_fishhook.h │ └── ViewHierarchy │ │ ├── FLEXHierarchyViewController.h │ │ ├── FLEXHierarchyViewController.m │ │ ├── FLEXImagePreviewViewController.h │ │ ├── FLEXImagePreviewViewController.m │ │ ├── SnapshotExplorer │ │ ├── FHSRangeSlider.h │ │ ├── FHSRangeSlider.m │ │ ├── FHSSnapshotView.h │ │ ├── FHSSnapshotView.m │ │ ├── FHSView.h │ │ ├── FHSView.m │ │ ├── FHSViewController.h │ │ ├── FHSViewController.m │ │ ├── FHSViewSnapshot.h │ │ ├── FHSViewSnapshot.m │ │ └── Scene │ │ │ ├── FHSSnapshotNodes.h │ │ │ ├── FHSSnapshotNodes.m │ │ │ ├── SceneKit+Snapshot.h │ │ │ └── SceneKit+Snapshot.m │ │ └── TreeExplorer │ │ ├── FLEXHierarchyTableViewCell.h │ │ ├── FLEXHierarchyTableViewCell.m │ │ ├── FLEXHierarchyTableViewController.h │ │ └── FLEXHierarchyTableViewController.m │ ├── GCDWebServer │ ├── GCDWebDAVServer │ │ ├── GCDWebDAVServer.h │ │ └── GCDWebDAVServer.m │ ├── GCDWebServer │ │ ├── Core │ │ │ ├── GCDWebServer.h │ │ │ ├── GCDWebServer.m │ │ │ ├── GCDWebServerConnection.h │ │ │ ├── GCDWebServerConnection.m │ │ │ ├── GCDWebServerFunctions.h │ │ │ ├── GCDWebServerFunctions.m │ │ │ ├── GCDWebServerHTTPStatusCodes.h │ │ │ ├── GCDWebServerPrivate.h │ │ │ ├── GCDWebServerRequest.h │ │ │ ├── GCDWebServerRequest.m │ │ │ ├── GCDWebServerResponse.h │ │ │ └── GCDWebServerResponse.m │ │ ├── Requests │ │ │ ├── GCDWebServerDataRequest.h │ │ │ ├── GCDWebServerDataRequest.m │ │ │ ├── GCDWebServerFileRequest.h │ │ │ ├── GCDWebServerFileRequest.m │ │ │ ├── GCDWebServerMultiPartFormRequest.h │ │ │ ├── GCDWebServerMultiPartFormRequest.m │ │ │ ├── GCDWebServerURLEncodedFormRequest.h │ │ │ └── GCDWebServerURLEncodedFormRequest.m │ │ └── Responses │ │ │ ├── GCDWebServerDataResponse.h │ │ │ ├── GCDWebServerDataResponse.m │ │ │ ├── GCDWebServerErrorResponse.h │ │ │ ├── GCDWebServerErrorResponse.m │ │ │ ├── GCDWebServerFileResponse.h │ │ │ ├── GCDWebServerFileResponse.m │ │ │ ├── GCDWebServerStreamedResponse.h │ │ │ └── GCDWebServerStreamedResponse.m │ └── GCDWebUploader │ │ ├── GCDWebUploader.h │ │ └── GCDWebUploader.m │ ├── KSCrash │ ├── Installations │ │ ├── KSCrashInstallation+Alert.h │ │ ├── KSCrashInstallation+Alert.m │ │ ├── KSCrashInstallation+Private.h │ │ ├── KSCrashInstallation.h │ │ ├── KSCrashInstallation.m │ │ ├── KSCrashInstallationConsole.h │ │ ├── KSCrashInstallationConsole.m │ │ ├── KSCrashInstallationEmail.h │ │ ├── KSCrashInstallationEmail.m │ │ ├── KSCrashInstallationQuincyHockey.h │ │ ├── KSCrashInstallationQuincyHockey.m │ │ ├── KSCrashInstallationStandard.h │ │ ├── KSCrashInstallationStandard.m │ │ ├── KSCrashInstallationVictory.h │ │ └── KSCrashInstallationVictory.m │ ├── Recording │ │ ├── KSCrash.h │ │ ├── KSCrash.m │ │ ├── KSCrashC.c │ │ ├── KSCrashC.h │ │ ├── KSCrashCachedData.c │ │ ├── KSCrashCachedData.h │ │ ├── KSCrashDoctor.h │ │ ├── KSCrashDoctor.m │ │ ├── KSCrashReport.c │ │ ├── KSCrashReport.h │ │ ├── KSCrashReportFields.h │ │ ├── KSCrashReportFixer.c │ │ ├── KSCrashReportFixer.h │ │ ├── KSCrashReportStore.c │ │ ├── KSCrashReportStore.h │ │ ├── KSCrashReportVersion.h │ │ ├── KSCrashReportWriter.h │ │ ├── KSSystemCapabilities.h │ │ ├── Monitors │ │ │ ├── KSCrashMonitor.c │ │ │ ├── KSCrashMonitor.h │ │ │ ├── KSCrashMonitorContext.h │ │ │ ├── KSCrashMonitorType.c │ │ │ ├── KSCrashMonitorType.h │ │ │ ├── KSCrashMonitor_AppState.c │ │ │ ├── KSCrashMonitor_AppState.h │ │ │ ├── KSCrashMonitor_CPPException.cpp │ │ │ ├── KSCrashMonitor_CPPException.h │ │ │ ├── KSCrashMonitor_Deadlock.h │ │ │ ├── KSCrashMonitor_Deadlock.m │ │ │ ├── KSCrashMonitor_MachException.c │ │ │ ├── KSCrashMonitor_MachException.h │ │ │ ├── KSCrashMonitor_NSException.h │ │ │ ├── KSCrashMonitor_NSException.m │ │ │ ├── KSCrashMonitor_Signal.c │ │ │ ├── KSCrashMonitor_Signal.h │ │ │ ├── KSCrashMonitor_System.h │ │ │ ├── KSCrashMonitor_System.m │ │ │ ├── KSCrashMonitor_User.c │ │ │ ├── KSCrashMonitor_User.h │ │ │ ├── KSCrashMonitor_Zombie.c │ │ │ └── KSCrashMonitor_Zombie.h │ │ └── Tools │ │ │ ├── KSCPU.c │ │ │ ├── KSCPU.h │ │ │ ├── KSCPU_Apple.h │ │ │ ├── KSCPU_arm.c │ │ │ ├── KSCPU_arm64.c │ │ │ ├── KSCPU_x86_32.c │ │ │ ├── KSCPU_x86_64.c │ │ │ ├── KSCxaThrowSwapper.c │ │ │ ├── KSCxaThrowSwapper.h │ │ │ ├── KSDate.c │ │ │ ├── KSDate.h │ │ │ ├── KSDebug.c │ │ │ ├── KSDebug.h │ │ │ ├── KSDemangle_CPP.cpp │ │ │ ├── KSDemangle_CPP.h │ │ │ ├── KSDemangle_Swift.cpp │ │ │ ├── KSDemangle_Swift.h │ │ │ ├── KSDynamicLinker.c │ │ │ ├── KSDynamicLinker.h │ │ │ ├── KSFileUtils.c │ │ │ ├── KSFileUtils.h │ │ │ ├── KSID.c │ │ │ ├── KSID.h │ │ │ ├── KSJSONCodec.c │ │ │ ├── KSJSONCodec.h │ │ │ ├── KSJSONCodecObjC.h │ │ │ ├── KSJSONCodecObjC.m │ │ │ ├── KSLogger.c │ │ │ ├── KSLogger.h │ │ │ ├── KSMach.c │ │ │ ├── KSMach.h │ │ │ ├── KSMachineContext.c │ │ │ ├── KSMachineContext.h │ │ │ ├── KSMachineContext_Apple.h │ │ │ ├── KSMemory.c │ │ │ ├── KSMemory.h │ │ │ ├── KSObjC.c │ │ │ ├── KSObjC.h │ │ │ ├── KSObjCApple.h │ │ │ ├── KSPlatformSpecificDefines.h │ │ │ ├── KSSignalInfo.c │ │ │ ├── KSSignalInfo.h │ │ │ ├── KSStackCursor.c │ │ │ ├── KSStackCursor.h │ │ │ ├── KSStackCursor_Backtrace.c │ │ │ ├── KSStackCursor_Backtrace.h │ │ │ ├── KSStackCursor_MachineContext.c │ │ │ ├── KSStackCursor_MachineContext.h │ │ │ ├── KSStackCursor_SelfThread.c │ │ │ ├── KSStackCursor_SelfThread.h │ │ │ ├── KSString.c │ │ │ ├── KSString.h │ │ │ ├── KSSymbolicator.c │ │ │ ├── KSSymbolicator.h │ │ │ ├── KSSysCtl.c │ │ │ ├── KSSysCtl.h │ │ │ ├── KSThread.c │ │ │ ├── KSThread.h │ │ │ ├── KSgetsect.c │ │ │ ├── KSgetsect.h │ │ │ ├── NSError+SimpleConstructor.h │ │ │ └── NSError+SimpleConstructor.m │ ├── Reporting │ │ ├── Filters │ │ │ ├── KSCrashReportFilter.h │ │ │ ├── KSCrashReportFilterAlert.h │ │ │ ├── KSCrashReportFilterAlert.m │ │ │ ├── KSCrashReportFilterAppleFmt.h │ │ │ ├── KSCrashReportFilterAppleFmt.m │ │ │ ├── KSCrashReportFilterBasic.h │ │ │ ├── KSCrashReportFilterBasic.m │ │ │ ├── KSCrashReportFilterGZip.h │ │ │ ├── KSCrashReportFilterGZip.m │ │ │ ├── KSCrashReportFilterJSON.h │ │ │ ├── KSCrashReportFilterJSON.m │ │ │ ├── KSCrashReportFilterSets.h │ │ │ ├── KSCrashReportFilterSets.m │ │ │ ├── KSCrashReportFilterStringify.h │ │ │ ├── KSCrashReportFilterStringify.m │ │ │ └── Tools │ │ │ │ ├── Container+DeepSearch.h │ │ │ │ ├── Container+DeepSearch.m │ │ │ │ ├── KSVarArgs.h │ │ │ │ ├── NSData+KSGZip.h │ │ │ │ └── NSData+KSGZip.m │ │ ├── Sinks │ │ │ ├── KSCrashReportSinkConsole.h │ │ │ ├── KSCrashReportSinkConsole.m │ │ │ ├── KSCrashReportSinkEMail.h │ │ │ ├── KSCrashReportSinkEMail.m │ │ │ ├── KSCrashReportSinkQuincyHockey.h │ │ │ ├── KSCrashReportSinkQuincyHockey.m │ │ │ ├── KSCrashReportSinkStandard.h │ │ │ ├── KSCrashReportSinkStandard.m │ │ │ ├── KSCrashReportSinkVictory.h │ │ │ └── KSCrashReportSinkVictory.m │ │ └── Tools │ │ │ ├── KSCString.h │ │ │ ├── KSCString.m │ │ │ ├── KSHTTPMultipartPostBody.h │ │ │ ├── KSHTTPMultipartPostBody.m │ │ │ ├── KSHTTPRequestSender.h │ │ │ ├── KSHTTPRequestSender.m │ │ │ ├── KSReachabilityKSCrash.h │ │ │ ├── KSReachabilityKSCrash.m │ │ │ ├── NSMutableData+AppendUTF8.h │ │ │ ├── NSMutableData+AppendUTF8.m │ │ │ ├── NSString+URLEncode.h │ │ │ └── NSString+URLEncode.m │ ├── llvm │ │ ├── ADT │ │ │ ├── KSOptional.h │ │ │ ├── None.h │ │ │ └── StringRef.h │ │ ├── Config │ │ │ └── llvm-config.h │ │ ├── LICENSE.TXT │ │ └── Support │ │ │ ├── AlignOf.h │ │ │ ├── Casting.h │ │ │ ├── Compiler.h │ │ │ └── type_traits.h │ └── swift │ │ ├── Basic │ │ ├── Config.h │ │ ├── Context.cpp │ │ ├── Demangle.cpp │ │ ├── Demangle.h │ │ ├── DemangleNodes.def │ │ ├── DemangleNodes.h │ │ ├── Demangler.cpp │ │ ├── Demangler.h │ │ ├── Fallthrough.h │ │ ├── LLVM.h │ │ ├── Malloc.h │ │ ├── ManglingMacros.h │ │ ├── ManglingUtils.cpp │ │ ├── ManglingUtils.h │ │ ├── NodePrinter.cpp │ │ ├── OldDemangler.cpp │ │ ├── Platform.h │ │ ├── Punycode.cpp │ │ ├── Punycode.h │ │ ├── ReferenceStorage.def │ │ ├── STLExtras.h │ │ ├── StandardTypesMangling.def │ │ ├── SwiftDemangle.h │ │ ├── ValueWitnessMangling.def │ │ └── Visibility.h │ │ ├── LICENSE.txt │ │ └── SwiftStrings.h │ ├── NWPusher │ ├── NWHub.h │ ├── NWHub.m │ ├── NWNotification.h │ ├── NWNotification.m │ ├── NWPushFeedback.h │ ├── NWPushFeedback.m │ ├── NWPusher.h │ ├── NWPusher.m │ ├── NWSSLConnection.h │ ├── NWSSLConnection.m │ ├── NWSecTools.h │ ├── NWSecTools.m │ ├── NWType.h │ └── NWType.m │ ├── Reflex │ ├── EchoExtensions.swift │ ├── FLEXSwiftMetadatas.swift │ ├── FLEXSwiftMirror.swift │ ├── FLExtensions.swift │ └── PointerExtensions.swift │ ├── RuntimeBrowser │ ├── RTBClass.h │ ├── RTBClass.m │ ├── RTBMethod.h │ ├── RTBMethod.m │ ├── RTBProtocol.h │ ├── RTBProtocol.m │ ├── RTBRuntime.h │ ├── RTBRuntime.m │ ├── RTBRuntimeHeader.h │ ├── RTBRuntimeHeader.m │ ├── RTBTypeDecoder.h │ ├── RTBTypeDecoder.m │ ├── RTBTypeDecoder2.h │ └── RTBTypeDecoder2.m │ └── swift-atomics │ ├── Atomics │ ├── AtomicBool.swift │ ├── AtomicInteger.swift │ ├── AtomicLazyReference.swift │ ├── AtomicMemoryOrderings.swift │ ├── AtomicOptional.swift │ ├── AtomicRawRepresentable.swift │ ├── AtomicStrongReference.swift │ ├── AtomicValue.swift │ ├── DoubleWord.swift │ ├── HighLevelTypes.swift │ ├── IntegerConformances.swift │ └── PointerConformances.swift │ └── _AtomicsShims │ ├── _AtomicsShims.c │ └── _AtomicsShims.h ├── FWDebug_Server.gif ├── Framework └── FWDebug.xcframework │ ├── Info.plist │ ├── ios-arm64 │ └── FWDebug.framework │ │ ├── FWDebug │ │ ├── GCDWebUploader.bundle │ │ └── Contents │ │ │ ├── Info.plist │ │ │ └── Resources │ │ │ ├── css │ │ │ ├── bootstrap-theme.css │ │ │ ├── bootstrap.css │ │ │ ├── debug.css │ │ │ ├── index.css │ │ │ ├── jquery.fileupload.css │ │ │ ├── logger.css │ │ │ ├── screenshot.css │ │ │ └── url.css │ │ │ ├── debug.html │ │ │ ├── en.lproj │ │ │ └── Localizable.strings │ │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ ├── index.html │ │ │ ├── js │ │ │ ├── bootstrap.min.js │ │ │ ├── debug.js │ │ │ ├── eruda.min.js │ │ │ ├── html5shiv.min.js │ │ │ ├── index.js │ │ │ ├── jquery.fileupload.js │ │ │ ├── jquery.iframe-transport.js │ │ │ ├── jquery.jeditable.js │ │ │ ├── jquery.min.js │ │ │ ├── jquery.ui.widget.js │ │ │ ├── logger.js │ │ │ ├── respond.min.js │ │ │ ├── screenshot.js │ │ │ ├── tmpl.min.js │ │ │ ├── url.js │ │ │ └── vconsole.min.js │ │ │ ├── logger.html │ │ │ ├── screenshot.html │ │ │ └── url.html │ │ ├── Headers │ │ ├── CallAccessor.h │ │ ├── FLEXBlockDescription.h │ │ ├── FLEXClassBuilder.h │ │ ├── FLEXIvar.h │ │ ├── FLEXMetadataExtras.h │ │ ├── FLEXMethod.h │ │ ├── FLEXMethodBase.h │ │ ├── FLEXMirror.h │ │ ├── FLEXObjcInternal.h │ │ ├── FLEXProperty.h │ │ ├── FLEXPropertyAttributes.h │ │ ├── FLEXProtocol.h │ │ ├── FLEXProtocolBuilder.h │ │ ├── FLEXRuntime+UIKitHelpers.h │ │ ├── FLEXRuntimeConstants.h │ │ ├── FLEXRuntimeSafety.h │ │ ├── FLEXSwiftInternal.h │ │ ├── FLEXTableViewSection.h │ │ ├── FLEXTypeEncodingParser.h │ │ ├── FWDebug-Swift.h │ │ ├── FWDebug-umbrella.h │ │ ├── FWDebug.h │ │ ├── FWDebugManager.h │ │ ├── Functions.h │ │ ├── ImageInspection.h │ │ ├── KnownMetadata.h │ │ ├── NSArray+FLEX.h │ │ ├── ValueWitnessTable.h │ │ └── _AtomicsShims.h │ │ ├── Info.plist │ │ └── Modules │ │ ├── FWDebug.swiftmodule │ │ ├── arm64-apple-ios.abi.json │ │ ├── arm64-apple-ios.private.swiftinterface │ │ ├── arm64-apple-ios.swiftdoc │ │ └── arm64-apple-ios.swiftinterface │ │ └── module.modulemap │ └── ios-arm64_x86_64-simulator │ └── FWDebug.framework │ ├── FWDebug │ ├── GCDWebUploader.bundle │ └── Contents │ │ ├── Info.plist │ │ └── Resources │ │ ├── css │ │ ├── bootstrap-theme.css │ │ ├── bootstrap.css │ │ ├── debug.css │ │ ├── index.css │ │ ├── jquery.fileupload.css │ │ ├── logger.css │ │ ├── screenshot.css │ │ └── url.css │ │ ├── debug.html │ │ ├── en.lproj │ │ └── Localizable.strings │ │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── index.html │ │ ├── js │ │ ├── bootstrap.min.js │ │ ├── debug.js │ │ ├── eruda.min.js │ │ ├── html5shiv.min.js │ │ ├── index.js │ │ ├── jquery.fileupload.js │ │ ├── jquery.iframe-transport.js │ │ ├── jquery.jeditable.js │ │ ├── jquery.min.js │ │ ├── jquery.ui.widget.js │ │ ├── logger.js │ │ ├── respond.min.js │ │ ├── screenshot.js │ │ ├── tmpl.min.js │ │ ├── url.js │ │ └── vconsole.min.js │ │ ├── logger.html │ │ ├── screenshot.html │ │ └── url.html │ ├── Headers │ ├── CallAccessor.h │ ├── FLEXBlockDescription.h │ ├── FLEXClassBuilder.h │ ├── FLEXIvar.h │ ├── FLEXMetadataExtras.h │ ├── FLEXMethod.h │ ├── FLEXMethodBase.h │ ├── FLEXMirror.h │ ├── FLEXObjcInternal.h │ ├── FLEXProperty.h │ ├── FLEXPropertyAttributes.h │ ├── FLEXProtocol.h │ ├── FLEXProtocolBuilder.h │ ├── FLEXRuntime+UIKitHelpers.h │ ├── FLEXRuntimeConstants.h │ ├── FLEXRuntimeSafety.h │ ├── FLEXSwiftInternal.h │ ├── FLEXTableViewSection.h │ ├── FLEXTypeEncodingParser.h │ ├── FWDebug-Swift.h │ ├── FWDebug-umbrella.h │ ├── FWDebug.h │ ├── FWDebugManager.h │ ├── Functions.h │ ├── ImageInspection.h │ ├── KnownMetadata.h │ ├── NSArray+FLEX.h │ ├── ValueWitnessTable.h │ └── _AtomicsShims.h │ ├── Info.plist │ ├── Modules │ ├── FWDebug.swiftmodule │ │ ├── arm64-apple-ios-simulator.abi.json │ │ ├── arm64-apple-ios-simulator.private.swiftinterface │ │ ├── arm64-apple-ios-simulator.swiftdoc │ │ ├── arm64-apple-ios-simulator.swiftinterface │ │ ├── x86_64-apple-ios-simulator.abi.json │ │ ├── x86_64-apple-ios-simulator.private.swiftinterface │ │ ├── x86_64-apple-ios-simulator.swiftdoc │ │ └── x86_64-apple-ios-simulator.swiftinterface │ └── module.modulemap │ └── _CodeSignature │ └── CodeResources ├── LICENSE ├── Package.swift ├── README.md ├── README_CN.md └── _Pods.xcodeproj /Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildSystemType 6 | Latest 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Example.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Example/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // Example 4 | // 5 | // Created by wuyong on 17/2/16. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-1024.0@1x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-1024.0@1x.jpg -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-20.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-20.0@1x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-20.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-20.0@2x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-20.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-20.0@3x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-29.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-29.0@1x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-29.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-29.0@2x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-29.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-29.0@3x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-40.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-40.0@1x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-40.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-40.0@2x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-40.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-40.0@3x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-60.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-60.0@2x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-60.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-60.0@3x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-76.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-76.0@1x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-76.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-76.0@2x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Example/Example/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Example/Example-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import "ViewController.h" 6 | -------------------------------------------------------------------------------- /Example/Example/ObjectivecController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ObjectivecController.h 3 | // Example 4 | // 5 | // Created by wuyong on 2018/3/2. 6 | // Copyright © 2018年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ObjectivecController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Example/SwiftHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftHeader.h 3 | // Example 4 | // 5 | // Created by wuyong on 2018/3/2. 6 | // Copyright © 2018年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #ifndef SwiftHeader_h 10 | #define SwiftHeader_h 11 | 12 | #import "Example-Swift.h" 13 | 14 | #endif /* SwiftHeader_h */ 15 | -------------------------------------------------------------------------------- /Example/Example/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // Example 4 | // 5 | // Created by wuyong on 17/2/16. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /Example/Example/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Example 4 | // 5 | // Created by wuyong on 17/2/16. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | source 'https://github.com/CocoaPods/Specs.git' 2 | platform :ios, '11.0' 3 | use_frameworks! 4 | 5 | target 'Example' do 6 | pod 'FWDebug', :path => '../' 7 | end 8 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FWDebug (6.0.2) 3 | 4 | DEPENDENCIES: 5 | - FWDebug (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | FWDebug: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | FWDebug: 2afdea4e27cb80d6aefbd52079b4841f787f5cee 13 | 14 | PODFILE CHECKSUM: bfd25050ff2f8ce8d3b20e2e93e52d3045df26e7 15 | 16 | COCOAPODS: 1.16.2 17 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FWDebug (6.0.2) 3 | 4 | DEPENDENCIES: 5 | - FWDebug (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | FWDebug: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | FWDebug: 2afdea4e27cb80d6aefbd52079b4841f787f5cee 13 | 14 | PODFILE CHECKSUM: bfd25050ff2f8ce8d3b20e2e93e52d3045df26e7 15 | 16 | COCOAPODS: 1.16.2 17 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FWDebug/FWDebug-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 6.0.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FWDebug/FWDebug-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_FWDebug : NSObject 3 | @end 4 | @implementation PodsDummy_FWDebug 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FWDebug/FWDebug-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FWDebug/FWDebug-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "FWDebug.h" 14 | #import "FWDebugManager.h" 15 | #import "_AtomicsShims.h" 16 | #import "CallAccessor.h" 17 | #import "Functions.h" 18 | #import "ImageInspection.h" 19 | #import "KnownMetadata.h" 20 | #import "ValueWitnessTable.h" 21 | #import "FLEXTableViewSection.h" 22 | #import "FLEXObjcInternal.h" 23 | #import "FLEXRuntimeConstants.h" 24 | #import "FLEXRuntimeSafety.h" 25 | #import "FLEXSwiftInternal.h" 26 | #import "FLEXTypeEncodingParser.h" 27 | #import "FLEXBlockDescription.h" 28 | #import "FLEXClassBuilder.h" 29 | #import "FLEXIvar.h" 30 | #import "FLEXMetadataExtras.h" 31 | #import "FLEXMethod.h" 32 | #import "FLEXMethodBase.h" 33 | #import "FLEXMirror.h" 34 | #import "FLEXProperty.h" 35 | #import "FLEXPropertyAttributes.h" 36 | #import "FLEXProtocol.h" 37 | #import "FLEXProtocolBuilder.h" 38 | #import "NSArray+FLEX.h" 39 | #import "FLEXRuntime+UIKitHelpers.h" 40 | 41 | FOUNDATION_EXPORT double FWDebugVersionNumber; 42 | FOUNDATION_EXPORT const unsigned char FWDebugVersionString[]; 43 | 44 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FWDebug/FWDebug.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_CXX_LANGUAGE_STANDARD = gnu++11 2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FWDebug 4 | GCC_ENABLE_CPP_EXCEPTIONS = YES 5 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 6 | HEADER_SEARCH_PATHS = $(inherited) $(SDKROOT)/usr/include/libxml2 7 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift 8 | OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"xml2" -l"z" -framework "Foundation" -framework "UIKit" 9 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 10 | PODS_BUILD_DIR = ${BUILD_DIR} 11 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 12 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 13 | PODS_ROOT = ${SRCROOT} 14 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 15 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 16 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 17 | SKIP_INSTALL = YES 18 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 19 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FWDebug/FWDebug.modulemap: -------------------------------------------------------------------------------- 1 | framework module FWDebug { 2 | umbrella header "FWDebug-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FWDebug/FWDebug.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_CXX_LANGUAGE_STANDARD = gnu++11 2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FWDebug 4 | GCC_ENABLE_CPP_EXCEPTIONS = YES 5 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 6 | HEADER_SEARCH_PATHS = $(inherited) $(SDKROOT)/usr/include/libxml2 7 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift 8 | OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"xml2" -l"z" -framework "Foundation" -framework "UIKit" 9 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 10 | PODS_BUILD_DIR = ${BUILD_DIR} 11 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 12 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 13 | PODS_ROOT = ${SRCROOT} 14 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 15 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 16 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 17 | SKIP_INSTALL = YES 18 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 19 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Example { 2 | umbrella header "Pods-Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /FWDebug.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/FWDebug.gif -------------------------------------------------------------------------------- /FWDebug/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/FWDebug/Assets/.gitkeep -------------------------------------------------------------------------------- /FWDebug/Assets/GCDWebUploader.bundle/Contents/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/FWDebug/Assets/GCDWebUploader.bundle/Contents/Info.plist -------------------------------------------------------------------------------- /FWDebug/Assets/GCDWebUploader.bundle/Contents/Resources/css/jquery.fileupload.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /* 3 | * jQuery File Upload Plugin CSS 1.3.0 4 | * https://github.com/blueimp/jQuery-File-Upload 5 | * 6 | * Copyright 2013, Sebastian Tschan 7 | * https://blueimp.net 8 | * 9 | * Licensed under the MIT license: 10 | * http://www.opensource.org/licenses/MIT 11 | */ 12 | 13 | .fileinput-button { 14 | position: relative; 15 | overflow: hidden; 16 | } 17 | .fileinput-button input { 18 | position: absolute; 19 | top: 0; 20 | right: 0; 21 | margin: 0; 22 | opacity: 0; 23 | -ms-filter: 'alpha(opacity=0)'; 24 | font-size: 200px; 25 | direction: ltr; 26 | cursor: pointer; 27 | } 28 | 29 | /* Fixes for IE < 8 */ 30 | @media screen\9 { 31 | .fileinput-button input { 32 | filter: alpha(opacity=0); 33 | font-size: 100%; 34 | height: 100%; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /FWDebug/Assets/GCDWebUploader.bundle/Contents/Resources/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "PROLOGUE" = "

Drag & drop files on this window or use the \"Upload Files…\" button to upload new files.

"; 2 | "EPILOGUE" = ""; 3 | "FOOTER_FORMAT" = "%@ %@"; 4 | -------------------------------------------------------------------------------- /FWDebug/Assets/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/FWDebug/Assets/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /FWDebug/Assets/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/FWDebug/Assets/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /FWDebug/Assets/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/FWDebug/Assets/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /FWDebug/Assets/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/FWDebug/Assets/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /FWDebug/Assets/GCDWebUploader.bundle/Contents/Resources/js/tmpl.min.js: -------------------------------------------------------------------------------- 1 | !function(a){"use strict";var b=function(a,c){var d=/[^\w\-\.:]/.test(a)?new Function(b.arg+",tmpl","var _e=tmpl.encode"+b.helper+",_s='"+a.replace(b.regexp,b.func)+"';return _s;"):b.cache[a]=b.cache[a]||b(b.load(a));return c?d(c,b):function(a){return d(a,b)}};b.cache={},b.load=function(a){return document.getElementById(a).innerHTML},b.regexp=/([\s'\\])(?!(?:[^{]|\{(?!%))*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g,b.func=function(a,b,c,d,e,f){return b?{"\n":"\\n","\r":"\\r"," ":"\\t"," ":" "}[b]||"\\"+b:c?"="===c?"'+_e("+d+")+'":"'+("+d+"==null?'':"+d+")+'":e?"';":f?"_s+='":void 0},b.encReg=/[<>&"'\x00]/g,b.encMap={"<":"<",">":">","&":"&",'"':""","'":"'"},b.encode=function(a){return(null==a?"":""+a).replace(b.encReg,function(a){return b.encMap[a]||""})},b.arg="o",b.helper=",print=function(s,e){_s+=e?(s==null?'':s):_e(s);},include=function(s,d){_s+=tmpl(s,d);}","function"==typeof define&&define.amd?define(function(){return b}):a.tmpl=b}(this); -------------------------------------------------------------------------------- /FWDebug/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/FWDebug/Classes/.gitkeep -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FBRetainCycleDetector/FBRetainCycleDetector+FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // FBRetainCycleDetector+FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 2017/12/4. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FBRetainCycleDetector.h" 10 | 11 | @interface FBRetainCycleDetector (FWDebug) 12 | 13 | + (void)fwDebugLaunch; 14 | 15 | + (NSSet *)fwDebugRetainCycleWithObject:(id)object; 16 | 17 | + (NSSet *)fwDebugRetainCycleWithObjects:(NSArray *)objects; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FBRetainCycleDetector/FBRetainCycleDetector+FWDebug.m: -------------------------------------------------------------------------------- 1 | // 2 | // FBRetainCycleDetector+FWDebug.m 3 | // FWDebug 4 | // 5 | // Created by wuyong on 2017/12/4. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FBRetainCycleDetector+FWDebug.h" 10 | #import "FWDebugAppConfig.h" 11 | #import "FWDebugManager.h" 12 | 13 | @implementation FBRetainCycleDetector (FWDebug) 14 | 15 | + (void)fwDebugLaunch 16 | { 17 | [FBAssociationManager hook]; 18 | } 19 | 20 | + (NSSet *)fwDebugRetainCycleWithObject:(id)object 21 | { 22 | if (!object) { 23 | return nil; 24 | } 25 | 26 | FBRetainCycleDetector *detector = [[FBRetainCycleDetector alloc] init]; 27 | [detector addCandidate:object]; 28 | return [detector findRetainCyclesWithMaxCycleLength:[FWDebugAppConfig retainCycleDepth]]; 29 | } 30 | 31 | + (NSSet *)fwDebugRetainCycleWithObjects:(NSArray *)objects 32 | { 33 | if (objects.count == 0) { 34 | return nil; 35 | } 36 | 37 | FBRetainCycleDetector *detector = [[FBRetainCycleDetector alloc] init]; 38 | for (id object in objects) { 39 | [detector addCandidate:object]; 40 | } 41 | return [detector findRetainCyclesWithMaxCycleLength:[FWDebugAppConfig retainCycleDepth]]; 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FBRetainCycleDetector/FWDebugRetainCycle.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebugRetainCycle.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 2017/12/4. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | 11 | @interface FWDebugRetainCycle : FLEXTableViewController 12 | 13 | @property (nonatomic, strong) NSArray *retainCycles; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FLEXExplorerToolbar+FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXExplorerToolbar+FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/27. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXExplorerToolbar.h" 10 | #import "FLEXExplorerToolbarItem.h" 11 | 12 | @class FWDebugFpsData; 13 | 14 | @interface FLEXExplorerToolbar (FWDebug) 15 | 16 | + (void)fwDebugLoad; 17 | 18 | - (FLEXExplorerToolbarItem *)fwDebugFpsItem; 19 | 20 | @end 21 | 22 | @interface FLEXExplorerToolbarItem (FWDebug) 23 | 24 | @property (nonatomic, assign) BOOL fwDebugShowRuler; 25 | @property (nonatomic, assign) BOOL fwDebugIsRuler; 26 | 27 | - (void)setFpsData:(FWDebugFpsData *)fpsData; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FLEXExplorerViewController+FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXExplorerViewController+FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 2022/4/25. 6 | // 7 | 8 | #import "FLEXExplorerViewController.h" 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface FLEXExplorerViewController (FWDebug) 13 | 14 | + (void)fwDebugLoad; 15 | 16 | - (BOOL)fwDebugRemoveOverlay; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FLEXFileBrowserController+FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXFileBrowserController+FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/24. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXFileBrowserController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FLEXFileBrowserController (FWDebug) 14 | 15 | + (void)fwDebugLoad; 16 | 17 | @end 18 | 19 | @interface UINavigationController (FWDebug) 20 | 21 | @property (nonatomic, copy, nullable) BOOL (^fwDebugFileHandler)(FLEXFileBrowserController *fileBrowser, NSString *filePath); 22 | 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FLEXManager+FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXManager+FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/28. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXManager.h" 10 | #import "FWDebugFpsInfo.h" 11 | 12 | @interface FLEXManager (FWDebug) 13 | 14 | + (void)fwDebugLoad; 15 | 16 | + (void)fwDebugLaunch; 17 | 18 | + (BOOL)fwDebugVisible; 19 | 20 | - (FWDebugFpsData *)fwDebugFpsData; 21 | 22 | + (void)fwDebugOpenUrl:(NSString *)text; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FLEXOSLogController+FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXOSLogController+FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 21/5/26. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXOSLogController.h" 10 | 11 | @interface FLEXOSLogController (FWDebug) 12 | 13 | + (void)fwDebugLoad; 14 | 15 | + (void)swizzleSystemLog; 16 | 17 | + (void)appendMessage:(NSString *)msg; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FLEXObjectExplorerViewController+FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXObjectExplorerViewController+FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/23. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXObjectExplorerViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FLEXObjectExplorerViewController (FWDebug) 14 | 15 | + (void)fwDebugLoad; 16 | 17 | + (void)fwDebugRegisterEntry:(NSString *)entryName title:(NSString *)title filter:(nullable BOOL (^)(id object))filter actionBlock:(void (^)(__kindof UIViewController *viewController, id object))actionBlock; 18 | 19 | + (void)fwDebugRemoveEntry:(NSString *)entryName; 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FLEXObjectListViewController+FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXObjectListViewController+FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 2018/1/4. 6 | // Copyright © 2018年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXObjectListViewController.h" 10 | 11 | @interface FLEXObjectListViewController (FWDebug) 12 | 13 | + (void)fwDebugLoad; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FWDebugAppConfig.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebugAppSecret.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 2017/7/4. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | 11 | @interface FWDebugAppConfig : FLEXTableViewController 12 | 13 | + (void)fwDebugLoad; 14 | 15 | + (void)fwDebugLaunch; 16 | 17 | + (BOOL)isAppLocked; 18 | 19 | + (BOOL)filterSystemLog; 20 | 21 | + (BOOL)hookSystemLog; 22 | 23 | + (BOOL)traceVCLife; 24 | 25 | + (BOOL)traceVCRequest; 26 | 27 | + (NSString *)traceVCUrls; 28 | 29 | + (NSInteger)retainCycleDepth; 30 | 31 | + (void)webViewInjectJavascript; 32 | 33 | + (void)logFile:(NSString *)message; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FWDebugFakeLocation.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebugFakeLocation.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 2017/7/4. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | 11 | @interface FWDebugFakeLocation : FLEXTableViewController 12 | 13 | + (void)fwDebugLoad; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FWDebugFakeNotification.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebugFakeNotification.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 2019/4/13. 6 | // Copyright © 2019 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | 11 | @interface FWDebugFakeNotification : FLEXTableViewController 12 | 13 | + (void)fwDebugLaunch; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FWDebugFpsInfo.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebugFpsInfo.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/28. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "FBRetainCycleDetector.h" 12 | 13 | @interface FWDebugFpsData : NSObject 14 | 15 | // FPS,取整数:(int)round(fps) 16 | @property (nonatomic, assign) float fps; 17 | 18 | // 占用内存,单位MB 19 | @property (nonatomic, assign) float memory; 20 | 21 | // CPU占比,0-100 22 | @property (nonatomic, assign) float cpu; 23 | 24 | // FPS结果,1好 0警告 -1不好 25 | @property (nonatomic, assign) NSInteger fpsState; 26 | 27 | // 占用内存结果,1好 0警告 -1不好 28 | @property (nonatomic, assign) NSInteger memoryState; 29 | 30 | // CPU占比结果,1好 0警告 -1不好 31 | @property (nonatomic, assign) NSInteger cpuState; 32 | 33 | @end 34 | 35 | @protocol FWDebugFpsInfoDelegate 36 | 37 | - (void)fwDebugFpsInfoChanged:(FWDebugFpsData *)fpsData; 38 | 39 | @end 40 | 41 | @interface FWDebugFpsInfo : NSObject 42 | 43 | @property (nonatomic, weak) id delegate; 44 | 45 | @property (nonatomic, strong, readonly) FWDebugFpsData *fpsData; 46 | 47 | - (void)start; 48 | 49 | - (void)stop; 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FWDebugSystemInfo.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebugDeviceInfo.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/23. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FWDebugSystemInfo : FLEXTableViewController 14 | 15 | + (void)fwDebugLoad; 16 | 17 | + (void)registerEntry:(NSString *)entryName entryBlock:(NSString * _Nullable (^)(void))entryBlock; 18 | 19 | + (void)removeEntry:(NSString *)entryName; 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/FLEX/FWDebugTimeProfiler.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebugTimeProfiler.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 2020/5/18. 6 | // Copyright © 2020 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FWDebugTimeProfiler : FLEXTableViewController 14 | 15 | - (instancetype)initWithObject:(id)object; 16 | 17 | + (void)fwDebugLoad; 18 | 19 | + (void)enableTraceVCLife; 20 | 21 | + (void)enableTraceVCRequest; 22 | 23 | + (double)currentTime; 24 | 25 | + (NSTimeInterval)appLaunchedTime; 26 | 27 | + (void)recordEvent:(NSString *)event object:(id)object userInfo:(nullable id)userInfo; 28 | 29 | @end 30 | 31 | NS_ASSUME_NONNULL_END 32 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/GCDWebServer/FWDebugWebServer.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebugGCDWebServer.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/22. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | 11 | @interface FWDebugWebServer : FLEXTableViewController 12 | 13 | + (void)fwDebugLaunch; 14 | 15 | + (void)fwDebugEnableLog; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/KSCrash/FWDebugKSCrashInstallationFile.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebugKSCrashInstallationFile.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/23. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KSCrashInstallation.h" 11 | 12 | @interface FWDebugKSCrashInstallationFile : KSCrashInstallation 13 | 14 | @property(nonatomic, assign) BOOL printAppleFormat; 15 | 16 | + (instancetype)sharedInstance; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/KSCrash/FWDebugKSCrashReportSinkFile.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebugKSCrashReportSinkFile.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/23. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KSCrashReportFilter.h" 11 | 12 | @interface FWDebugKSCrashReportSinkFile : NSObject 13 | 14 | + (FWDebugKSCrashReportSinkFile *)filter; 15 | 16 | - (id )defaultCrashReportFilterSet; 17 | 18 | - (id )defaultCrashReportFilterSetAppleFmt; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/KSCrash/KSCrash+FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // KSCrash+FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/28. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "KSCrash.h" 10 | 11 | @interface KSCrash (FWDebug) 12 | 13 | + (void)fwDebugLaunch; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/Manager/FWDebugManager+FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebugManager+FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 2018/1/4. 6 | // Copyright © 2018年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FWDebugManager.h" 10 | #import 11 | 12 | @interface FWDebugManager (FWDebug) 13 | 14 | + (BOOL)swizzleMethod:(SEL)originalSelector in:(Class)originalClass withBlock:(id (^)(__unsafe_unretained Class targetClass, SEL originalCMD, IMP (^originalIMP)(void)))block; 15 | 16 | + (BOOL)swizzleMethodOnce:(SEL)originalSelector in:(Class)originalClass withBlock:(id (^)(__unsafe_unretained Class targetClass, SEL originalCMD, IMP (^originalIMP)(void)))block; 17 | 18 | + (void)showPrompt:(UIViewController *)viewController security:(BOOL)security title:(NSString *)title message:(NSString *)message text:(NSString *)text block:(void (^)(BOOL confirm, NSString *text))block; 19 | 20 | + (void)showConfirm:(UIViewController *)viewController title:(NSString *)title message:(NSString *)message block:(void (^)(BOOL confirm))block; 21 | 22 | + (UIViewController *)topViewController; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /FWDebug/Classes/Private/RuntimeBrowser/FWDebugRuntimeBrowser.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebugRuntimeBrowser.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/22. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FWDebugRuntimeBrowser : UIViewController 12 | 13 | - (instancetype)initWithClassName:(NSString *)className; 14 | 15 | - (instancetype)initWithProtocolName:(NSString *)protocolName; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Public/FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/20. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FWDebugManager.h" 10 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/CEcho/Builtins.def: -------------------------------------------------------------------------------- 1 | // 2 | // Builtins.def 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2020 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | #ifndef BUILTIN 10 | #define BUILTIN(NAME, SYMBOL) 11 | #endif 12 | 13 | BUILTIN(Int1, Bi1_) 14 | BUILTIN(Int7, Bi7_) 15 | BUILTIN(Int8, Bi8_) 16 | BUILTIN(Int16, Bi16_) 17 | BUILTIN(Int32, Bi32_) 18 | BUILTIN(Int64, Bi64_) 19 | BUILTIN(Int128, Bi128_) 20 | BUILTIN(Int256, Bi256_) 21 | BUILTIN(Int512, Bi512_) 22 | 23 | BUILTIN(Word, Bw) 24 | 25 | BUILTIN(FPIEE16, Bf16_) 26 | BUILTIN(FPIEE32, Bf32_) 27 | BUILTIN(FPIEE64, Bf64_) 28 | BUILTIN(FPIEE80, Bf80_) 29 | BUILTIN(FPIEE128, Bf128_) 30 | 31 | BUILTIN(NativeObject, Bo) 32 | BUILTIN(BridgeObject, Bb) 33 | BUILTIN(RawPointer, Bp) 34 | BUILTIN(UnsafeValueBuffer, BB) 35 | 36 | BUILTIN(UnknownObject, BO) 37 | 38 | #undef BUILTIN 39 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/CEcho/CallAccessor.h: -------------------------------------------------------------------------------- 1 | // 2 | // CallAccessor.h 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | #ifndef CALL_ACCESSOR_H 10 | #define CALL_ACCESSOR_H 11 | 12 | #include 13 | 14 | typedef struct CMetadataResponse { 15 | const void *Metadata; 16 | size_t State; 17 | } CMetadataResponse; 18 | 19 | const CMetadataResponse echo_callAccessor0(const void *ptr, size_t request); 20 | 21 | const CMetadataResponse echo_callAccessor1(const void *ptr, size_t request, 22 | const void *arg0); 23 | 24 | const CMetadataResponse echo_callAccessor2(const void *ptr, size_t request, 25 | const void *arg0, const void *arg1); 26 | 27 | const CMetadataResponse echo_callAccessor3(const void *ptr, size_t request, 28 | const void *arg0, const void *arg1, 29 | const void *arg2); 30 | 31 | // Where args is a list of pointers. 32 | const CMetadataResponse echo_callAccessor(const void *ptr, size_t request, 33 | const void *args); 34 | 35 | #endif /* CALL_ACCESSOR_H */ 36 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/CEcho/Functions.c: -------------------------------------------------------------------------------- 1 | // 2 | // Functions.c 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | #include "Functions.h" 10 | 11 | #if defined(__arm64e__) 12 | #include 13 | 14 | const void *__ptrauth_strip_asda(const void *ptr) { 15 | return ptrauth_strip(ptr, ptrauth_key_asda); 16 | } 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/CEcho/ImageInspectionMachO.c: -------------------------------------------------------------------------------- 1 | // 2 | // ImageInspectionMachO.c 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | #if defined(__MACH__) 10 | 11 | #include "ImageInspection.h" 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/CEcho/KnownMetadata.c: -------------------------------------------------------------------------------- 1 | // 2 | // KnownMetadata.c 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2020 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | #include "KnownMetadata.h" 10 | 11 | // Grab the metadata pointer that's appropriate for Swift. By default, 12 | // getting the address of the reference type metadata points to the full 13 | // metadata which points to the value witness table rather than the kind. 14 | // Move the pointer down one word to be correct. 15 | #define BUILTIN(NAME, SYMBOL) \ 16 | void *getBuiltin##NAME##Metadata() { \ 17 | return &$s##SYMBOL##N + sizeof(void*); \ 18 | } 19 | #include "Builtins.def" 20 | 21 | #undef BUILTIN 22 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/ContextDescriptor/ExtensionDescriptor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ExtensionDescriptor.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | /// An extension descriptor that describes some extension context. 10 | /// 11 | /// ABI Stability: Stable since the following 12 | /// 13 | /// | macOS | iOS/tvOS | watchOS | Linux | Windows | 14 | /// |-------|----------|---------|-------|---------| 15 | /// | 10.14 | 12.2 | 5.2 | NA | NA | 16 | /// 17 | public struct ExtensionDescriptor: ContextDescriptor, LayoutWrapper { 18 | typealias Layout = _ExtensionDescriptor 19 | 20 | /// Backing context descriptor pointer. 21 | public let ptr: UnsafeRawPointer 22 | 23 | /// The mangled name which this extension extends. 24 | /// Ex. If this extension extends Int, this mangled name might be 25 | /// Si or some symbolic reference to Int's context descriptor. 26 | public var extendedContext: UnsafeRawPointer { 27 | address(for: \._extendedContext) 28 | } 29 | } 30 | 31 | extension ExtensionDescriptor: Equatable {} 32 | 33 | struct _ExtensionDescriptor { 34 | let _base: _ContextDescriptor 35 | let _extendedContext: RelativeDirectPointer 36 | } 37 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/ContextDescriptor/ModuleDescriptor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ModuleDescriptor.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2020 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | /// A module descriptor that describes some Swift module. 10 | /// 11 | /// ABI Stability: Stable since the following 12 | /// 13 | /// | macOS | iOS/tvOS | watchOS | Linux | Windows | 14 | /// |-------|----------|---------|-------|---------| 15 | /// | 10.14 | 12.2 | 5.2 | NA | NA | 16 | /// 17 | public struct ModuleDescriptor: ContextDescriptor, LayoutWrapper { 18 | typealias Layout = _ModuleDescriptor 19 | 20 | /// Backing context descriptor pointer. 21 | public let ptr: UnsafeRawPointer 22 | 23 | /// The name of the compiled Swift module. 24 | public var name: String { 25 | address(for: \._name).string 26 | } 27 | } 28 | 29 | extension ModuleDescriptor: Equatable {} 30 | 31 | struct _ModuleDescriptor { 32 | let _base: _ContextDescriptor 33 | let _name: RelativeDirectPointer 34 | } 35 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/Metadata/EnumMetadata.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EnumMetadata.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | /// The metadata structure that represents an `enum` type in Swift. 10 | /// 11 | /// ABI Stability: Stable since the following 12 | /// 13 | /// | macOS | iOS/tvOS | watchOS | Linux | Windows | 14 | /// |-------|----------|---------|-------|---------| 15 | /// | 10.14 | 12.2 | 5.2 | NA | NA | 16 | /// 17 | public struct EnumMetadata: TypeMetadata, LayoutWrapper { 18 | typealias Layout = _EnumMetadata 19 | 20 | /// Backing enum metadata pointer. 21 | public let ptr: UnsafeRawPointer 22 | 23 | /// The enum context descriptor that describes this enum. 24 | public var descriptor: EnumDescriptor! { 25 | EnumDescriptor(ptr: layout._descriptor.signed) 26 | } 27 | } 28 | 29 | extension EnumMetadata: Equatable {} 30 | 31 | struct _EnumMetadata { 32 | let _kind: Int 33 | let _descriptor: SignedPointer 34 | } 35 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/Metadata/ForeignClassMetadata.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ForeignClassMetadata.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2020 - 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | /// The metadata structure that represents a foreign reference counted object 10 | /// from another language that Swift observes. 11 | public struct ForeignClassMetadata: Metadata, LayoutWrapper { 12 | typealias Layout = _ForeignClassMetadata 13 | 14 | /// Backing foreign class metadata pointer. 15 | public let ptr: UnsafeRawPointer 16 | } 17 | 18 | extension ForeignClassMetadata: Equatable {} 19 | 20 | struct _ForeignClassMetadata { 21 | let _kind: Int 22 | let _descriptor: ClassDescriptor 23 | let _superclass: Any.Type? 24 | } 25 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/Metadata/HeapLocalVariableMetadata.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HeapLocalVariableMetadata.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2020 - 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | /// The metadata structure that represents local variables that are heap 10 | /// allocated. 11 | /// 12 | /// ABI Stability: Unstable across all platforms 13 | /// 14 | /// | macOS | iOS/tvOS | watchOS | Linux | Windows | 15 | /// |-------|----------|---------|-------|---------| 16 | /// | NA | NA | NA | NA | NA | 17 | /// 18 | public struct HeapLocalVariableMetadata: Metadata, LayoutWrapper { 19 | typealias Layout = _HeapLocalVariableMetadata 20 | 21 | /// Backing heap local variable metadata pointer. 22 | public let ptr: UnsafeRawPointer 23 | 24 | public var offsetToFirstCapture: Int { 25 | Int(layout._offsetToFirstCapture) 26 | } 27 | 28 | public var captureDescription: UnsafePointer { 29 | layout._captureDescription 30 | } 31 | } 32 | 33 | extension HeapLocalVariableMetadata: Equatable {} 34 | 35 | struct _HeapLocalVariableMetadata { 36 | let _kind: Int 37 | let _offsetToFirstCapture: UInt32 38 | let _captureDescription: UnsafePointer 39 | } 40 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/Metadata/MetatypeMetadata.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MetatypeMetadata.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | /// The metadata structure that represents a metatype wrapping some instance 10 | /// type. 11 | /// 12 | /// ABI Stability: Unstable across all platforms 13 | /// 14 | /// | macOS | iOS/tvOS | watchOS | Linux | Windows | 15 | /// |-------|----------|---------|-------|---------| 16 | /// | NA | NA | NA | NA | NA | 17 | /// 18 | public struct MetatypeMetadata: Metadata, LayoutWrapper { 19 | typealias Layout = _MetatypeMetadata 20 | 21 | /// Backing metatype metadata pointer. 22 | public let ptr: UnsafeRawPointer 23 | 24 | /// The instance type that this metatype wraps. 25 | public var instanceType: Any.Type { 26 | layout._instanceType 27 | } 28 | 29 | /// The metadata for the instance type this metatype wraps. 30 | public var instanceMetadata: Metadata { 31 | reflect(instanceType) 32 | } 33 | } 34 | 35 | extension MetatypeMetadata: Equatable {} 36 | 37 | struct _MetatypeMetadata { 38 | let _kind: Int 39 | let _instanceType: Any.Type 40 | } 41 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/Metadata/OpaqueMetadata.swift: -------------------------------------------------------------------------------- 1 | // 2 | // OpaqueMetadata.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | /// The metadata structure that represents some opaque type in Swift. An opaque 10 | /// type might include a private structure, or perhaps some metadata for the 11 | /// various Builtin types in Swift. 12 | /// 13 | /// ABI Stability: Stable since the following 14 | /// 15 | /// | macOS | iOS/tvOS | watchOS | Linux | Windows | 16 | /// |-------|----------|---------|-------|---------| 17 | /// | 10.14 | 12.2 | 5.2 | NA | NA | 18 | /// 19 | public struct OpaqueMetadata: Metadata { 20 | /// Backing opaque metadata pointer. 21 | public let ptr: UnsafeRawPointer 22 | } 23 | 24 | extension OpaqueMetadata: Equatable {} 25 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/Runtime/HeapObject.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HeapObject.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | /// Some object whose value is being stored on the heap and is being reference 10 | /// counted by the Swift runtime. 11 | /// 12 | /// ABI Stability: Stable since the following 13 | /// 14 | /// | macOS | iOS/tvOS | watchOS | Linux | Windows | 15 | /// |-------|----------|---------|-------|---------| 16 | /// | 10.14 | 12.2 | 5.2 | NA | NA | 17 | /// 18 | public struct HeapObject { 19 | /// The type being stored in this heap object. 20 | public let type: Any.Type 21 | 22 | /// This isn't exposed because I haven't created the structure that 23 | /// correctly represents a heap objects ref count yet. 24 | let _refCount: UInt64 25 | 26 | /// The metadata for the type being stored in this heap object. 27 | public var metadata: Metadata { 28 | reflect(type) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/Utils/FieldType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FieldType.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | // This isn't used anywhere yet... ? 10 | struct FieldType { 11 | let bits: UInt 12 | 13 | var isIndirect: Bool { 14 | bits & 0x1 != 0 15 | } 16 | 17 | var isWeak: Bool { 18 | bits & 0x2 != 0 19 | } 20 | 21 | var metadata: Metadata { 22 | reflect(type) 23 | } 24 | 25 | var type: Any.Type { 26 | let typeMask = UInt.max & ~UInt(MemoryLayout.alignment - 1) 27 | let address = UnsafeRawPointer(bitPattern: bits & typeMask)! 28 | return unsafeBitCast(address, to: Any.Type.self) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/Utils/RelativeDirectPointer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RelativeDirectPointer.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | struct RelativeDirectPointer: RelativePointer { 10 | let offset: Int32 11 | 12 | func pointee(from ptr: UnsafeRawPointer) -> Pointee? { 13 | if isNull { 14 | return nil 15 | } 16 | 17 | return address(from: ptr).load(as: Pointee.self) 18 | } 19 | } 20 | 21 | extension UnsafeRawPointer { 22 | func relativeDirectAddress(as type: T.Type) -> UnsafeRawPointer { 23 | let relativePointer = RelativeDirectPointer( 24 | offset: load(as: Int32.self) 25 | ) 26 | return relativePointer.address(from: self) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/Utils/RelativeIndirectPointer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RelativeIndirectPointer.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | struct RelativeIndirectPointer: RelativePointer { 10 | typealias Pointee = UnsafePointer 11 | 12 | let offset: Int32 13 | 14 | func pointee(from ptr: UnsafeRawPointer) -> Pointee? { 15 | if isNull { 16 | return nil 17 | } 18 | 19 | return address(from: ptr).load(as: Pointee.self) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/Utils/RelativeIndirectablePointer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RelativeIndirectablePointer.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2019 - 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | struct RelativeIndirectablePointer: RelativePointer { 10 | let offset: Int32 11 | 12 | func address(from ptr: UnsafeRawPointer) -> UnsafeRawPointer { 13 | let start = ptr + Int(Int(offset) & ~1) 14 | 15 | if Int(offset) & 1 == 1 { 16 | return start.load(as: UnsafeRawPointer.self) 17 | } else { 18 | return start 19 | } 20 | } 21 | 22 | func pointee(from ptr: UnsafeRawPointer) -> Pointee? { 23 | if isNull { 24 | return nil 25 | } 26 | 27 | return address(from: ptr).load(as: Pointee.self) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Echo/Echo/Utils/SignedPointer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SignedPointer.swift 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | // A wrapper around a pointer who will return the signed version of the wrapped 12 | // pointer through the `signed` property. 13 | struct SignedPointer { 14 | var ptr: UnsafeRawPointer! 15 | 16 | var signed: UnsafeRawPointer! { 17 | ptr 18 | } 19 | } 20 | 21 | // Swift type descriptors are signed with the process independent data key. 22 | #if _ptrauth(_arm64e) 23 | extension SignedPointer where Pointee == ProtocolDescriptor { 24 | var signed: UnsafeRawPointer { 25 | __ptrauth_strip_asda(ptr)! 26 | } 27 | } 28 | 29 | extension SignedPointer where Pointee: TypeContextDescriptor { 30 | var signed: UnsafeRawPointer { 31 | __ptrauth_strip_asda(ptr)! 32 | } 33 | } 34 | 35 | extension SignedPointer where Pointee == ValueWitnessTable { 36 | var signed: UnsafeRawPointer { 37 | __ptrauth_strip_asda(ptr)! 38 | } 39 | } 40 | #endif 41 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Associations/FBAssociationManager.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | /** 12 | FBAssociationManager is a tracker of object associations. For given object it can return all objects that 13 | are being retained by this object with objc_setAssociatedObject & retain policy. 14 | */ 15 | @interface FBAssociationManager : NSObject 16 | 17 | /** 18 | Start tracking associations. It will use fishhook to swizzle C methods: 19 | objc_(set/remove)AssociatedObject and inject some tracker code. 20 | */ 21 | + (void)hook; 22 | 23 | /** 24 | Stop tracking associations, fishhooks. 25 | */ 26 | + (void)unhook; 27 | 28 | /** 29 | For given object return all objects that are retained by it using associated objects. 30 | 31 | @return NSArray of objects associated with given object 32 | */ 33 | + (nullable NSArray *)associationsForObject:(nullable id)object; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Associations/Internal/FBAssociationManager+Internal.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import "FBAssociationManager.h" 10 | #import "FBRetainCycleDetector.h" 11 | 12 | #if _INTERNAL_RCD_ENABLED 13 | 14 | namespace FB { namespace AssociationManager { 15 | 16 | void _threadUnsafeResetAssociationAtKey(id object, void *key); 17 | void _threadUnsafeSetStrongAssociation(id object, void *key, id value); 18 | void _threadUnsafeRemoveAssociations(id object); 19 | 20 | NSArray *associations(id object); 21 | 22 | } } 23 | 24 | #endif 25 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Detector/FBNodeEnumerator.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | @class FBObjectiveCGraphElement; 12 | 13 | /** 14 | FBNodeEnumerator wraps any object graph element (FBObjectiveCGraphElement) and lets you enumerate over its 15 | retained references 16 | */ 17 | @interface FBNodeEnumerator : NSEnumerator 18 | 19 | /** 20 | Designated initializer 21 | */ 22 | - (nonnull instancetype)initWithObject:(nonnull FBObjectiveCGraphElement *)object; 23 | 24 | - (nullable FBNodeEnumerator *)nextObject; 25 | 26 | @property (nonatomic, strong, readonly, nonnull) FBObjectiveCGraphElement *object; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Detector/FBRetainCycleDetector+Internal.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import "FBRetainCycleDetector.h" 10 | 11 | @interface FBRetainCycleDetector () 12 | 13 | // Unit tests 14 | - (NSArray *)_shiftToUnifiedCycle:(NSArray *)array; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Graph/FBObjectiveCBlock.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | #import "FBObjectiveCGraphElement.h" 12 | 13 | @class FBGraphEdgeFilterProvider; 14 | 15 | /** 16 | Object Graph element representing block. 17 | */ 18 | @interface FBObjectiveCBlock : FBObjectiveCGraphElement 19 | @end 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Graph/FBObjectiveCObject.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | #import "FBObjectiveCGraphElement.h" 12 | 13 | @class FBGraphEdgeFilterProvider; 14 | 15 | /** 16 | FBObjectiveCGraphElement specialization that can gather all references kept in ivars, as part of collection 17 | etc. 18 | */ 19 | @interface FBObjectiveCObject : FBObjectiveCGraphElement 20 | @end 21 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Graph/Internal/FBObjectiveCGraphElement+Internal.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | #import "FBObjectiveCGraphElement.h" 12 | 13 | @interface FBObjectiveCGraphElement () 14 | 15 | - (instancetype)initWithObject:(id)object; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Graph/Specialization/FBObjectiveCNSCFTimer.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | #import "FBObjectiveCObject.h" 12 | 13 | /** 14 | Specialization of FBObjectiveCObject for NSTimer. 15 | Standard methods that FBObjectiveCObject uses will not fetch us all objects retained by NSTimer. 16 | One good example is target of NSTimer. 17 | */ 18 | @interface FBObjectiveCNSCFTimer : FBObjectiveCObject 19 | @end 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Layout/Blocks/FBBlockStrongLayout.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | #ifdef __cplusplus 12 | extern "C" { 13 | #endif 14 | 15 | /** 16 | Returns an array of id objects that will have only those references 17 | that are retained by block. 18 | */ 19 | NSArray *_Nullable FBGetBlockStrongReferences(void *_Nonnull block); 20 | 21 | BOOL FBObjectIsBlock(void *_Nullable object); 22 | 23 | #ifdef __cplusplus 24 | } 25 | #endif 26 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Layout/Blocks/FBBlockStrongRelationDetector.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #if __has_feature(objc_arc) 10 | #error This file must be compiled with MRR. Use -fno-objc-arc flag. 11 | #endif 12 | 13 | #import "FBBlockStrongRelationDetector.h" 14 | 15 | #import 16 | 17 | static void byref_keep_nop(struct _block_byref_block *dst, struct _block_byref_block *src) {} 18 | static void byref_dispose_nop(struct _block_byref_block *param) {} 19 | 20 | @implementation FBBlockStrongRelationDetector 21 | 22 | - (oneway void)release 23 | { 24 | _strong = YES; 25 | } 26 | 27 | - (id)retain 28 | { 29 | return self; 30 | } 31 | 32 | + (id)alloc 33 | { 34 | FBBlockStrongRelationDetector *obj = [super alloc]; 35 | 36 | // Setting up block fakery 37 | obj->forwarding = obj; 38 | obj->byref_keep = byref_keep_nop; 39 | obj->byref_dispose = byref_dispose_nop; 40 | 41 | return obj; 42 | } 43 | 44 | - (oneway void)trueRelease 45 | { 46 | [super release]; 47 | } 48 | 49 | - (void *)forwarding 50 | { 51 | return self->forwarding; 52 | } 53 | 54 | @end 55 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Layout/Classes/FBClassStrongLayout.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | #ifdef __cplusplus 12 | extern "C" { 13 | #endif 14 | 15 | @protocol FBObjectReference; 16 | /** 17 | @return An array of id objects that will have *all* references 18 | the object has (also not retained ivars, structs etc.) 19 | */ 20 | NSArray> *_Nonnull FBGetClassReferences(__unsafe_unretained Class _Nullable aCls); 21 | 22 | /** 23 | @return An array of id objects that will have only those references 24 | that are retained by the object. It also goes through parent classes. 25 | */ 26 | NSArray> *_Nonnull FBGetObjectStrongReferences(id _Nullable obj, 27 | NSMutableDictionary> *> *_Nullable layoutCache); 28 | 29 | #ifdef __cplusplus 30 | } 31 | #endif 32 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Layout/Classes/FBClassStrongLayoutHelpers.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | #import 12 | 13 | #ifdef __cplusplus 14 | extern "C" { 15 | #endif 16 | 17 | /** 18 | Returns object on given index for obj in its ivar layout. 19 | It will try to map the object to an Objective-C object, so if the index 20 | is invalid it will crash with BAD_ACCESS. 21 | 22 | It cannot be called under ARC. 23 | */ 24 | id FBExtractObjectByOffset(id obj, NSUInteger index); 25 | 26 | #ifdef __cplusplus 27 | } 28 | #endif 29 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Layout/Classes/FBClassStrongLayoutHelpers.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #if __has_feature(objc_arc) 10 | #error This file must be compiled with MRR. Use -fno-objc-arc flag. 11 | #endif 12 | 13 | #import "FBClassStrongLayoutHelpers.h" 14 | 15 | id FBExtractObjectByOffset(id obj, NSUInteger index) { 16 | id *idx = (id *)((uintptr_t)obj + (index * sizeof(void *))); 17 | 18 | return *idx; 19 | } 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Layout/Classes/Parser/BaseType.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | #import 12 | 13 | namespace FB { namespace RetainCycleDetector { namespace Parser { 14 | class BaseType { 15 | public: 16 | virtual ~BaseType() {} 17 | }; 18 | 19 | class Unresolved: public BaseType { 20 | public: 21 | std::string value; 22 | Unresolved(std::string value): value(value) {} 23 | Unresolved(Unresolved&&) = default; 24 | Unresolved &operator=(Unresolved&&) = default; 25 | 26 | Unresolved(const Unresolved&) = delete; 27 | Unresolved &operator=(const Unresolved&) = delete; 28 | }; 29 | } } } 30 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Layout/Classes/Parser/Type.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | #import 12 | #import 13 | #import 14 | 15 | #import "BaseType.h" 16 | 17 | namespace FB { namespace RetainCycleDetector { namespace Parser { 18 | class Type: public BaseType { 19 | public: 20 | const std::string name; 21 | const std::string typeEncoding; 22 | 23 | Type(const std::string &name, 24 | const std::string &typeEncoding): name(name), typeEncoding(typeEncoding) {} 25 | Type(Type&&) = default; 26 | 27 | Type(const Type&) = delete; 28 | Type &operator=(const Type&) = delete; 29 | 30 | virtual void passTypePath(std::vector typePath) { 31 | this->typePath = typePath; 32 | } 33 | 34 | std::vector typePath; 35 | }; 36 | } } } 37 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Layout/Classes/Reference/FBIvarReference.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | #import 12 | 13 | #import "FBObjectReference.h" 14 | 15 | typedef NS_ENUM(NSUInteger, FBType) { 16 | FBObjectType, 17 | FBBlockType, 18 | FBStructType, 19 | FBUnknownType, 20 | }; 21 | 22 | @interface FBIvarReference : NSObject 23 | 24 | @property (nonatomic, copy, readonly, nullable) NSString *name; 25 | @property (nonatomic, readonly) FBType type; 26 | @property (nonatomic, readonly) ptrdiff_t offset; 27 | @property (nonatomic, readonly) NSUInteger index; 28 | @property (nonatomic, readonly, nonnull) Ivar ivar; 29 | 30 | - (nonnull instancetype)initWithIvar:(nonnull Ivar)ivar; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Layout/Classes/Reference/FBObjectInStructReference.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import 10 | 11 | #import "FBObjectReference.h" 12 | 13 | /** 14 | Struct object is an Objective-C object that is created inside 15 | a struct. In Objective-C++ that object will be retained 16 | by an object owning the struct, therefore will be listed in 17 | ivar layout for the class. 18 | */ 19 | 20 | @interface FBObjectInStructReference : NSObject 21 | 22 | - (nonnull instancetype)initWithIndex:(NSUInteger)index 23 | namePath:(nullable NSArray *)namePath; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FBRetainCycleDetector/Layout/Classes/Reference/FBObjectInStructReference.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | #import "FBObjectInStructReference.h" 10 | 11 | #import "FBClassStrongLayoutHelpers.h" 12 | 13 | @implementation FBObjectInStructReference 14 | { 15 | NSUInteger _index; 16 | NSArray *_namePath; 17 | } 18 | 19 | - (instancetype)initWithIndex:(NSUInteger)index 20 | namePath:(NSArray *)namePath 21 | { 22 | if (self = [super init]) { 23 | _index = index; 24 | _namePath = namePath; 25 | } 26 | 27 | return self; 28 | } 29 | 30 | - (NSString *)description 31 | { 32 | return [NSString stringWithFormat:@"[in_struct; index: %td]", _index]; 33 | } 34 | 35 | #pragma mark - FBObjectReference 36 | 37 | - (id)objectReferenceFromObject:(id)object 38 | { 39 | return FBExtractObjectByOffset(object, _index); 40 | } 41 | 42 | - (NSUInteger)indexInIvarLayout 43 | { 44 | return _index; 45 | } 46 | 47 | - (NSArray *)namePath 48 | { 49 | return _namePath; 50 | } 51 | 52 | @end 53 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Core/Controllers/FLEXNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXNavigationController.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 1/30/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FLEXNavigationController : UINavigationController 14 | 15 | + (instancetype)withRootViewController:(UIViewController *)rootVC; 16 | 17 | @end 18 | 19 | @interface UINavigationController (FLEXObjectExploring) 20 | 21 | /// Push an object explorer view controller onto the navigation stack 22 | - (void)pushExplorerForObject:(id)object; 23 | /// Push an object explorer view controller onto the navigation stack 24 | - (void)pushExplorerForObject:(id)object animated:(BOOL)animated; 25 | 26 | @end 27 | 28 | NS_ASSUME_NONNULL_END 29 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Core/FLEXSingleRowSection.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXSingleRowSection.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 9/25/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewSection.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// A section providing a specific single row. 14 | /// 15 | /// You may optionally provide a view controller to push when the row 16 | /// is selected, or an action to perform when it is selected. 17 | /// Which one is used first is up to the table view data source. 18 | @interface FLEXSingleRowSection : FLEXTableViewSection 19 | 20 | /// @param reuseIdentifier if nil, kFLEXDefaultCell is used. 21 | + (instancetype)title:(nullable NSString *)sectionTitle 22 | reuse:(nullable NSString *)reuseIdentifier 23 | cell:(void(^)(__kindof UITableViewCell *cell))cellConfiguration; 24 | 25 | @property (nullable, nonatomic) UIViewController *pushOnSelection; 26 | @property (nullable, nonatomic) void (^selectionAction)(UIViewController *host); 27 | /// Called to determine whether the single row should display itself or not. 28 | @property (nonatomic) BOOL (^filterMatcher)(NSString *filterText); 29 | 30 | @end 31 | 32 | NS_ASSUME_NONNULL_END 33 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Core/Views/Carousel/FLEXCarouselCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXCarouselCell.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 7/17/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FLEXCarouselCell : UICollectionViewCell 12 | 13 | @property (nonatomic, copy) NSString *title; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Core/Views/Carousel/FLEXScopeCarousel.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXScopeCarousel.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 7/17/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /// Only use on iOS 10 and up. Requires iOS 10 APIs for calculating row sizes. 12 | @interface FLEXScopeCarousel : UIControl 13 | 14 | @property (nonatomic, copy) NSArray *items; 15 | @property (nonatomic) NSInteger selectedIndex; 16 | @property (nonatomic) void(^selectedIndexChangedAction)(NSInteger idx); 17 | 18 | - (void)registerBlockForDynamicTypeChanges:(void(^)(FLEXScopeCarousel *))handler; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Core/Views/Cells/FLEXCodeFontCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXCodeFontCell.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 12/27/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXMultilineTableViewCell.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FLEXCodeFontCell : FLEXMultilineDetailTableViewCell 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Core/Views/Cells/FLEXCodeFontCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXCodeFontCell.m 3 | // FLEX 4 | // 5 | // Created by Tanner on 12/27/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXCodeFontCell.h" 10 | #import "UIFont+FLEX.h" 11 | 12 | @implementation FLEXCodeFontCell 13 | 14 | - (void)postInit { 15 | [super postInit]; 16 | 17 | self.titleLabel.font = UIFont.flex_codeFont; 18 | self.subtitleLabel.font = UIFont.flex_codeFont; 19 | 20 | self.titleLabel.adjustsFontSizeToFitWidth = YES; 21 | self.titleLabel.minimumScaleFactor = 0.9; 22 | self.subtitleLabel.adjustsFontSizeToFitWidth = YES; 23 | self.subtitleLabel.minimumScaleFactor = 0.75; 24 | 25 | // Disable mutli-line pre iOS 11 26 | if (@available(iOS 11, *)) { 27 | self.subtitleLabel.numberOfLines = 5; 28 | } else { 29 | self.titleLabel.numberOfLines = 1; 30 | self.subtitleLabel.numberOfLines = 1; 31 | } 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Core/Views/Cells/FLEXKeyValueTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXKeyValueTableViewCell.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 1/23/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewCell.h" 10 | 11 | @interface FLEXKeyValueTableViewCell : FLEXTableViewCell 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Core/Views/Cells/FLEXKeyValueTableViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXKeyValueTableViewCell.m 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 1/23/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXKeyValueTableViewCell.h" 10 | 11 | @implementation FLEXKeyValueTableViewCell 12 | 13 | - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 14 | return [super initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseIdentifier]; 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Core/Views/Cells/FLEXMultilineTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXMultilineTableViewCell.h 3 | // FLEX 4 | // 5 | // Created by Ryan Olson on 2/13/15. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewCell.h" 10 | 11 | /// A cell with both labels set to be multi-line capable. 12 | @interface FLEXMultilineTableViewCell : FLEXTableViewCell 13 | 14 | + (CGFloat)preferredHeightWithAttributedText:(NSAttributedString *)attributedText 15 | maxWidth:(CGFloat)contentViewWidth 16 | style:(UITableViewStyle)style 17 | showsAccessory:(BOOL)showsAccessory; 18 | 19 | @end 20 | 21 | /// A \c FLEXMultilineTableViewCell initialized with \c UITableViewCellStyleSubtitle 22 | @interface FLEXMultilineDetailTableViewCell : FLEXMultilineTableViewCell 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Core/Views/Cells/FLEXSubtitleTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXSubtitleTableViewCell.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 4/17/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewCell.h" 10 | 11 | /// A cell initialized with \c UITableViewCellStyleSubtitle 12 | @interface FLEXSubtitleTableViewCell : FLEXTableViewCell 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Core/Views/Cells/FLEXSubtitleTableViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXSubtitleTableViewCell.m 3 | // FLEX 4 | // 5 | // Created by Tanner on 4/17/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXSubtitleTableViewCell.h" 10 | 11 | @implementation FLEXSubtitleTableViewCell 12 | 13 | - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 14 | return [super initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier]; 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Core/Views/Cells/FLEXTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXTableViewCell.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 4/17/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FLEXTableViewCell : UITableViewCell 12 | 13 | /// Use this instead of .textLabel 14 | @property (nonatomic, readonly) UILabel *titleLabel; 15 | /// Use this instead of .detailTextLabel 16 | @property (nonatomic, readonly) UILabel *subtitleLabel; 17 | 18 | /// Subclasses can override this instead of initializers to 19 | /// perform additional initialization without lots of boilerplate. 20 | /// Remember to call super! 21 | - (void)postInit; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/ArgumentInputViews/FLEXArgumentInputColorView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputColorView.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 6/30/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXArgumentInputView.h" 10 | 11 | @interface FLEXArgumentInputColorView : FLEXArgumentInputView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/ArgumentInputViews/FLEXArgumentInputDateView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputDataView.h 3 | // Flipboard 4 | // 5 | // Created by Daniel Rodriguez Troitino on 2/14/15. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXArgumentInputView.h" 10 | 11 | @interface FLEXArgumentInputDateView : FLEXArgumentInputView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/ArgumentInputViews/FLEXArgumentInputFontView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputFontView.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 6/28/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXArgumentInputView.h" 10 | 11 | @interface FLEXArgumentInputFontView : FLEXArgumentInputView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputFontsPickerView.h 3 | // FLEX 4 | // 5 | // Created by 啟倫 陳 on 2014/7/27. 6 | // Copyright (c) 2014年 f. All rights reserved. 7 | // 8 | 9 | #import "FLEXArgumentInputTextView.h" 10 | 11 | @interface FLEXArgumentInputFontsPickerView : FLEXArgumentInputTextView 12 | @end 13 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputNotSupportedView.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 6/18/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXArgumentInputTextView.h" 10 | 11 | @interface FLEXArgumentInputNotSupportedView : FLEXArgumentInputTextView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.m: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputNotSupportedView.m 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 6/18/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXArgumentInputNotSupportedView.h" 10 | #import "FLEXColor.h" 11 | 12 | @implementation FLEXArgumentInputNotSupportedView 13 | 14 | - (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { 15 | self = [super initWithArgumentTypeEncoding:typeEncoding]; 16 | if (self) { 17 | self.inputTextView.userInteractionEnabled = NO; 18 | self.inputTextView.backgroundColor = [FLEXColor secondaryGroupedBackgroundColorWithAlpha:0.5]; 19 | self.inputPlaceholderText = @"nil (type not supported)"; 20 | self.targetSize = FLEXArgumentInputViewSizeSmall; 21 | } 22 | return self; 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputNumberView.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 6/15/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXArgumentInputTextView.h" 10 | 11 | @interface FLEXArgumentInputNumberView : FLEXArgumentInputTextView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputObjectView.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 6/15/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXArgumentInputTextView.h" 10 | 11 | @interface FLEXArgumentInputObjectView : FLEXArgumentInputTextView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/ArgumentInputViews/FLEXArgumentInputStringView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputStringView.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 6/28/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXArgumentInputTextView.h" 10 | 11 | @interface FLEXArgumentInputStringView : FLEXArgumentInputTextView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/ArgumentInputViews/FLEXArgumentInputStructView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputStructView.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 6/16/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXArgumentInputView.h" 10 | 11 | @interface FLEXArgumentInputStructView : FLEXArgumentInputView 12 | 13 | /// Enable displaying ivar names for custom struct types 14 | + (void)registerFieldNames:(NSArray *)names forTypeEncoding:(NSString *)typeEncoding; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputSwitchView.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 6/16/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXArgumentInputView.h" 10 | 11 | @interface FLEXArgumentInputSwitchView : FLEXArgumentInputView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/ArgumentInputViews/FLEXArgumentInputTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputTextView.h 3 | // FLEXInjected 4 | // 5 | // Created by Ryan Olson on 6/15/14. 6 | // 7 | // 8 | 9 | #import "FLEXArgumentInputView.h" 10 | 11 | @interface FLEXArgumentInputTextView : FLEXArgumentInputView 12 | 13 | // For subclass eyes only 14 | 15 | @property (nonatomic, readonly) UITextView *inputTextView; 16 | @property (nonatomic) NSString *inputPlaceholderText; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/FLEXArgumentInputViewFactory.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXArgumentInputViewFactory.h 3 | // FLEXInjected 4 | // 5 | // Created by Ryan Olson on 6/15/14. 6 | // 7 | // 8 | 9 | #import 10 | #import "FLEXArgumentInputSwitchView.h" 11 | 12 | @interface FLEXArgumentInputViewFactory : NSObject 13 | 14 | /// Forwards to argumentInputViewForTypeEncoding:currentValue: with a nil currentValue. 15 | + (FLEXArgumentInputView *)argumentInputViewForTypeEncoding:(const char *)typeEncoding; 16 | 17 | /// The main factory method for making argument input view subclasses that are the best fit for the type. 18 | + (FLEXArgumentInputView *)argumentInputViewForTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue; 19 | 20 | /// A way to check if we should try editing a filed given its type encoding and value. 21 | /// Useful when deciding whether to edit or explore a property, ivar, or NSUserDefaults value. 22 | + (BOOL)canEditFieldWithTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue; 23 | 24 | /// Enable displaying ivar names for custom struct types 25 | + (void)registerFieldNames:(NSArray *)names forTypeEncoding:(NSString *)typeEncoding; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/FLEXDefaultEditorViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXDefaultEditorViewController.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 5/23/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXFieldEditorViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FLEXDefaultEditorViewController : FLEXVariableEditorViewController 14 | 15 | + (instancetype)target:(NSUserDefaults *)defaults key:(NSString *)key commitHandler:(void(^_Nullable)(void))onCommit; 16 | 17 | + (BOOL)canEditDefaultWithValue:(nullable id)currentValue; 18 | 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/FLEXFieldEditorView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXFieldEditorView.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 5/16/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class FLEXArgumentInputView; 12 | 13 | @interface FLEXFieldEditorView : UIView 14 | 15 | @property (nonatomic, copy) NSString *targetDescription; 16 | @property (nonatomic, copy) NSString *fieldDescription; 17 | 18 | @property (nonatomic, copy) NSArray *argumentInputViews; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/FLEXFieldEditorViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXFieldEditorViewController.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 11/22/18. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXVariableEditorViewController.h" 10 | #import "FLEXProperty.h" 11 | #import "FLEXIvar.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface FLEXFieldEditorViewController : FLEXVariableEditorViewController 16 | 17 | /// @return nil if the property is readonly or if the type is unsupported 18 | + (nullable instancetype)target:(id)target property:(FLEXProperty *)property commitHandler:(void(^_Nullable)(void))onCommit; 19 | /// @return nil if the ivar type is unsupported 20 | + (nullable instancetype)target:(id)target ivar:(FLEXIvar *)ivar commitHandler:(void(^_Nullable)(void))onCommit; 21 | 22 | /// Subclasses can change the button title via the \c title property 23 | @property (nonatomic, readonly) UIBarButtonItem *getterButton; 24 | 25 | - (void)getterButtonPressed:(id)sender; 26 | 27 | @end 28 | 29 | NS_ASSUME_NONNULL_END 30 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Editing/FLEXMethodCallingViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXMethodCallingViewController.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 5/23/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXVariableEditorViewController.h" 10 | #import "FLEXMethod.h" 11 | 12 | @interface FLEXMethodCallingViewController : FLEXVariableEditorViewController 13 | 14 | + (instancetype)target:(id)target method:(FLEXMethod *)method; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ExplorerInterface/Bookmarks/FLEXBookmarkManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXBookmarkManager.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 2/6/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FLEXBookmarkManager : NSObject 14 | 15 | @property (nonatomic, readonly, class) NSMutableArray *bookmarks; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ExplorerInterface/Bookmarks/FLEXBookmarkManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXBookmarkManager.m 3 | // FLEX 4 | // 5 | // Created by Tanner on 2/6/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXBookmarkManager.h" 10 | 11 | static NSMutableArray *kFLEXBookmarkManagerBookmarks = nil; 12 | 13 | @implementation FLEXBookmarkManager 14 | 15 | + (void)initialize { 16 | if (self == [FLEXBookmarkManager class]) { 17 | kFLEXBookmarkManagerBookmarks = [NSMutableArray new]; 18 | } 19 | } 20 | 21 | + (NSMutableArray *)bookmarks { 22 | return kFLEXBookmarkManagerBookmarks; 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ExplorerInterface/Bookmarks/FLEXBookmarksViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXBookmarksViewController.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 2/6/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FLEXBookmarksViewController : FLEXTableViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ExplorerInterface/FLEXViewControllersViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXViewControllersViewController.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 2/13/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXFilteringTableViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FLEXViewControllersViewController : FLEXFilteringTableViewController 14 | 15 | + (instancetype)controllersForViews:(NSArray *)views; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ExplorerInterface/FLEXWindow.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXWindow.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 4/13/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol FLEXWindowEventDelegate 12 | 13 | - (BOOL)shouldHandleTouchAtPoint:(CGPoint)pointInWindow; 14 | - (BOOL)canBecomeKeyWindow; 15 | 16 | @end 17 | 18 | #pragma mark - 19 | @interface FLEXWindow : UIWindow 20 | 21 | @property (nonatomic, weak) id eventDelegate; 22 | 23 | /// Tracked so we can restore the key window after dismissing a modal. 24 | /// We need to become key after modal presentation so we can correctly capture input. 25 | /// If we're just showing the toolbar, we want the main app's window to remain key 26 | /// so that we don't interfere with input, status bar, etc. 27 | @property (nonatomic, readonly) UIWindow *previousKeyWindow; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ExplorerInterface/FLEXWindowManagerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXWindowManagerController.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 2/6/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FLEXWindowManagerController : FLEXTableViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ExplorerInterface/Tabs/FLEXTabsViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXTabsViewController.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 2/4/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | 11 | @interface FLEXTabsViewController : FLEXTableViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/FLEX-Categories.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEX-Categories.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/12/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "UIBarButtonItem+FLEX.h" 10 | #import "CALayer+FLEX.h" 11 | #import "UIFont+FLEX.h" 12 | #import "UIGestureRecognizer+Blocks.h" 13 | #import "UIPasteboard+FLEX.h" 14 | #import "UIMenu+FLEX.h" 15 | #import "UITextField+Range.h" 16 | 17 | #import "NSObject+FLEX_Reflection.h" 18 | #import "NSArray+FLEX.h" 19 | #import "NSUserDefaults+FLEX.h" 20 | #import "NSTimer+FLEX.h" 21 | #import "NSDateFormatter+FLEX.h" 22 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/FLEX-Core.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEX-Core.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/11/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXFilteringTableViewController.h" 10 | #import "FLEXNavigationController.h" 11 | #import "FLEXTableViewController.h" 12 | #import "FLEXTableView.h" 13 | 14 | #import "FLEXSingleRowSection.h" 15 | #import "FLEXTableViewSection.h" 16 | 17 | #import "FLEXCodeFontCell.h" 18 | #import "FLEXSubtitleTableViewCell.h" 19 | #import "FLEXTableViewCell.h" 20 | #import "FLEXMultilineTableViewCell.h" 21 | #import "FLEXKeyValueTableViewCell.h" 22 | 23 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/FLEX-ObjectExploring.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEX-ObjectExploring.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/11/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXObjectExplorerFactory.h" 10 | #import "FLEXObjectExplorerViewController.h" 11 | 12 | #import "FLEXObjectExplorer.h" 13 | 14 | #import "FLEXShortcut.h" 15 | #import "FLEXShortcutsSection.h" 16 | 17 | #import "FLEXCollectionContentSection.h" 18 | #import "FLEXColorPreviewSection.h" 19 | #import "FLEXDefaultsContentSection.h" 20 | #import "FLEXMetadataSection.h" 21 | #import "FLEXMutableListSection.h" 22 | #import "FLEXObjectInfoSection.h" 23 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/FLEX-Runtime.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEX-Runtime.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/11/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXObjcInternal.h" 10 | #import "FLEXSwiftInternal.h" 11 | #import "FLEXRuntimeSafety.h" 12 | #import "FLEXBlockDescription.h" 13 | #import "FLEXTypeEncodingParser.h" 14 | 15 | #import "FLEXMirror.h" 16 | #import "FLEXProtocol.h" 17 | #import "FLEXProperty.h" 18 | #import "FLEXIvar.h" 19 | #import "FLEXMethodBase.h" 20 | #import "FLEXMethod.h" 21 | #import "FLEXPropertyAttributes.h" 22 | #import "FLEXRuntime+Compare.h" 23 | #import "FLEXRuntime+UIKitHelpers.h" 24 | #import "FLEXMetadataExtras.h" 25 | 26 | #import "FLEXProtocolBuilder.h" 27 | #import "FLEXClassBuilder.h" 28 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/FLEX.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEX.h 3 | // FLEX 4 | // 5 | // Created by Eric Horacek on 7/18/15. 6 | // Modified by Tanner Bennett on 3/12/20. 7 | // Copyright (c) 2020 FLEX Team. All rights reserved. 8 | // 9 | 10 | #import "FLEXManager.h" 11 | #import "FLEXManager+Extensibility.h" 12 | #import "FLEXManager+Networking.h" 13 | 14 | #import "FLEXExplorerToolbar.h" 15 | #import "FLEXExplorerToolbarItem.h" 16 | #import "FLEXGlobalsEntry.h" 17 | 18 | #import "FLEX-Core.h" 19 | #import "FLEX-Runtime.h" 20 | #import "FLEX-Categories.h" 21 | #import "FLEX-ObjectExploring.h" 22 | 23 | #import "FLEXMacros.h" 24 | #import "FLEXAlert.h" 25 | #import "FLEXResources.h" 26 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/DatabaseBrowser/FLEXDBQueryRowCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXDBQueryRowCell.h 3 | // FLEX 4 | // 5 | // Created by Peng Tao on 15/11/24. 6 | // Copyright © 2015年 f. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class FLEXDBQueryRowCell; 12 | 13 | extern NSString * const kFLEXDBQueryRowCellReuse; 14 | 15 | @protocol FLEXDBQueryRowCellLayoutSource 16 | 17 | - (CGFloat)dbQueryRowCell:(FLEXDBQueryRowCell *)dbQueryRowCell minXForColumn:(NSUInteger)column; 18 | - (CGFloat)dbQueryRowCell:(FLEXDBQueryRowCell *)dbQueryRowCell widthForColumn:(NSUInteger)column; 19 | 20 | @end 21 | 22 | @interface FLEXDBQueryRowCell : UITableViewCell 23 | 24 | /// An array of NSString, NSNumber, or NSData objects 25 | @property (nonatomic) NSArray *data; 26 | @property (nonatomic, weak) id layoutSource; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/DatabaseBrowser/FLEXDatabaseManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // PTDatabaseManager.h 3 | // Derived from: 4 | // 5 | // FMDatabase.h 6 | // FMDB( https://github.com/ccgus/fmdb ) 7 | // 8 | // Created by Peng Tao on 15/11/23. 9 | // 10 | // Licensed to Flying Meat Inc. under one or more contributor license agreements. 11 | // See the LICENSE file distributed with this work for the terms under 12 | // which Flying Meat Inc. licenses this file to you. 13 | 14 | #import 15 | #import "FLEXSQLResult.h" 16 | 17 | /// Conformers should automatically open and close the database 18 | @protocol FLEXDatabaseManager 19 | 20 | @required 21 | 22 | /// @return \c nil if the database couldn't be opened 23 | + (instancetype)managerForDatabase:(NSString *)path; 24 | 25 | /// @return a list of all table names 26 | - (NSArray *)queryAllTables; 27 | - (NSArray *)queryAllColumnsOfTable:(NSString *)tableName; 28 | - (NSArray *)queryAllDataInTable:(NSString *)tableName; 29 | 30 | @optional 31 | 32 | - (NSArray *)queryRowIDsInTable:(NSString *)tableName; 33 | - (FLEXSQLResult *)executeStatement:(NSString *)SQLStatement; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXRealmDatabaseManager.h 3 | // FLEX 4 | // 5 | // Created by Tim Oliver on 28/01/2016. 6 | // Copyright © 2016 Realm. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "FLEXDatabaseManager.h" 11 | 12 | @interface FLEXRealmDatabaseManager : NSObject 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXTableContentHeaderCell.h 3 | // FLEX 4 | // 5 | // Created by Peng Tao on 15/11/26. 6 | // Copyright © 2015年 f. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef NS_ENUM(NSUInteger, FLEXTableColumnHeaderSortType) { 12 | FLEXTableColumnHeaderSortTypeNone = 0, 13 | FLEXTableColumnHeaderSortTypeAsc, 14 | FLEXTableColumnHeaderSortTypeDesc, 15 | }; 16 | 17 | NS_INLINE FLEXTableColumnHeaderSortType FLEXNextTableColumnHeaderSortType( 18 | FLEXTableColumnHeaderSortType current) { 19 | switch (current) { 20 | case FLEXTableColumnHeaderSortTypeAsc: 21 | return FLEXTableColumnHeaderSortTypeDesc; 22 | case FLEXTableColumnHeaderSortTypeNone: 23 | case FLEXTableColumnHeaderSortTypeDesc: 24 | return FLEXTableColumnHeaderSortTypeAsc; 25 | } 26 | 27 | return FLEXTableColumnHeaderSortTypeNone; 28 | } 29 | 30 | @interface FLEXTableColumnHeader : UIView 31 | 32 | @property (nonatomic) NSInteger index; 33 | @property (nonatomic, readonly) UILabel *titleLabel; 34 | 35 | @property (nonatomic) FLEXTableColumnHeaderSortType sortType; 36 | 37 | @end 38 | 39 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXTableLeftCell.h 3 | // FLEX 4 | // 5 | // Created by Peng Tao on 15/11/24. 6 | // Copyright © 2015年 f. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FLEXTableLeftCell : UITableViewCell 12 | 13 | @property (nonatomic) UILabel *titlelabel; 14 | 15 | + (instancetype)cellWithTableView:(UITableView *)tableView; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXTableLeftCell.m 3 | // FLEX 4 | // 5 | // Created by Peng Tao on 15/11/24. 6 | // Copyright © 2015年 f. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableLeftCell.h" 10 | 11 | @implementation FLEXTableLeftCell 12 | 13 | + (instancetype)cellWithTableView:(UITableView *)tableView { 14 | static NSString *identifier = @"FLEXTableLeftCell"; 15 | FLEXTableLeftCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 16 | 17 | if (!cell) { 18 | cell = [[FLEXTableLeftCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; 19 | UILabel *textLabel = [UILabel new]; 20 | textLabel.textAlignment = NSTextAlignmentCenter; 21 | textLabel.font = [UIFont systemFontOfSize:13.0]; 22 | [cell.contentView addSubview:textLabel]; 23 | cell.titlelabel = textLabel; 24 | } 25 | 26 | return cell; 27 | } 28 | 29 | - (void)layoutSubviews { 30 | [super layoutSubviews]; 31 | self.titlelabel.frame = self.contentView.frame; 32 | } 33 | @end 34 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PTTableListViewController.h 3 | // PTDatabaseReader 4 | // 5 | // Created by Peng Tao on 15/11/23. 6 | // Copyright © 2015年 Peng Tao. All rights reserved. 7 | // 8 | 9 | #import "FLEXFilteringTableViewController.h" 10 | 11 | @interface FLEXTableListViewController : FLEXFilteringTableViewController 12 | 13 | + (BOOL)supportsExtension:(NSString *)extension; 14 | - (instancetype)initWithPath:(NSString *)path; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/DatabaseBrowser/FLEXTableRowDataViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXTableRowDataViewController.h 3 | // FLEX 4 | // 5 | // Created by Chaoshuai Lu on 7/8/20. 6 | // 7 | 8 | #import "FLEXFilteringTableViewController.h" 9 | 10 | @interface FLEXTableRowDataViewController : FLEXFilteringTableViewController 11 | 12 | + (instancetype)rows:(NSDictionary *)rowData; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/DatabaseBrowser/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | FMDB 3 | Copyright (c) 2008-2014 Flying Meat Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/FLEXAPNSViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXAPNSViewController.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 6/28/22. 6 | // Copyright © 2022 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXGlobalsEntry.h" 10 | #import "FLEXFilteringTableViewController.h" 11 | 12 | @interface FLEXAPNSViewController : FLEXFilteringTableViewController 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/FLEXAddressExplorerCoordinator.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXAddressExplorerCoordinator.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 7/10/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXGlobalsEntry.h" 10 | 11 | @interface FLEXAddressExplorerCoordinator : NSObject 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/FLEXCookiesViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXCookiesViewController.h 3 | // FLEX 4 | // 5 | // Created by Rich Robinson on 19/10/2015. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXGlobalsEntry.h" 10 | #import "FLEXFilteringTableViewController.h" 11 | 12 | @interface FLEXCookiesViewController : FLEXFilteringTableViewController 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/FLEXLiveObjectsController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXLiveObjectsController.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 5/28/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | #import "FLEXGlobalsEntry.h" 11 | 12 | @interface FLEXLiveObjectsController : FLEXTableViewController 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/FLEXObjectListViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXObjectListViewController.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 5/28/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXFilteringTableViewController.h" 10 | 11 | @interface FLEXObjectListViewController : FLEXFilteringTableViewController 12 | 13 | /// This will either return a list of the instances, or take you straight 14 | /// to the explorer itself if there is only one instance. 15 | + (UIViewController *)instancesOfClassWithName:(NSString *)className retained:(BOOL)retain; 16 | + (instancetype)subclassesOfClassWithName:(NSString *)className; 17 | + (instancetype)objectsWithReferencesToObject:(id)object retained:(BOOL)retain; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/FLEXWebViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXWebViewController.m 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 6/10/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FLEXWebViewController : UIViewController 12 | 13 | - (id)initWithURL:(NSURL *)url; 14 | - (id)initWithText:(NSString *)text; 15 | 16 | + (BOOL)supportsPathExtension:(NSString *)extension; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/FileBrowser/FLEXActivityViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXActivityViewController.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 5/26/22. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | /// Wraps UIActivityViewController so that it can't dismiss other view controllers 13 | @interface FLEXActivityViewController : UIActivityViewController 14 | 15 | /// @param source A \c UIVIew, \c UIBarButtonItem, or \c NSValue representing a source rect. 16 | + (id)sharing:(NSArray *)items source:(nullable id)source; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/FileBrowser/FLEXFileBrowserController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXFileBrowserController.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 6/9/14. 6 | // Based on previous work by Evan Doll 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | #import "FLEXGlobalsEntry.h" 11 | #import "FLEXFileBrowserSearchOperation.h" 12 | 13 | @interface FLEXFileBrowserController : FLEXTableViewController 14 | 15 | + (instancetype)path:(NSString *)path; 16 | - (id)initWithPath:(NSString *)path; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/FileBrowser/FLEXFileBrowserSearchOperation.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXFileBrowserSearchOperation.h 3 | // FLEX 4 | // 5 | // Created by 啟倫 陳 on 2014/8/4. 6 | // Copyright (c) 2014年 f. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol FLEXFileBrowserSearchOperationDelegate; 12 | 13 | @interface FLEXFileBrowserSearchOperation : NSOperation 14 | 15 | @property (nonatomic, weak) id delegate; 16 | 17 | - (id)initWithPath:(NSString *)currentPath searchString:(NSString *)searchString; 18 | 19 | @end 20 | 21 | @protocol FLEXFileBrowserSearchOperationDelegate 22 | 23 | - (void)fileBrowserSearchOperationResult:(NSArray *)searchResult size:(uint64_t)size; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/Globals/FLEXGlobalsSection.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXGlobalsSection.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 7/11/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewSection.h" 10 | #import "FLEXGlobalsEntry.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface FLEXGlobalsSection : FLEXTableViewSection 15 | 16 | + (instancetype)title:(NSString *)title rows:(NSArray *)rows; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/Globals/FLEXGlobalsViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXGlobalsViewController.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 2014-05-03. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXFilteringTableViewController.h" 10 | @protocol FLEXGlobalsTableViewControllerDelegate; 11 | 12 | typedef NS_ENUM(NSUInteger, FLEXGlobalsSectionKind) { 13 | FLEXGlobalsSectionCustom, 14 | /// NSProcessInfo, Network history, system log, 15 | /// heap, address explorer, libraries, app classes 16 | FLEXGlobalsSectionProcessAndEvents, 17 | /// Browse container, browse bundle, NSBundle.main, 18 | /// NSUserDefaults.standard, UIApplication, 19 | /// app delegate, key window, root VC, cookies 20 | FLEXGlobalsSectionAppShortcuts, 21 | /// UIPasteBoard.general, UIScreen, UIDevice 22 | FLEXGlobalsSectionMisc, 23 | FLEXGlobalsSectionCount 24 | }; 25 | 26 | @interface FLEXGlobalsViewController : FLEXFilteringTableViewController 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/Keychain/FLEXKeychainViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXKeychainViewController.h 3 | // FLEX 4 | // 5 | // Created by ray on 2019/8/17. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXGlobalsEntry.h" 10 | #import "FLEXFilteringTableViewController.h" 11 | 12 | @interface FLEXKeychainViewController : FLEXFilteringTableViewController 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/Keychain/SSKeychain_LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2012 Sam Soffes. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeExporter.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXRuntimeExporter.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 3/26/20. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// A class for exporting all runtime metadata to an SQLite database. 14 | //API_AVAILABLE(ios(10.0)) 15 | @interface FLEXRuntimeExporter : NSObject 16 | 17 | + (void)createRuntimeDatabaseAtPath:(NSString *)path 18 | progressHandler:(void(^)(NSString *status))progress 19 | completion:(void(^)(NSString *_Nullable error))completion; 20 | 21 | + (void)createRuntimeDatabaseAtPath:(NSString *)path 22 | forImages:(nullable NSArray *)images 23 | progressHandler:(void(^)(NSString *status))progress 24 | completion:(void(^)(NSString *_Nullable error))completion; 25 | 26 | 27 | @end 28 | 29 | NS_ASSUME_NONNULL_END 30 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/RuntimeBrowser/FLEXKBToolbarButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXKBToolbarButton.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 6/11/17. 6 | // Copyright © 2017 Tanner Bennett. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void (^FLEXKBToolbarAction)(NSString *buttonTitle, BOOL isSuggestion); 12 | 13 | 14 | @interface FLEXKBToolbarButton : UIButton 15 | 16 | /// Set to `default` to use the system appearance on iOS 13+ 17 | @property (nonatomic) UIKeyboardAppearance appearance; 18 | 19 | + (instancetype)buttonWithTitle:(NSString *)title; 20 | + (instancetype)buttonWithTitle:(NSString *)title action:(FLEXKBToolbarAction)eventHandler; 21 | + (instancetype)buttonWithTitle:(NSString *)title action:(FLEXKBToolbarAction)action forControlEvents:(UIControlEvents)controlEvents; 22 | 23 | /// Adds the event handler for the button. 24 | /// 25 | /// @param eventHandler The event handler block. 26 | /// @param controlEvents The type of event. 27 | - (void)addEventHandler:(FLEXKBToolbarAction)eventHandler forControlEvents:(UIControlEvents)controlEvents; 28 | 29 | @end 30 | 31 | @interface FLEXKBToolbarSuggestedButton : FLEXKBToolbarButton @end 32 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/RuntimeBrowser/FLEXKeyboardToolbar.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXKeyboardToolbar.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 6/11/17. 6 | // Copyright © 2017 Tanner Bennett. All rights reserved. 7 | // 8 | 9 | #import "FLEXKBToolbarButton.h" 10 | 11 | @interface FLEXKeyboardToolbar : UIView 12 | 13 | + (instancetype)toolbarWithButtons:(NSArray *)buttons; 14 | 15 | @property (nonatomic) NSArray *buttons; 16 | @property (nonatomic) UIKeyboardAppearance appearance; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/RuntimeBrowser/FLEXObjcRuntimeViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXObjcRuntimeViewController.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/23/17. 6 | // Copyright © 2017 Tanner Bennett. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | #import "FLEXGlobalsEntry.h" 11 | 12 | @interface FLEXObjcRuntimeViewController : FLEXTableViewController 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeBrowserToolbar.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXRuntimeBrowserToolbar.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 6/11/17. 6 | // Copyright © 2017 Tanner Bennett. All rights reserved. 7 | // 8 | 9 | #import "FLEXKeyboardToolbar.h" 10 | #import "FLEXRuntimeKeyPath.h" 11 | 12 | @interface FLEXRuntimeBrowserToolbar : FLEXKeyboardToolbar 13 | 14 | + (instancetype)toolbarWithHandler:(FLEXKBToolbarAction)tapHandler suggestions:(NSArray *)suggestions; 15 | 16 | - (void)setKeyPath:(FLEXRuntimeKeyPath *)keyPath suggestions:(NSArray *)suggestions; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPathTokenizer.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXRuntimeKeyPathTokenizer.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/22/17. 6 | // Copyright © 2017 Tanner Bennett. All rights reserved. 7 | // 8 | 9 | #import "FLEXRuntimeKeyPath.h" 10 | 11 | @interface FLEXRuntimeKeyPathTokenizer : NSObject 12 | 13 | + (NSUInteger)tokenCountOfString:(NSString *)userInput; 14 | + (FLEXRuntimeKeyPath *)tokenizeString:(NSString *)userInput; 15 | 16 | + (BOOL)allowedInKeyPath:(NSString *)text; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/RuntimeBrowser/FLEXSearchToken.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXSearchToken.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/22/17. 6 | // Copyright © 2017 Tanner Bennett. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef NS_OPTIONS(NSUInteger, TBWildcardOptions) { 12 | TBWildcardOptionsNone = 0, 13 | TBWildcardOptionsAny = 1, 14 | TBWildcardOptionsPrefix = 1 << 1, 15 | TBWildcardOptionsSuffix = 1 << 2, 16 | }; 17 | 18 | /// A token may contain wildcards at one or either end, 19 | /// but not in the middle of the token (as of now). 20 | @interface FLEXSearchToken : NSObject 21 | 22 | + (instancetype)any; 23 | + (instancetype)string:(NSString *)string options:(TBWildcardOptions)options; 24 | 25 | /// Will not contain the wildcard (*) symbol 26 | @property (nonatomic, readonly) NSString *string; 27 | @property (nonatomic, readonly) TBWildcardOptions options; 28 | 29 | /// Opposite of "is ambiguous" 30 | @property (nonatomic, readonly) BOOL isAbsolute; 31 | @property (nonatomic, readonly) BOOL isAny; 32 | /// Still \c isAny, but checks that the string is empty 33 | @property (nonatomic, readonly) BOOL isEmpty; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/SystemLog/FLEXASLLogController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXASLLogController.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/14/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXLogController.h" 10 | 11 | @interface FLEXASLLogController : NSObject 12 | 13 | /// Guaranteed to call back on the main thread. 14 | + (instancetype)withUpdateHandler:(void(^)(NSArray *newMessages))newMessagesHandler; 15 | 16 | - (BOOL)startMonitoring; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/SystemLog/FLEXLogController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXLogController.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/17/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "FLEXSystemLogMessage.h" 11 | 12 | @protocol FLEXLogController 13 | 14 | /// Guaranteed to call back on the main thread. 15 | + (instancetype)withUpdateHandler:(void(^)(NSArray *newMessages))newMessagesHandler; 16 | 17 | - (BOOL)startMonitoring; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/SystemLog/FLEXOSLogController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXOSLogController.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 12/19/18. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXLogController.h" 10 | 11 | #define FLEXOSLogAvailable() (NSProcessInfo.processInfo.operatingSystemVersion.majorVersion >= 10) 12 | 13 | /// The log controller used for iOS 10 and up. 14 | @interface FLEXOSLogController : NSObject 15 | 16 | + (instancetype)withUpdateHandler:(void(^)(NSArray *newMessages))newMessagesHandler; 17 | 18 | - (BOOL)startMonitoring; 19 | 20 | /// Whether log messages are to be recorded and kept in-memory in the background. 21 | /// You do not need to initialize this value, only change it. 22 | @property (nonatomic) BOOL persistent; 23 | /// Used mostly internally, but also used by the log VC to persist messages 24 | /// that were created prior to enabling persistence. 25 | @property (nonatomic) NSMutableArray *messages; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/SystemLog/FLEXSystemLogCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXSystemLogCell.h 3 | // FLEX 4 | // 5 | // Created by Ryan Olson on 1/25/15. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewCell.h" 10 | 11 | @class FLEXSystemLogMessage; 12 | 13 | extern NSString *const kFLEXSystemLogCellIdentifier; 14 | 15 | @interface FLEXSystemLogCell : FLEXTableViewCell 16 | 17 | @property (nonatomic) FLEXSystemLogMessage *logMessage; 18 | @property (nonatomic, copy) NSString *highlightedText; 19 | 20 | + (NSString *)displayedTextForLogMessage:(FLEXSystemLogMessage *)logMessage; 21 | + (CGFloat)preferredHeightForLogMessage:(FLEXSystemLogMessage *)logMessage inWidth:(CGFloat)width; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXSystemLogMessage.h 3 | // FLEX 4 | // 5 | // Created by Ryan Olson on 1/25/15. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "ActivityStreamAPI.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface FLEXSystemLogMessage : NSObject 16 | 17 | + (instancetype)logMessageFromASLMessage:(aslmsg)aslMessage; 18 | + (instancetype)logMessageFromDate:(NSDate *)date text:(NSString *)text; 19 | 20 | // ASL specific properties 21 | @property (nonatomic, readonly, nullable) NSString *sender; 22 | @property (nonatomic, readonly, nullable) aslmsg aslMessage; 23 | 24 | @property (nonatomic, readonly) NSDate *date; 25 | @property (nonatomic, readonly) NSString *messageText; 26 | @property (nonatomic, readonly) long long messageID; 27 | 28 | @end 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/GlobalStateExplorers/SystemLog/FLEXSystemLogViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXSystemLogViewController.h 3 | // FLEX 4 | // 5 | // Created by Ryan Olson on 1/19/15. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXFilteringTableViewController.h" 10 | #import "FLEXGlobalsEntry.h" 11 | 12 | @interface FLEXSystemLogViewController : FLEXFilteringTableViewController 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Manager/Private/FLEXManager+Private.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXManager+Private.h 3 | // PebbleApp 4 | // 5 | // Created by Javier Soto on 7/26/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXManager.h" 10 | #import "FLEXWindow.h" 11 | 12 | @class FLEXGlobalsEntry, FLEXExplorerViewController; 13 | 14 | @interface FLEXManager (Private) 15 | 16 | @property (nonatomic, readonly) FLEXWindow *explorerWindow; 17 | @property (nonatomic, readonly) FLEXExplorerViewController *explorerViewController; 18 | 19 | /// An array of FLEXGlobalsEntry objects that have been registered by the user. 20 | @property (nonatomic, readonly) NSMutableArray *userGlobalEntries; 21 | @property (nonatomic, readonly) NSMutableDictionary *customContentTypeViewers; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Network/FLEXHTTPTransactionDetailController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXHTTPTransactionDetailController.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 2/10/15. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class FLEXHTTPTransaction; 12 | 13 | @interface FLEXHTTPTransactionDetailController : UITableViewController 14 | 15 | + (instancetype)withTransaction:(FLEXHTTPTransaction *)transaction; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Network/FLEXMITMDataSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXMITMDataSource.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 8/22/21. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface FLEXMITMDataSource<__covariant TransactionType> : NSObject 13 | 14 | + (instancetype)dataSourceWithProvider:(NSArray *(^)(void))future; 15 | 16 | /// Whether or not the data in \c transactions and \c bytesReceived are actually filtered yet or not 17 | @property (nonatomic, readonly) BOOL isFiltered; 18 | 19 | /// The content of this array is filtered to match the input of \c filter:completion: 20 | @property (nonatomic, readonly) NSArray *transactions; 21 | @property (nonatomic, readonly) NSArray *allTransactions; 22 | 23 | /// The content of this array is filtered to match the input of \c filter:completion: 24 | @property (nonatomic) NSInteger bytesReceived; 25 | @property (nonatomic) NSInteger totalBytesReceived; 26 | 27 | - (void)reloadByteCounts; 28 | - (void)reloadData:(void (^_Nullable)(FLEXMITMDataSource *dataSource))completion; 29 | - (void)filter:(NSString *)searchString completion:(void(^_Nullable)(FLEXMITMDataSource *dataSource))completion; 30 | 31 | @end 32 | 33 | NS_ASSUME_NONNULL_END 34 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Network/FLEXNetworkCurlLogger.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXCurlLogger.h 3 | // 4 | // 5 | // Created by Ji Pei on 07/27/16 6 | // 7 | 8 | #import 9 | 10 | @interface FLEXNetworkCurlLogger : NSObject 11 | 12 | /** 13 | * Generates a cURL command equivalent to the given request. 14 | * 15 | * @param request The request to be translated 16 | */ 17 | + (NSString *)curlCommandString:(NSURLRequest *)request; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Network/FLEXNetworkMITMViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXNetworkMITMViewController.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 2/8/15. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | #import "FLEXGlobalsEntry.h" 11 | 12 | /// The main screen for the network observer, which displays a list of network transactions. 13 | @interface FLEXNetworkMITMViewController : FLEXTableViewController 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Network/FLEXNetworkSettingsController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXNetworkSettingsController.h 3 | // FLEXInjected 4 | // 5 | // Created by Ryan Olson on 2/20/15. 6 | // 7 | 8 | #import "FLEXTableViewController.h" 9 | 10 | @interface FLEXNetworkSettingsController : FLEXTableViewController 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Network/FLEXNetworkTransactionCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXNetworkTransactionCell.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 2/8/15. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class FLEXNetworkTransaction; 12 | 13 | @interface FLEXNetworkTransactionCell : UITableViewCell 14 | 15 | @property (nonatomic) FLEXNetworkTransaction *transaction; 16 | 17 | @property (nonatomic, readonly, class) NSString *reuseID; 18 | @property (nonatomic, readonly, class) CGFloat preferredCellHeight; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Network/OSCache/LICENSE.md: -------------------------------------------------------------------------------- 1 | OSCache 2 | version 1.2.1, Decembet 18th, 2015 3 | 4 | Copyright (C) 2014 Charcoal Design 5 | 6 | This software is provided 'as-is', without any express or implied 7 | warranty. In no event will the authors be held liable for any damages 8 | arising from the use of this software. 9 | 10 | Permission is granted to anyone to use this software for any purpose, 11 | including commercial applications, and to alter it and redistribute it 12 | freely, subject to the following restrictions: 13 | 14 | 1. The origin of this software must not be misrepresented; you must not 15 | claim that you wrote the original software. If you use this software 16 | in a product, an acknowledgment in the product documentation would be 17 | appreciated but is not required. 18 | 2. Altered source versions must be plainly marked as such, and must not be 19 | misrepresented as being the original software. 20 | 3. This notice may not be removed or altered from any source distribution. -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Network/PonyDebugger/FLEXNetworkObserver.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXNetworkObserver.h 3 | // Derived from: 4 | // 5 | // PDAFNetworkDomainController.h 6 | // PonyDebugger 7 | // 8 | // Created by Mike Lewis on 2/27/12. 9 | // 10 | // Licensed to Square, Inc. under one or more contributor license agreements. 11 | // See the LICENSE file distributed with this work for the terms under 12 | // which Square, Inc. licenses this file to you. 13 | // 14 | 15 | #import 16 | 17 | FOUNDATION_EXTERN NSString *const kFLEXNetworkObserverEnabledStateChangedNotification; 18 | 19 | /// This class swizzles NSURLConnection and NSURLSession delegate methods to observe events in the URL loading system. 20 | /// High level network events are sent to the default FLEXNetworkRecorder instance which maintains the request history and caches response bodies. 21 | @interface FLEXNetworkObserver : NSObject 22 | 23 | /// Swizzling occurs when the observer is enabled for the first time. 24 | /// This reduces the impact of FLEX if network debugging is not desired. 25 | /// NOTE: this setting persists between launches of the app. 26 | @property (nonatomic, class, getter=isEnabled) BOOL enabled; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Network/PonyDebugger/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | PonyDebugger 3 | Copyright 2012 Square Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | 17 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/FLEXObjectExplorerFactory.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXObjectExplorerFactory.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 5/15/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXGlobalsEntry.h" 10 | 11 | #ifndef _FLEXObjectExplorerViewController_h 12 | #import "FLEXObjectExplorerViewController.h" 13 | #else 14 | @class FLEXObjectExplorerViewController; 15 | #endif 16 | 17 | NS_ASSUME_NONNULL_BEGIN 18 | 19 | @interface FLEXObjectExplorerFactory : NSObject 20 | 21 | + (nullable FLEXObjectExplorerViewController *)explorerViewControllerForObject:(nullable id)object; 22 | 23 | /// Register a specific explorer view controller class to be used when exploring 24 | /// an object of a specific class. Calls will overwrite existing registrations. 25 | /// Sections must be initialized using \c forObject: like 26 | + (void)registerExplorerSection:(Class)sectionClass forClass:(Class)objectClass; 27 | 28 | @end 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/FLEXColorPreviewSection.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXColorPreviewSection.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 12/12/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXSingleRowSection.h" 10 | #import "FLEXObjectInfoSection.h" 11 | 12 | @interface FLEXColorPreviewSection : FLEXSingleRowSection 13 | 14 | + (instancetype)forObject:(UIColor *)color; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/FLEXColorPreviewSection.m: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXColorPreviewSection.m 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 12/12/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXColorPreviewSection.h" 10 | 11 | @implementation FLEXColorPreviewSection 12 | 13 | + (instancetype)forObject:(UIColor *)color { 14 | return [self title:@"Color" reuse:nil cell:^(__kindof UITableViewCell *cell) { 15 | cell.backgroundColor = color; 16 | }]; 17 | } 18 | 19 | - (BOOL)canSelectRow:(NSInteger)row { 20 | return NO; 21 | } 22 | 23 | - (BOOL (^)(NSString *))filterMatcher { 24 | return ^BOOL(NSString *filterText) { 25 | // Hide when searching 26 | return !filterText.length; 27 | }; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/FLEXDefaultsContentSection.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXDefaultsContentSection.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 8/28/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXCollectionContentSection.h" 10 | #import "FLEXObjectInfoSection.h" 11 | 12 | @interface FLEXDefaultsContentSection : FLEXCollectionContentSection 13 | 14 | /// Uses \c NSUserDefaults.standardUserDefaults 15 | + (instancetype)standard; 16 | + (instancetype)forDefaults:(NSUserDefaults *)userDefaults; 17 | 18 | /// Whether or not to filter out keys not present in the app's user defaults file. 19 | /// 20 | /// This is useful for filtering out some useless keys that seem to appear 21 | /// in every app's defaults but are never actually used or touched by the app. 22 | /// Only applies to instances using \c NSUserDefaults.standardUserDefaults. 23 | /// This is the default for any instance using \c standardUserDefaults, so 24 | /// you must opt-out in those instances if you don't want this behavior. 25 | @property (nonatomic) BOOL onlyShowKeysForAppPrefs; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/FLEXObjectInfoSection.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXObjectInfoSection.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 8/28/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /// \c FLEXTableViewSection itself doesn't know about the object being explored. 12 | /// Subclasses might need this info to provide useful information about the object. Instead 13 | /// of adding an abstract class to the class hierarchy, subclasses can conform to this protocol 14 | /// to indicate that the only info they need to be initialized is the object being explored. 15 | @protocol FLEXObjectInfoSection 16 | 17 | + (instancetype)forObject:(id)object; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXBlockShortcuts.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXBlockShortcuts.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 1/30/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXShortcutsSection.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// Provides a description of the block's signature 14 | /// and access to an NSMethodSignature of the block 15 | @interface FLEXBlockShortcuts : FLEXShortcutsSection 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXBundleShortcuts.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXBundleShortcuts.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 12/12/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXShortcutsSection.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// Provides a "Browse Bundle Directory" action 14 | @interface FLEXBundleShortcuts : FLEXShortcutsSection 15 | 16 | @end 17 | 18 | NS_ASSUME_NONNULL_END 19 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXClassShortcuts.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXClassShortcuts.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 11/22/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXShortcutsSection.h" 10 | 11 | /// Provides handy shortcuts for class objects. 12 | /// This is the default section used for all class objects. 13 | @interface FLEXClassShortcuts : FLEXShortcutsSection 14 | 15 | + (instancetype)forObject:(Class)cls; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXImageShortcuts.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXImageShortcuts.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 8/29/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXShortcutsSection.h" 10 | 11 | /// Provides "view image" and "save image" shortcuts for UIImage objects 12 | @interface FLEXImageShortcuts : FLEXShortcutsSection 13 | 14 | + (instancetype)forObject:(UIImage *)image; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXLayerShortcuts.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXLayerShortcuts.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 12/12/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXShortcutsSection.h" 10 | 11 | @interface FLEXLayerShortcuts : FLEXShortcutsSection 12 | 13 | + (instancetype)forObject:(CALayer *)layer; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXLayerShortcuts.m: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXLayerShortcuts.m 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 12/12/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXLayerShortcuts.h" 10 | #import "FLEXShortcut.h" 11 | #import "FLEXImagePreviewViewController.h" 12 | 13 | @implementation FLEXLayerShortcuts 14 | 15 | + (instancetype)forObject:(CALayer *)layer { 16 | return [self forObject:layer additionalRows:@[ 17 | [FLEXActionShortcut title:@"Preview Image" subtitle:nil 18 | viewer:^UIViewController *(CALayer *layer) { 19 | return [FLEXImagePreviewViewController previewForLayer:layer]; 20 | } 21 | accessoryType:^UITableViewCellAccessoryType(CALayer *layer) { 22 | return CGRectIsEmpty(layer.bounds) ? UITableViewCellAccessoryNone : UITableViewCellAccessoryDisclosureIndicator; 23 | } 24 | ] 25 | ]]; 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXNSDataShortcuts.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXNSDataShortcuts.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/29/21. 6 | // 7 | 8 | #import "FLEXShortcutsSection.h" 9 | 10 | /// Adds a "UTF-8 String" shortcut 11 | @interface FLEXNSDataShortcuts : FLEXShortcutsSection 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXNSStringShortcuts.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXNSStringShortcuts.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/29/21. 6 | // 7 | 8 | #import "FLEXShortcutsSection.h" 9 | 10 | /// Adds a "UTF-8 Data" shortcut 11 | @interface FLEXNSStringShortcuts : FLEXShortcutsSection 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXNSStringShortcuts.m: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXNSStringShortcuts.m 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/29/21. 6 | // 7 | 8 | #import "FLEXNSStringShortcuts.h" 9 | #import "FLEXObjectExplorerFactory.h" 10 | #import "FLEXShortcut.h" 11 | 12 | @implementation FLEXNSStringShortcuts 13 | 14 | + (instancetype)forObject:(NSString *)string { 15 | NSUInteger length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; 16 | NSData *data = [NSData dataWithBytesNoCopy:(void *)string.UTF8String length:length freeWhenDone:NO]; 17 | 18 | return [self forObject:string additionalRows:@[ 19 | [FLEXActionShortcut title:@"UTF-8 Data" subtitle:^NSString *(id _) { 20 | return data.description; 21 | } viewer:^UIViewController *(id _) { 22 | return [FLEXObjectExplorerFactory explorerViewControllerForObject:data]; 23 | } accessoryType:^UITableViewCellAccessoryType(id _) { 24 | return UITableViewCellAccessoryDisclosureIndicator; 25 | }] 26 | ]]; 27 | } 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsFactory+Defaults.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXShortcutsFactory+Defaults.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 8/29/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXShortcutsSection.h" 10 | 11 | @interface FLEXShortcutsFactory (UIApplication) @end 12 | 13 | @interface FLEXShortcutsFactory (Views) @end 14 | 15 | @interface FLEXShortcutsFactory (ViewControllers) @end 16 | 17 | @interface FLEXShortcutsFactory (UIImage) @end 18 | 19 | @interface FLEXShortcutsFactory (NSBundle) @end 20 | 21 | @interface FLEXShortcutsFactory (Classes) @end 22 | 23 | @interface FLEXShortcutsFactory (Activities) @end 24 | 25 | @interface FLEXShortcutsFactory (Blocks) @end 26 | 27 | @interface FLEXShortcutsFactory (Foundation) @end 28 | 29 | @interface FLEXShortcutsFactory (WebKit_Safari) @end 30 | 31 | @interface FLEXShortcutsFactory (Pasteboard) @end 32 | 33 | @interface FLEXShortcutsFactory (FirebaseFirestore) @end 34 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXUIAppShortcuts.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXUIAppShortcuts.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 5/25/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXShortcutsSection.h" 10 | 11 | @interface FLEXUIAppShortcuts : FLEXShortcutsSection 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXViewControllerShortcuts.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXViewControllerShortcuts.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 12/12/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXShortcutsSection.h" 10 | 11 | @interface FLEXViewControllerShortcuts : FLEXShortcutsSection 12 | 13 | + (instancetype)forObject:(UIViewController *)viewController; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXViewShortcuts.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXViewShortcuts.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 12/11/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXShortcutsSection.h" 10 | 11 | /// Adds "Nearest View Controller" and "Preview Image" shortcuts to all views 12 | @interface FLEXViewShortcuts : FLEXShortcutsSection 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ObjectExplorers/Sections/Shortcuts/FLEXWindowShortcuts.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXWindowShortcuts.h 3 | // FLEX 4 | // 5 | // Created by AnthoPak on 26/09/2022. 6 | // 7 | 8 | #import "FLEXShortcutsSection.h" 9 | 10 | /// Adds "Animations Speed" shortcut for all windows 11 | @interface FLEXWindowShortcuts : FLEXShortcutsSection 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/CALayer+FLEX.h: -------------------------------------------------------------------------------- 1 | // 2 | // CALayer+FLEX.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 2/28/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CALayer (FLEX) 12 | 13 | @property (nonatomic) BOOL flex_continuousCorners; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/CALayer+FLEX.m: -------------------------------------------------------------------------------- 1 | // 2 | // CALayer+FLEX.m 3 | // FLEX 4 | // 5 | // Created by Tanner on 2/28/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "CALayer+FLEX.h" 10 | 11 | @interface CALayer (Private) 12 | @property (nonatomic) BOOL continuousCorners; 13 | @end 14 | 15 | @implementation CALayer (FLEX) 16 | 17 | static BOOL respondsToContinuousCorners = NO; 18 | 19 | + (void)load { 20 | respondsToContinuousCorners = [CALayer 21 | instancesRespondToSelector:@selector(setContinuousCorners:) 22 | ]; 23 | } 24 | 25 | - (BOOL)flex_continuousCorners { 26 | if (respondsToContinuousCorners) { 27 | return self.continuousCorners; 28 | } 29 | 30 | return NO; 31 | } 32 | 33 | - (void)setFlex_continuousCorners:(BOOL)enabled { 34 | if (respondsToContinuousCorners) { 35 | if (@available(iOS 13, *)) { 36 | self.cornerCurve = kCACornerCurveContinuous; 37 | } else { 38 | self.continuousCorners = enabled; 39 | // self.masksToBounds = NO; 40 | // self.allowsEdgeAntialiasing = YES; 41 | // self.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerTopEdge | kCALayerBottomEdge; 42 | } 43 | } 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/FLEXRuntime+Compare.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXRuntime+Compare.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 8/28/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "FLEXProperty.h" 11 | #import "FLEXIvar.h" 12 | #import "FLEXMethodBase.h" 13 | #import "FLEXProtocol.h" 14 | 15 | @interface FLEXProperty (Compare) 16 | - (NSComparisonResult)compare:(FLEXProperty *)other; 17 | @end 18 | 19 | @interface FLEXIvar (Compare) 20 | - (NSComparisonResult)compare:(FLEXIvar *)other; 21 | @end 22 | 23 | @interface FLEXMethodBase (Compare) 24 | - (NSComparisonResult)compare:(FLEXMethodBase *)other; 25 | @end 26 | 27 | @interface FLEXProtocol (Compare) 28 | - (NSComparisonResult)compare:(FLEXProtocol *)other; 29 | @end 30 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/FLEXRuntime+Compare.m: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXRuntime+Compare.m 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 8/28/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXRuntime+Compare.h" 10 | 11 | @implementation FLEXProperty (Compare) 12 | 13 | - (NSComparisonResult)compare:(FLEXProperty *)other { 14 | NSComparisonResult r = [self.name caseInsensitiveCompare:other.name]; 15 | if (r == NSOrderedSame) { 16 | // TODO make sure empty image name sorts above an image name 17 | return [self.imageName ?: @"" compare:other.imageName]; 18 | } 19 | 20 | return r; 21 | } 22 | 23 | @end 24 | 25 | @implementation FLEXIvar (Compare) 26 | 27 | - (NSComparisonResult)compare:(FLEXIvar *)other { 28 | return [self.name caseInsensitiveCompare:other.name]; 29 | } 30 | 31 | @end 32 | 33 | @implementation FLEXMethodBase (Compare) 34 | 35 | - (NSComparisonResult)compare:(FLEXMethodBase *)other { 36 | return [self.name caseInsensitiveCompare:other.name]; 37 | } 38 | 39 | @end 40 | 41 | @implementation FLEXProtocol (Compare) 42 | 43 | - (NSComparisonResult)compare:(FLEXProtocol *)other { 44 | return [self.name caseInsensitiveCompare:other.name]; 45 | } 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/NSDateFormatter+FLEX.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDateFormatter+FLEX.h 3 | // libflex:FLEX 4 | // 5 | // Created by Tanner Bennett on 7/24/22. 6 | // Copyright © 2022 Flipboard. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef NS_ENUM(NSUInteger, FLEXDateFormat) { 12 | // hour:minute [AM|PM] 13 | FLEXDateFormatClock, 14 | // hour:minute:second [AM|PM] 15 | FLEXDateFormatPreciseClock, 16 | // year-month-day hour:minute:second.millisecond 17 | FLEXDateFormatVerbose, 18 | }; 19 | 20 | @interface NSDateFormatter (FLEX) 21 | 22 | + (NSString *)flex_stringFrom:(NSDate *)date format:(FLEXDateFormat)format; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/NSDateFormatter+FLEX.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSDateFormatter+FLEX.m 3 | // libflex:FLEX 4 | // 5 | // Created by Tanner Bennett on 7/24/22. 6 | // Copyright © 2022 Flipboard. All rights reserved. 7 | // 8 | 9 | #import "NSDateFormatter+FLEX.h" 10 | 11 | @implementation NSDateFormatter (FLEX) 12 | 13 | + (NSString *)flex_stringFrom:(NSDate *)date format:(FLEXDateFormat)format { 14 | static NSDateFormatter *formatter = nil; 15 | if (!formatter) { 16 | formatter = [NSDateFormatter new]; 17 | } 18 | 19 | switch (format) { 20 | case FLEXDateFormatClock: 21 | formatter.dateFormat = @"h:mm a"; 22 | break; 23 | case FLEXDateFormatPreciseClock: 24 | formatter.dateFormat = @"h:mm:ss a"; 25 | break; 26 | case FLEXDateFormatVerbose: 27 | formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss.SSS"; 28 | break; 29 | } 30 | 31 | return [formatter stringFromDate:date]; 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/NSTimer+FLEX.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSTimer+Blocks.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/23/17. 6 | // 7 | 8 | #import 9 | 10 | typedef void (^VoidBlock)(void); 11 | 12 | @interface NSTimer (Blocks) 13 | 14 | + (instancetype)flex_fireSecondsFromNow:(NSTimeInterval)delay block:(VoidBlock)block; 15 | 16 | // Forward declaration 17 | //+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/NSTimer+FLEX.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSTimer+Blocks.m 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/23/17. 6 | // 7 | 8 | #import "NSTimer+FLEX.h" 9 | 10 | @interface Block : NSObject 11 | - (void)invoke; 12 | @end 13 | 14 | #pragma clang diagnostic ignored "-Wincomplete-implementation" 15 | @implementation NSTimer (Blocks) 16 | 17 | + (instancetype)flex_fireSecondsFromNow:(NSTimeInterval)delay block:(VoidBlock)block { 18 | if (@available(iOS 10, *)) { 19 | return [self scheduledTimerWithTimeInterval:delay repeats:NO block:(id)block]; 20 | } else { 21 | return [self scheduledTimerWithTimeInterval:delay target:block selector:@selector(invoke) userInfo:nil repeats:NO]; 22 | } 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/Private/Cocoa+FLEXShortcuts.h: -------------------------------------------------------------------------------- 1 | // 2 | // Cocoa+FLEXShortcuts.h 3 | // Pods 4 | // 5 | // Created by Tanner on 2/24/21. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @interface UIAlertAction (FLEXShortcuts) 12 | @property (nonatomic, readonly) NSString *flex_styleName; 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/Private/Cocoa+FLEXShortcuts.m: -------------------------------------------------------------------------------- 1 | // 2 | // Cocoa+FLEXShortcuts.m 3 | // Pods 4 | // 5 | // Created by Tanner on 2/24/21. 6 | // 7 | // 8 | 9 | #import "Cocoa+FLEXShortcuts.h" 10 | 11 | @implementation UIAlertAction (FLEXShortcuts) 12 | - (NSString *)flex_styleName { 13 | switch (self.style) { 14 | case UIAlertActionStyleDefault: 15 | return @"Default style"; 16 | case UIAlertActionStyleCancel: 17 | return @"Cancel style"; 18 | case UIAlertActionStyleDestructive: 19 | return @"Destructive style"; 20 | 21 | default: 22 | return [NSString stringWithFormat:@"Unknown (%@)", @(self.style)]; 23 | } 24 | } 25 | @end 26 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/Private/NSDictionary+ObjcRuntime.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDictionary+ObjcRuntime.h 3 | // FLEX 4 | // 5 | // Derived from MirrorKit. 6 | // Created by Tanner on 7/5/15. 7 | // Copyright (c) 2020 FLEX Team. All rights reserved. 8 | // 9 | 10 | #import 11 | #import 12 | 13 | @interface NSDictionary (ObjcRuntime) 14 | 15 | /// \c kFLEXPropertyAttributeKeyTypeEncoding is the only required key. 16 | /// Keys representing a boolean value should have a value of \c YES instead of an empty string. 17 | - (NSString *)propertyAttributesString; 18 | 19 | + (instancetype)attributesDictionaryForProperty:(objc_property_t)property; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/Private/NSMapTable+FLEX_Subscripting.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMapTable+FLEX_Subscripting.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 1/9/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSMapTable (FLEX_Subscripting) 14 | 15 | - (nullable ObjectType)objectForKeyedSubscript:(KeyType)key; 16 | - (void)setObject:(nullable ObjectType)obj forKeyedSubscript:(KeyType )key; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/Private/NSMapTable+FLEX_Subscripting.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMapTable+FLEX_Subscripting.m 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 1/9/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "NSMapTable+FLEX_Subscripting.h" 10 | 11 | @implementation NSMapTable (FLEX_Subscripting) 12 | 13 | - (id)objectForKeyedSubscript:(id)key { 14 | return [self objectForKey:key]; 15 | } 16 | 17 | - (void)setObject:(id)obj forKeyedSubscript:(id)key { 18 | [self setObject:obj forKey:key]; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/Private/NSString+ObjcRuntime.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+ObjcRuntime.h 3 | // FLEX 4 | // 5 | // Derived from MirrorKit. 6 | // Created by Tanner on 7/1/15. 7 | // Copyright (c) 2020 FLEX Team. All rights reserved. 8 | // 9 | 10 | #import 11 | 12 | @interface NSString (Utilities) 13 | 14 | /// A dictionary of property attributes if the receiver is a valid property attributes string. 15 | /// Values are either a string or \c YES. Boolean attributes which are false will not be 16 | /// present in the dictionary. See this link on how to construct a proper attributes string: 17 | /// https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html 18 | /// 19 | /// Note: this method doesn't work properly for certain type encodings, and neither does 20 | /// the property_copyAttributeValue function in the runtime itself. Radar: FB7499230 21 | - (NSDictionary *)propertyAttributes; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/Private/UIView+FLEX_Layout.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+FLEX_Layout.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 7/18/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #define Padding(p) UIEdgeInsetsMake(p, p, p, p) 12 | 13 | @interface UIView (FLEX_Layout) 14 | 15 | - (void)flex_centerInView:(UIView *)view; 16 | - (void)flex_pinEdgesTo:(UIView *)view; 17 | - (void)flex_pinEdgesTo:(UIView *)view withInsets:(UIEdgeInsets)insets; 18 | - (void)flex_pinEdgesToSuperview; 19 | - (void)flex_pinEdgesToSuperviewWithInsets:(UIEdgeInsets)insets; 20 | - (void)flex_pinEdgesToSuperviewWithInsets:(UIEdgeInsets)insets aboveView:(UIView *)sibling; 21 | - (void)flex_pinEdgesToSuperviewWithInsets:(UIEdgeInsets)insets belowView:(UIView *)sibling; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/UIFont+FLEX.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIFont+FLEX.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 12/20/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIFont (FLEX) 12 | 13 | @property (nonatomic, readonly, class) UIFont *flex_defaultTableCellFont; 14 | @property (nonatomic, readonly, class) UIFont *flex_codeFont; 15 | @property (nonatomic, readonly, class) UIFont *flex_smallCodeFont; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/UIGestureRecognizer+Blocks.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIGestureRecognizer+Blocks.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 12/20/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void (^GestureBlock)(UIGestureRecognizer *gesture); 12 | 13 | 14 | @interface UIGestureRecognizer (Blocks) 15 | 16 | + (instancetype)flex_action:(GestureBlock)action; 17 | 18 | @property (nonatomic, setter=flex_setAction:) GestureBlock flex_action; 19 | 20 | @end 21 | 22 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/UIGestureRecognizer+Blocks.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIGestureRecognizer+Blocks.m 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 12/20/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "UIGestureRecognizer+Blocks.h" 10 | #import 11 | 12 | 13 | @implementation UIGestureRecognizer (Blocks) 14 | 15 | static void * actionKey; 16 | 17 | + (instancetype)flex_action:(GestureBlock)action { 18 | UIGestureRecognizer *gesture = [[self alloc] initWithTarget:nil action:nil]; 19 | [gesture addTarget:gesture action:@selector(flex_invoke)]; 20 | gesture.flex_action = action; 21 | return gesture; 22 | } 23 | 24 | - (void)flex_invoke { 25 | self.flex_action(self); 26 | } 27 | 28 | - (GestureBlock)flex_action { 29 | return objc_getAssociatedObject(self, &actionKey); 30 | } 31 | 32 | - (void)flex_setAction:(GestureBlock)action { 33 | objc_setAssociatedObject(self, &actionKey, action, OBJC_ASSOCIATION_COPY); 34 | } 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/UIMenu+FLEX.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIMenu+FLEX.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 1/28/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIMenu (FLEX) 12 | 13 | + (instancetype)flex_inlineMenuWithTitle:(NSString *)title 14 | image:(UIImage *)image 15 | children:(NSArray *)children; 16 | 17 | - (instancetype)flex_collapsed; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/UIMenu+FLEX.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIMenu+FLEX.m 3 | // FLEX 4 | // 5 | // Created by Tanner on 1/28/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "UIMenu+FLEX.h" 10 | 11 | @implementation UIMenu (FLEX) 12 | 13 | + (instancetype)flex_inlineMenuWithTitle:(NSString *)title image:(UIImage *)image children:(NSArray *)children { 14 | return [UIMenu 15 | menuWithTitle:title 16 | image:image 17 | identifier:nil 18 | options:UIMenuOptionsDisplayInline 19 | children:children 20 | ]; 21 | } 22 | 23 | - (instancetype)flex_collapsed { 24 | return [UIMenu 25 | menuWithTitle:@"" 26 | image:nil 27 | identifier:nil 28 | options:UIMenuOptionsDisplayInline 29 | children:@[[UIMenu 30 | menuWithTitle:self.title 31 | image:self.image 32 | identifier:self.identifier 33 | options:0 34 | children:self.children 35 | ]] 36 | ]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/UIPasteboard+FLEX.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIPasteboard+FLEX.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 12/9/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIPasteboard (FLEX) 12 | 13 | /// For copying an object which could be a string, data, or number 14 | - (void)flex_copy:(id)unknownType; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/UIPasteboard+FLEX.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIPasteboard+FLEX.m 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 12/9/19. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "UIPasteboard+FLEX.h" 10 | 11 | @implementation UIPasteboard (FLEX) 12 | 13 | - (void)flex_copy:(id)object { 14 | if (!object) { 15 | return; 16 | } 17 | 18 | if ([object isKindOfClass:[NSString class]]) { 19 | UIPasteboard.generalPasteboard.string = object; 20 | } else if([object isKindOfClass:[NSData class]]) { 21 | [UIPasteboard.generalPasteboard setData:object forPasteboardType:@"public.data"]; 22 | } else if ([object isKindOfClass:[NSNumber class]]) { 23 | UIPasteboard.generalPasteboard.string = [object stringValue]; 24 | } else { 25 | // TODO: make this an alert instead of an exception 26 | [NSException raise:NSInternalInconsistencyException 27 | format:@"Tried to copy unsupported type: %@", [object class]]; 28 | } 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/UITextField+Range.h: -------------------------------------------------------------------------------- 1 | // 2 | // UITextField+Range.h 3 | // FLEX 4 | // 5 | // Created by Tanner on 6/13/17. 6 | // 7 | 8 | #import 9 | 10 | @interface UITextField (Range) 11 | 12 | @property (nonatomic, readonly) NSRange flex_selectedRange; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Categories/UITextField+Range.m: -------------------------------------------------------------------------------- 1 | // 2 | // UITextField+Range.m 3 | // FLEX 4 | // 5 | // Created by Tanner on 6/13/17. 6 | // 7 | 8 | #import "UITextField+Range.h" 9 | 10 | @implementation UITextField (Range) 11 | 12 | - (NSRange)flex_selectedRange { 13 | UITextRange *r = self.selectedTextRange; 14 | if (r) { 15 | NSInteger loc = [self offsetFromPosition:self.beginningOfDocument toPosition:r.start]; 16 | NSInteger len = [self offsetFromPosition:r.start toPosition:r.end]; 17 | return NSMakeRange(loc, len); 18 | } 19 | 20 | return NSMakeRange(NSNotFound, 0); 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Keyboard/FLEXKeyboardHelpViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXKeyboardHelpViewController.h 3 | // FLEX 4 | // 5 | // Created by Ryan Olson on 9/19/15. 6 | // Copyright © 2015 f. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FLEXKeyboardHelpViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Runtime/Objc/FLEXRuntimeConstants.m: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXRuntimeConstants.m 3 | // FLEX 4 | // 5 | // Created by Tanner on 3/11/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXRuntimeConstants.h" 10 | 11 | const unsigned int kFLEXNumberOfImplicitArgs = 2; 12 | 13 | NSString *const kFLEXPropertyAttributeKeyTypeEncoding = @"T"; 14 | NSString *const kFLEXPropertyAttributeKeyBackingIvarName = @"V"; 15 | NSString *const kFLEXPropertyAttributeKeyReadOnly = @"R"; 16 | NSString *const kFLEXPropertyAttributeKeyCopy = @"C"; 17 | NSString *const kFLEXPropertyAttributeKeyRetain = @"&"; 18 | NSString *const kFLEXPropertyAttributeKeyNonAtomic = @"N"; 19 | NSString *const kFLEXPropertyAttributeKeyCustomGetter = @"G"; 20 | NSString *const kFLEXPropertyAttributeKeyCustomSetter = @"S"; 21 | NSString *const kFLEXPropertyAttributeKeyDynamic = @"D"; 22 | NSString *const kFLEXPropertyAttributeKeyWeak = @"W"; 23 | NSString *const kFLEXPropertyAttributeKeyGarbageCollectable = @"P"; 24 | NSString *const kFLEXPropertyAttributeKeyOldStyleTypeEncoding = @"t"; 25 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Runtime/Objc/FLEXSwiftInternal.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXSwiftInternal.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 10/28/21. 6 | // Copyright © 2021 Flipboard. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | #ifdef __cplusplus 14 | extern "C" { 15 | #endif 16 | 17 | BOOL FLEXIsSwiftObjectOrClass(id objOrClass); 18 | 19 | #ifdef __cplusplus 20 | } 21 | #endif 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Runtime/Objc/Reflection/FLEXMetadataExtras.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXMetadataExtras.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 4/26/22. 6 | // 7 | 8 | #import 9 | #import "FLEXMethodBase.h" 10 | #import "FLEXProperty.h" 11 | #import "FLEXIvar.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | /// A dictionary mapping type encoding strings to an array of field titles 16 | extern NSString * const FLEXAuxiliarynfoKeyFieldLabels; 17 | 18 | @protocol FLEXMetadataAuxiliaryInfo 19 | 20 | /// Used to supply arbitrary additional data that need not be exposed by their own properties 21 | - (nullable id)auxiliaryInfoForKey:(NSString *)key; 22 | 23 | @end 24 | 25 | @interface FLEXMethodBase (Auxiliary) @end 26 | @interface FLEXProperty (Auxiliary) @end 27 | @interface FLEXIvar (Auxiliary) @end 28 | 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/Utility/Runtime/Objc/Reflection/FLEXMetadataExtras.m: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXMetadataExtras.m 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 4/26/22. 6 | // 7 | 8 | #import "FLEXMetadataExtras.h" 9 | 10 | NSString * const FLEXAuxiliarynfoKeyFieldLabels = @"FLEXAuxiliarynfoKeyFieldLabels"; 11 | 12 | @implementation FLEXMethodBase (Auxiliary) 13 | - (id)auxiliaryInfoForKey:(NSString *)key { return nil; } 14 | @end 15 | 16 | @implementation FLEXProperty (Auxiliary) 17 | - (id)auxiliaryInfoForKey:(NSString *)key { return nil; } 18 | @end 19 | 20 | @implementation FLEXIvar (Auxiliary) 21 | - (id)auxiliaryInfoForKey:(NSString *)key { return nil; } 22 | @end 23 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ViewHierarchy/FLEXHierarchyViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXHierarchyViewController.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 1/9/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXNavigationController.h" 10 | 11 | @protocol FLEXHierarchyDelegate 12 | - (void)viewHierarchyDidDismiss:(UIView *)selectedView; 13 | @end 14 | 15 | /// A navigation controller which manages two child view controllers: 16 | /// a 3D Reveal-like hierarchy explorer, and a 2D tree-list hierarchy explorer. 17 | @interface FLEXHierarchyViewController : FLEXNavigationController 18 | 19 | + (instancetype)delegate:(id)delegate; 20 | + (instancetype)delegate:(id)delegate 21 | viewsAtTap:(NSArray *)viewsAtTap 22 | selectedView:(UIView *)selectedView; 23 | 24 | - (void)toggleHierarchyMode; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ViewHierarchy/FLEXImagePreviewViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXImagePreviewViewController.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 6/12/14. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FLEXImagePreviewViewController : UIViewController 12 | 13 | + (instancetype)previewForView:(UIView *)view; 14 | + (instancetype)previewForLayer:(CALayer *)layer; 15 | + (instancetype)forImage:(UIImage *)image; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ViewHierarchy/SnapshotExplorer/FHSRangeSlider.h: -------------------------------------------------------------------------------- 1 | // 2 | // FHSRangeSlider.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 1/7/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FHSRangeSlider : UIControl 14 | 15 | @property (nonatomic) CGFloat allowedMinValue; 16 | @property (nonatomic) CGFloat allowedMaxValue; 17 | @property (nonatomic) CGFloat minValue; 18 | @property (nonatomic) CGFloat maxValue; 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ViewHierarchy/SnapshotExplorer/FHSView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FHSView.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 1/6/20. 6 | // 7 | 8 | #import 9 | 10 | @interface FHSView : NSObject { 11 | @private 12 | BOOL _inScrollView; 13 | } 14 | 15 | + (instancetype)forView:(UIView *)view isInScrollView:(BOOL)inScrollView; 16 | 17 | /// Intentionally not weak 18 | @property (nonatomic, readonly) UIView *view; 19 | @property (nonatomic, readonly) NSString *identifier; 20 | 21 | @property (nonatomic, readonly) NSString *title; 22 | /// Whether or not this view item should be visually distinguished 23 | @property (nonatomic, readwrite) BOOL important; 24 | 25 | @property (nonatomic, readonly) CGRect frame; 26 | @property (nonatomic, readonly) BOOL hidden; 27 | @property (nonatomic, readonly) UIImage *snapshotImage; 28 | 29 | @property (nonatomic, readonly) NSArray *children; 30 | @property (nonatomic, readonly) NSString *summary; 31 | 32 | /// @return importantAttr if .important, otherwise normalAttr 33 | //- (id)ifImportant:(id)importantAttr ifNormal:(id)normalAttr; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ViewHierarchy/SnapshotExplorer/FHSViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FHSViewController.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 1/6/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// The view controller 14 | /// "FHS" stands for "FLEX (view) hierarchy snapshot" 15 | @interface FHSViewController : UIViewController 16 | 17 | /// Use this when you want to snapshot a set of windows. 18 | + (instancetype)snapshotWindows:(NSArray *)windows; 19 | /// Use this when you want to snapshot a specific slice of the view hierarchy. 20 | + (instancetype)snapshotView:(UIView *)view; 21 | /// Use this when you want to emphasize specific views on the screen. 22 | /// These views must all be in the same window as the selected view. 23 | + (instancetype)snapshotViewsAtTap:(NSArray *)viewsAtTap selectedView:(UIView *)view; 24 | 25 | @property (nonatomic, nullable) UIView *selectedView; 26 | 27 | @end 28 | 29 | NS_ASSUME_NONNULL_END 30 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ViewHierarchy/SnapshotExplorer/FHSViewSnapshot.h: -------------------------------------------------------------------------------- 1 | // 2 | // FHSViewSnapshot.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 1/9/20. 6 | // Copyright © 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FHSView.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FHSViewSnapshot : NSObject 14 | 15 | + (instancetype)snapshotWithView:(FHSView *)view; 16 | 17 | @property (nonatomic, readonly) FHSView *view; 18 | 19 | @property (nonatomic, readonly) NSString *title; 20 | /// Whether or not this view item should be visually distinguished 21 | @property (nonatomic, readwrite) BOOL important; 22 | 23 | @property (nonatomic, readonly) CGRect frame; 24 | @property (nonatomic, readonly) BOOL hidden; 25 | @property (nonatomic, readonly) UIImage *snapshotImage; 26 | 27 | @property (nonatomic, readonly) NSArray *children; 28 | @property (nonatomic, readonly) NSString *summary; 29 | 30 | /// Returns a different color based on whether or not the view is important 31 | @property (nonatomic, readonly) UIColor *headerColor; 32 | 33 | - (FHSViewSnapshot *)snapshotForView:(UIView *)view; 34 | 35 | @end 36 | 37 | NS_ASSUME_NONNULL_END 38 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ViewHierarchy/SnapshotExplorer/Scene/FHSSnapshotNodes.h: -------------------------------------------------------------------------------- 1 | // 2 | // FHSSnapshotNodes.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 1/7/20. 6 | // 7 | 8 | #import "FHSViewSnapshot.h" 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// Container that holds references to the SceneKit nodes associated with a snapshot. 14 | @interface FHSSnapshotNodes : NSObject 15 | 16 | + (instancetype)snapshot:(FHSViewSnapshot *)snapshot depth:(NSInteger)depth; 17 | 18 | @property (nonatomic, readonly) FHSViewSnapshot *snapshotItem; 19 | @property (nonatomic, readonly) NSInteger depth; 20 | 21 | /// The view image itself 22 | @property (nonatomic, nullable) SCNNode *snapshot; 23 | /// Goes on top of the snapshot, has rounded top corners 24 | @property (nonatomic, nullable) SCNNode *header; 25 | /// The bounding box drawn around the snapshot 26 | @property (nonatomic, nullable) SCNNode *border; 27 | 28 | /// Used to indicate when a view is selected 29 | @property (nonatomic, getter=isHighlighted) BOOL highlighted; 30 | /// Used to indicate when a view is de-emphasized 31 | @property (nonatomic, getter=isDimmed) BOOL dimmed; 32 | 33 | @property (nonatomic) BOOL forceHideHeader; 34 | 35 | @end 36 | 37 | NS_ASSUME_NONNULL_END 38 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXHierarchyTableViewCell.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 2014-05-02. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FLEXHierarchyTableViewCell : UITableViewCell 12 | 13 | - (id)initWithReuseIdentifier:(NSString *)reuseIdentifier; 14 | 15 | @property (nonatomic) NSInteger viewDepth; 16 | @property (nonatomic) UIColor *randomColorTag; 17 | @property (nonatomic) UIColor *indicatedViewColor; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/FLEX/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXHierarchyTableViewController.h 3 | // Flipboard 4 | // 5 | // Created by Ryan Olson on 2014-05-01. 6 | // Copyright (c) 2020 FLEX Team. All rights reserved. 7 | // 8 | 9 | #import "FLEXTableViewController.h" 10 | 11 | @interface FLEXHierarchyTableViewController : FLEXTableViewController 12 | 13 | + (instancetype)windows:(NSArray *)allWindows 14 | viewsAtTap:(NSArray *)viewsAtTap 15 | selectedView:(UIView *)selectedView; 16 | 17 | @property (nonatomic) UIView *selectedView; 18 | @property (nonatomic) void(^didSelectRowAction)(UIView *selectedView); 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/KSCrash/Recording/KSCrashDoctor.h: -------------------------------------------------------------------------------- 1 | // 2 | // KSCrashDoctor.h 3 | // KSCrash 4 | // 5 | // Created by Karl Stenerud on 2012-11-10. 6 | // Copyright (c) 2012 Karl Stenerud. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KSCrashDoctor : NSObject 12 | 13 | + (KSCrashDoctor*) doctor; 14 | 15 | - (NSString*) diagnoseCrash:(NSDictionary*) crashReport; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/KSCrash/llvm/ADT/None.h: -------------------------------------------------------------------------------- 1 | //===-- None.h - Simple null value for implicit construction ------*- C++ -*-=// 2 | // 3 | // The LLVM Compiler Infrastructure 4 | // 5 | // This file is distributed under the University of Illinois Open Source 6 | // License. See LICENSE.TXT for details. 7 | // 8 | //===----------------------------------------------------------------------===// 9 | // 10 | // This file provides None, an enumerator for use in implicit constructors 11 | // of various (usually templated) types to make such construction more 12 | // terse. 13 | // 14 | //===----------------------------------------------------------------------===// 15 | 16 | #ifndef LLVM_ADT_NONE_H 17 | #define LLVM_ADT_NONE_H 18 | 19 | namespace llvm { 20 | /// \brief A simple null object to allow implicit construction of Optional 21 | /// and similar types without having to spell out the specialization's name. 22 | enum class NoneType { None }; 23 | const NoneType None = None; 24 | } 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/KSCrash/swift/Basic/ValueWitnessMangling.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/FWDebug/Classes/Vendor/KSCrash/swift/Basic/ValueWitnessMangling.def -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/Reflex/FLExtensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FLExtensions.swift 3 | // Reflex 4 | // 5 | // Created by Tanner Bennett on 10/29/21. 6 | // Copyright © 2021 Tanner Bennett. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension FLEXTypeEncoding { 12 | static func encodeObjcObject(typeName: String) -> String { 13 | return "@\"\(typeName)\"" 14 | } 15 | 16 | static func encodeStruct(typeName: String? = nil, fields: [String]) -> String { 17 | if let typeName = typeName { 18 | return "{\(typeName)=\(fields.joined())}" 19 | } 20 | 21 | return "{\(fields.joined())}" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/RuntimeBrowser/RTBMethod.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTBMethod.h 3 | // OCRuntime 4 | // 5 | // Created by Nicolas Seriot on 06/05/15. 6 | // Copyright (c) 2015 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | // TODO: create RTBMethod to provide selector, description, return type and argument types 10 | 11 | #import 12 | #import 13 | 14 | @interface RTBMethod : NSObject 15 | 16 | + (instancetype)methodObjectWithMethod:(Method)method isClassMethod:(BOOL)isClassMethod; 17 | 18 | - (NSString *)headerDescriptionWithNewlineAfterArgs:(BOOL)newlineAfterArgs; 19 | 20 | - (NSString *)returnTypeEncoded; 21 | - (NSString *)returnTypeDecoded; 22 | - (NSArray *)argumentsTypesDecoded; 23 | - (NSString *)selectorString; 24 | - (SEL)selector; 25 | - (BOOL)hasArguments; 26 | 27 | - (NSString *)filePath; 28 | - (NSString *)symbolName; 29 | - (NSString *)categoryName; 30 | 31 | - (Method)method; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/RuntimeBrowser/RTBProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // ProtocolStub.h 3 | // RuntimeBrowser 4 | // 5 | // Created by Nicolas Seriot on 24/04/15. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @interface RTBProtocol : NSObject 12 | 13 | @property (nonatomic, strong) NSString *protocolName; 14 | @property (nonatomic, strong) NSMutableSet *conformingClassesStubsSet; 15 | 16 | + (instancetype)protocolStubWithProtocolName:(NSString *)protocolName; 17 | 18 | - (NSArray *)sortedAdoptedProtocolsNames; 19 | - (NSArray *)sortedMethodsRequired:(BOOL)required instanceMethods:(BOOL)instanceMethods; 20 | 21 | // BrowserNode protocol 22 | 23 | - (NSArray *)children; // same as subclassesStubs 24 | - (NSString *)nodeName;// same as stubClassname 25 | - (NSString *)nodeInfo; 26 | - (BOOL)canBeSavedAsHeader; 27 | 28 | - (BOOL)hasChildren; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/swift-atomics/Atomics/AtomicOptional.swift: -------------------------------------------------------------------------------- 1 | //===----------------------------------------------------------------------===// 2 | // 3 | // This source file is part of the Swift Atomics open source project 4 | // 5 | // Copyright (c) 2020 Apple Inc. and the Swift project authors 6 | // Licensed under Apache License v2.0 with Runtime Library Exception 7 | // 8 | // See https://swift.org/LICENSE.txt for license information 9 | // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors 10 | // 11 | //===----------------------------------------------------------------------===// 12 | 13 | /// An atomic value that also supports atomic operations when wrapped 14 | /// in an `Optional`. Atomic optional wrappable types come with a 15 | /// standalone atomic representation for their optional-wrapped 16 | /// variants. 17 | public protocol AtomicOptionalWrappable: AtomicValue { 18 | /// The atomic storage representation for `Optional`. 19 | associatedtype AtomicOptionalRepresentation: AtomicStorage 20 | where AtomicOptionalRepresentation.Value == Self? 21 | } 22 | 23 | extension Optional: AtomicValue where Wrapped: AtomicOptionalWrappable { 24 | public typealias AtomicRepresentation = Wrapped.AtomicOptionalRepresentation 25 | } 26 | -------------------------------------------------------------------------------- /FWDebug/Classes/Vendor/swift-atomics/_AtomicsShims/_AtomicsShims.c: -------------------------------------------------------------------------------- 1 | //===----------------------------------------------------------------------===// 2 | // 3 | // This source file is part of the Swift Atomics open source project 4 | // 5 | // Copyright (c) 2020 Apple Inc. and the Swift project authors 6 | // Licensed under Apache License v2.0 with Runtime Library Exception 7 | // 8 | // See https://swift.org/LICENSE.txt for license information 9 | // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors 10 | // 11 | //===----------------------------------------------------------------------===// 12 | 13 | #include "_AtomicsShims.h" 14 | 15 | #if ENABLE_DOUBLEWIDE_ATOMICS 16 | // FIXME: These should be static inline header-only shims, but Swift 5.3 doesn't 17 | // like calls to swift_retain_n/swift_release_n appearing in Swift code, not 18 | // even when imported through C. (See https://bugs.swift.org/browse/SR-13708) 19 | 20 | void _sa_retain_n(void *object, uint32_t n) 21 | { 22 | extern void *swift_retain_n(void *object, uint32_t n); 23 | swift_retain_n(object, n); 24 | } 25 | 26 | void _sa_release_n(void *object, uint32_t n) 27 | { 28 | extern void swift_release_n(void *object, uint32_t n); 29 | swift_release_n(object, n); 30 | } 31 | #endif 32 | -------------------------------------------------------------------------------- /FWDebug_Server.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/FWDebug_Server.gif -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/FWDebug: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/FWDebug -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Info.plist -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/css/jquery.fileupload.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /* 3 | * jQuery File Upload Plugin CSS 1.3.0 4 | * https://github.com/blueimp/jQuery-File-Upload 5 | * 6 | * Copyright 2013, Sebastian Tschan 7 | * https://blueimp.net 8 | * 9 | * Licensed under the MIT license: 10 | * http://www.opensource.org/licenses/MIT 11 | */ 12 | 13 | .fileinput-button { 14 | position: relative; 15 | overflow: hidden; 16 | } 17 | .fileinput-button input { 18 | position: absolute; 19 | top: 0; 20 | right: 0; 21 | margin: 0; 22 | opacity: 0; 23 | -ms-filter: 'alpha(opacity=0)'; 24 | font-size: 200px; 25 | direction: ltr; 26 | cursor: pointer; 27 | } 28 | 29 | /* Fixes for IE < 8 */ 30 | @media screen\9 { 31 | .fileinput-button input { 32 | filter: alpha(opacity=0); 33 | font-size: 100%; 34 | height: 100%; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "PROLOGUE" = "

Drag & drop files on this window or use the \"Upload Files…\" button to upload new files.

"; 2 | "EPILOGUE" = ""; 3 | "FOOTER_FORMAT" = "%@ %@"; 4 | -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/js/tmpl.min.js: -------------------------------------------------------------------------------- 1 | !function(a){"use strict";var b=function(a,c){var d=/[^\w\-\.:]/.test(a)?new Function(b.arg+",tmpl","var _e=tmpl.encode"+b.helper+",_s='"+a.replace(b.regexp,b.func)+"';return _s;"):b.cache[a]=b.cache[a]||b(b.load(a));return c?d(c,b):function(a){return d(a,b)}};b.cache={},b.load=function(a){return document.getElementById(a).innerHTML},b.regexp=/([\s'\\])(?!(?:[^{]|\{(?!%))*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g,b.func=function(a,b,c,d,e,f){return b?{"\n":"\\n","\r":"\\r"," ":"\\t"," ":" "}[b]||"\\"+b:c?"="===c?"'+_e("+d+")+'":"'+("+d+"==null?'':"+d+")+'":e?"';":f?"_s+='":void 0},b.encReg=/[<>&"'\x00]/g,b.encMap={"<":"<",">":">","&":"&",'"':""","'":"'"},b.encode=function(a){return(null==a?"":""+a).replace(b.encReg,function(a){return b.encMap[a]||""})},b.arg="o",b.helper=",print=function(s,e){_s+=e?(s==null?'':s):_e(s);},include=function(s,d){_s+=tmpl(s,d);}","function"==typeof define&&define.amd?define(function(){return b}):a.tmpl=b}(this); -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/Headers/CallAccessor.h: -------------------------------------------------------------------------------- 1 | // 2 | // CallAccessor.h 3 | // Echo 4 | // 5 | // Created by Alejandro Alonso 6 | // Copyright © 2021 Alejandro Alonso. All rights reserved. 7 | // 8 | 9 | #ifndef CALL_ACCESSOR_H 10 | #define CALL_ACCESSOR_H 11 | 12 | #include 13 | 14 | typedef struct CMetadataResponse { 15 | const void *Metadata; 16 | size_t State; 17 | } CMetadataResponse; 18 | 19 | const CMetadataResponse echo_callAccessor0(const void *ptr, size_t request); 20 | 21 | const CMetadataResponse echo_callAccessor1(const void *ptr, size_t request, 22 | const void *arg0); 23 | 24 | const CMetadataResponse echo_callAccessor2(const void *ptr, size_t request, 25 | const void *arg0, const void *arg1); 26 | 27 | const CMetadataResponse echo_callAccessor3(const void *ptr, size_t request, 28 | const void *arg0, const void *arg1, 29 | const void *arg2); 30 | 31 | // Where args is a list of pointers. 32 | const CMetadataResponse echo_callAccessor(const void *ptr, size_t request, 33 | const void *args); 34 | 35 | #endif /* CALL_ACCESSOR_H */ 36 | -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/Headers/FLEXMetadataExtras.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXMetadataExtras.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 4/26/22. 6 | // 7 | 8 | #import 9 | #import "FLEXMethodBase.h" 10 | #import "FLEXProperty.h" 11 | #import "FLEXIvar.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | /// A dictionary mapping type encoding strings to an array of field titles 16 | extern NSString * const FLEXAuxiliarynfoKeyFieldLabels; 17 | 18 | @protocol FLEXMetadataAuxiliaryInfo 19 | 20 | /// Used to supply arbitrary additional data that need not be exposed by their own properties 21 | - (nullable id)auxiliaryInfoForKey:(NSString *)key; 22 | 23 | @end 24 | 25 | @interface FLEXMethodBase (Auxiliary) @end 26 | @interface FLEXProperty (Auxiliary) @end 27 | @interface FLEXIvar (Auxiliary) @end 28 | 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/Headers/FLEXSwiftInternal.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXSwiftInternal.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 10/28/21. 6 | // Copyright © 2021 Flipboard. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | #ifdef __cplusplus 14 | extern "C" { 15 | #endif 16 | 17 | BOOL FLEXIsSwiftObjectOrClass(id objOrClass); 18 | 19 | #ifdef __cplusplus 20 | } 21 | #endif 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/Headers/FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/20. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FWDebugManager.h" 10 | -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/Info.plist -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/Modules/FWDebug.swiftmodule/arm64-apple-ios.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/Modules/FWDebug.swiftmodule/arm64-apple-ios.swiftdoc -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64/FWDebug.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module FWDebug { 2 | umbrella header "FWDebug-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | 8 | module FWDebug.Swift { 9 | header "FWDebug-Swift.h" 10 | requires objc 11 | } 12 | -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/FWDebug: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/FWDebug -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Info.plist -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/css/jquery.fileupload.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /* 3 | * jQuery File Upload Plugin CSS 1.3.0 4 | * https://github.com/blueimp/jQuery-File-Upload 5 | * 6 | * Copyright 2013, Sebastian Tschan 7 | * https://blueimp.net 8 | * 9 | * Licensed under the MIT license: 10 | * http://www.opensource.org/licenses/MIT 11 | */ 12 | 13 | .fileinput-button { 14 | position: relative; 15 | overflow: hidden; 16 | } 17 | .fileinput-button input { 18 | position: absolute; 19 | top: 0; 20 | right: 0; 21 | margin: 0; 22 | opacity: 0; 23 | -ms-filter: 'alpha(opacity=0)'; 24 | font-size: 200px; 25 | direction: ltr; 26 | cursor: pointer; 27 | } 28 | 29 | /* Fixes for IE < 8 */ 30 | @media screen\9 { 31 | .fileinput-button input { 32 | filter: alpha(opacity=0); 33 | font-size: 100%; 34 | height: 100%; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "PROLOGUE" = "

Drag & drop files on this window or use the \"Upload Files…\" button to upload new files.

"; 2 | "EPILOGUE" = ""; 3 | "FOOTER_FORMAT" = "%@ %@"; 4 | -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/GCDWebUploader.bundle/Contents/Resources/js/tmpl.min.js: -------------------------------------------------------------------------------- 1 | !function(a){"use strict";var b=function(a,c){var d=/[^\w\-\.:]/.test(a)?new Function(b.arg+",tmpl","var _e=tmpl.encode"+b.helper+",_s='"+a.replace(b.regexp,b.func)+"';return _s;"):b.cache[a]=b.cache[a]||b(b.load(a));return c?d(c,b):function(a){return d(a,b)}};b.cache={},b.load=function(a){return document.getElementById(a).innerHTML},b.regexp=/([\s'\\])(?!(?:[^{]|\{(?!%))*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g,b.func=function(a,b,c,d,e,f){return b?{"\n":"\\n","\r":"\\r"," ":"\\t"," ":" "}[b]||"\\"+b:c?"="===c?"'+_e("+d+")+'":"'+("+d+"==null?'':"+d+")+'":e?"';":f?"_s+='":void 0},b.encReg=/[<>&"'\x00]/g,b.encMap={"<":"<",">":">","&":"&",'"':""","'":"'"},b.encode=function(a){return(null==a?"":""+a).replace(b.encReg,function(a){return b.encMap[a]||""})},b.arg="o",b.helper=",print=function(s,e){_s+=e?(s==null?'':s):_e(s);},include=function(s,d){_s+=tmpl(s,d);}","function"==typeof define&&define.amd?define(function(){return b}):a.tmpl=b}(this); -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/Headers/FLEXMetadataExtras.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXMetadataExtras.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 4/26/22. 6 | // 7 | 8 | #import 9 | #import "FLEXMethodBase.h" 10 | #import "FLEXProperty.h" 11 | #import "FLEXIvar.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | /// A dictionary mapping type encoding strings to an array of field titles 16 | extern NSString * const FLEXAuxiliarynfoKeyFieldLabels; 17 | 18 | @protocol FLEXMetadataAuxiliaryInfo 19 | 20 | /// Used to supply arbitrary additional data that need not be exposed by their own properties 21 | - (nullable id)auxiliaryInfoForKey:(NSString *)key; 22 | 23 | @end 24 | 25 | @interface FLEXMethodBase (Auxiliary) @end 26 | @interface FLEXProperty (Auxiliary) @end 27 | @interface FLEXIvar (Auxiliary) @end 28 | 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/Headers/FLEXSwiftInternal.h: -------------------------------------------------------------------------------- 1 | // 2 | // FLEXSwiftInternal.h 3 | // FLEX 4 | // 5 | // Created by Tanner Bennett on 10/28/21. 6 | // Copyright © 2021 Flipboard. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | #ifdef __cplusplus 14 | extern "C" { 15 | #endif 16 | 17 | BOOL FLEXIsSwiftObjectOrClass(id objOrClass); 18 | 19 | #ifdef __cplusplus 20 | } 21 | #endif 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/Headers/FWDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // FWDebug.h 3 | // FWDebug 4 | // 5 | // Created by wuyong on 17/2/20. 6 | // Copyright © 2017年 wuyong.site. All rights reserved. 7 | // 8 | 9 | #import "FWDebugManager.h" 10 | -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/Info.plist -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/Modules/FWDebug.swiftmodule/arm64-apple-ios-simulator.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/Modules/FWDebug.swiftmodule/arm64-apple-ios-simulator.swiftdoc -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/Modules/FWDebug.swiftmodule/x86_64-apple-ios-simulator.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lszzy/FWDebug/76a657cee1670d2ae8709c20b6500807f8836d9a/Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/Modules/FWDebug.swiftmodule/x86_64-apple-ios-simulator.swiftdoc -------------------------------------------------------------------------------- /Framework/FWDebug.xcframework/ios-arm64_x86_64-simulator/FWDebug.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module FWDebug { 2 | umbrella header "FWDebug-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | 8 | module FWDebug.Swift { 9 | header "FWDebug-Swift.h" 10 | requires objc 11 | } 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 wuyong 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.3 2 | import PackageDescription 3 | 4 | let package = Package( 5 | name: "FWDebug", 6 | platforms: [ 7 | .iOS(.v12) 8 | ], 9 | products: [ 10 | .library( 11 | name: "FWDebug", 12 | targets: ["FWDebug"] 13 | ) 14 | ], 15 | targets: [ 16 | .binaryTarget( 17 | name: "FWDebug", 18 | url: "https://github.com/lszzy/FWDebug/releases/download/6.0.2/FWDebug.xcframework.zip", 19 | checksum: "2102ce0fb3b58de4bb9b994c9a000bc6acd9ececdea46ae164938bde89bf0930" 20 | ) 21 | ] 22 | ) 23 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj --------------------------------------------------------------------------------