An in-app debugging and exploration tool for iOS

Related tags

Debugging FLEX
Overview

FLEX

CocoaPods CocoaPods CocoaPods Twitter: @ryanolsonk Build Status Carthage compatible

FLEX (Flipboard Explorer) is a set of in-app debugging and exploration tools for iOS development. When presented, FLEX shows a toolbar that lives in a window above your application. From this toolbar, you can view and modify nearly every piece of state in your running application.

Demo

Give Yourself Debugging Superpowers

  • Inspect and modify views in the hierarchy.
  • See the properties and ivars on any object.
  • Dynamically modify many properties and ivars.
  • Dynamically call instance and class methods.
  • Observe detailed network request history with timing, headers, and full responses.
  • Add your own simulator keyboard shortcuts.
  • View system log messages (e.g. from NSLog).
  • Access any live object via a scan of the heap.
  • View the file system within your app's sandbox.
  • Browse SQLite/Realm databases in the file system.
  • Trigger 3D touch in the simulator using the control, shift, and command keys.
  • Explore all classes in your app and linked systems frameworks (public and private).
  • Quickly access useful objects such as [UIApplication sharedApplication], the app delegate, the root view controller on the key window, and more.
  • Dynamically view and modify NSUserDefaults values.

Unlike many other debugging tools, FLEX runs entirely inside your app, so you don't need to be connected to LLDB/Xcode or a different remote debugging server. It works well in the simulator and on physical devices.

Usage

In the iOS simulator, you can use keyboard shortcuts to activate FLEX. f will toggle the FLEX toolbar. Hit the ? key for a full list of shortcuts. You can also show FLEX programmatically:

Short version:

// Objective-C
[[FLEXManager sharedManager] showExplorer];
// Swift
FLEXManager.shared.showExplorer()

More complete version:

#if DEBUG
#import "FLEXManager.h"
#endif

...

- (void)handleSixFingerQuadrupleTap:(UITapGestureRecognizer *)tapRecognizer
{
#if DEBUG
    if (tapRecognizer.state == UIGestureRecognizerStateRecognized) {
        // This could also live in a handler for a keyboard shortcut, debug menu item, etc.
        [[FLEXManager sharedManager] showExplorer];
    }
#endif
}

Aside: tvOS

FLEX itself does not support tvOS out of the box. However, others have taken it upon themselves to port FLEX to tvOS. If you need tvOS support, seek out one of these forks. Here is one such fork.

Feature Examples

Modify Views

Once a view is selected, you can tap on the info bar below the toolbar to present more details about the view. From there, you can modify properties and call methods.

Modify Views

Network History

When enabled, network debugging allows you to view all requests made using NSURLConnection or NSURLSession. Settings allow you to adjust what kind of response bodies get cached and the maximum size limit of the response cache. You can choose to have network debugging enabled automatically on app launch. This setting is persisted across launches.

Network History

All Objects on the Heap

FLEX queries malloc for all the live allocated memory blocks and searches for ones that look like objects. You can see everything from here.

Heap/Live Objects Explorer

Explore-at-address

If you get your hands on an arbitrary address, you can try explore the object at that address, and FLEX will open it if it can verify the address points to a valid object. If FLEX isn't sure, it'll warn you and refuse to dereference the pointer. If you know better, however, you can choose to explore it anyway by choosing "Unsafe Explore"

Address Explorer

Simulator Keyboard Shortcuts

Default keyboard shortcuts allow you to activate the FLEX tools, scroll with the arrow keys, and close modals using the escape key. You can also add custom keyboard shortcuts via -[FLEXManager registerSimulatorShortcutWithKey:modifiers:action:description]

Simulator Keyboard Shortcuts

File Browser

View the file system within your app's bundle or sandbox container. FLEX shows file sizes, image previews, and pretty prints .json and .plist files. You can rename and delete files and folders. You can "share" any file if you want to inspect them outside of your app.

File Browser

SQLite Browser

SQLite database files (with either .db or .sqlite extensions), or Realm database files can be explored using FLEX. The database browser lets you view all tables, and individual tables can be sorted by tapping column headers.

SQLite Browser

3D Touch in the Simulator

Using a combination of the command, control, and shift keys, you can simulate different levels of 3D touch pressure in the simulator. Each key contributes 1/3 of maximum possible force. Note that you need to move the touch slightly to get pressure updates.

Simulator 3D Touch

Explore Loaded Libraries

Go digging for all things public and private. To learn more about a class, you can create an instance of it and explore its default state. You can also type in a class name to jump to that class directly if you know which class you're looking for.

Loaded Libraries Exploration

NSUserDefaults Editing

FLEX allows you to edit defaults that are any combination of strings, numbers, arrays, and dictionaries. The input is parsed as JSON. If other kinds of objects are set for a defaults key (i.e. NSDate), you can view them but not edit them.

NSUserDefaults Editing

Learning from Other Apps

The code injection is left as an exercise for the reader. 😇

Springboard Lock Screen Springboard Home Screen

Installation

FLEX requires an app that targets iOS 9 or higher. To run the Example project, open a Terminal window in the Example/ folder and run pod install, then open the generated workspace.

CocoaPods

FLEX is available on CocoaPods. Simply add the following line to your podfile:

pod 'FLEX', :configurations => ['Debug']

Carthage

Add the following to your Cartfile:

github "flipboard/FLEX"

Buck

If you're using Buck, you may want to silence some of the warnings emitted by FLEX. You will need to build FLEX as an apple_library and pass the -Wno-unsupported-availability-guard flag, as well as the other warning flags below to disable any other warnings FLEX may have.

Manual

Manually add the files in Classes/ to your Xcode project, or just drag in the entire FLEX/ folder. Be sure to exclude FLEX from Release builds or your app will be rejected.

Silencing warnings

Add the following flags to to Other Warnings Flags in Build Settings:

  • -Wno-deprecated-declarations
  • -Wno-strict-prototypes
  • -Wno-unsupported-availability-guard

Excluding FLEX from Release (App Store) Builds

FLEX makes it easy to explore the internals of your app, so it is not something you should expose to your users. Fortunately, it is easy to exclude FLEX files from Release builds. The strategies differ depending on how you integrated FLEX in your project, and are described below.

Wrap the places in your code where you integrate FLEX with an #if DEBUG statement to ensure the tool is only accessible in your Debug builds and to avoid errors in your Release builds. For more help with integrating FLEX, see the example project.

CocoaPods

CocoaPods automatically excludes FLEX from release builds if you only specify the Debug configuration for FLEX in your Podfile:

pod 'FLEX', :configurations => ['Debug']

Carthage

  1. Do NOT add FLEX.framework to the embedded binaries of your target, as it would otherwise be included in all builds (therefore also in release ones).

  2. Instead, add $(PROJECT_DIR)/Carthage/Build/iOS to your target Framework Search Paths (this setting might already be present if you already included other frameworks with Carthage). This makes it possible to import the FLEX framework from your source files. It does not harm if this setting is added for all configurations, but it should at least be added for the debug one.

  3. Add a Run Script Phase to your target (inserting it after the existing Link Binary with Libraries phase, for example), and which will embed FLEX.framework in debug builds only:

    if [ "$CONFIGURATION" == "Debug" ]; then
      /usr/local/bin/carthage copy-frameworks
    fi

    Finally, add $(SRCROOT)/Carthage/Build/iOS/FLEX.framework as input file of this script phase.

FLEX files added manually to a project

In Xcode, navigate to Build Settings > Build Options > Excluded Source File Names. For your Release configuration, set it to FLEX* like this to exclude all files with the FLEX prefix:

Additional Notes

  • When setting fields of type id or values in NSUserDefaults, FLEX attempts to parse the input string as JSON. This allows you to use a combination of strings, numbers, arrays, and dictionaries. If you want to set a string value, it must be wrapped in quotes. For ivars or properties that are explicitly typed as NSStrings, quotes are not required.
  • You may want to disable the exception breakpoint while using FLEX. Certain functions that FLEX uses throw exceptions when they get input they can't handle (i.e. NSGetSizeAndAlignment()). FLEX catches these to avoid crashing, but your breakpoint will get hit if it is active.

Thanks & Credits

FLEX builds on ideas and inspiration from open source tools that came before it. The following resources have been particularly helpful:

  • MirrorKit: an Objective-C wrapper around the Objective-C runtime.
  • DCIntrospect: view hierarchy debugging for the iOS simulator.
  • PonyDebugger: network, core data, and view hierarchy debugging using the Chrome Developer Tools interface.
  • Mike Ash: well written, informative blog posts on all things obj-c and more. The links below were very useful for this project:
  • MAObjCRuntime
  • Let's Build Key Value Coding
  • ARM64 and You
  • RHObjectiveBeagle: a tool for scanning the heap for live objects. It should be noted that the source code of RHObjectiveBeagle was not consulted due to licensing concerns.
  • heap_find.cpp: an example of enumerating malloc blocks for finding objects on the heap.
  • Gist from @samdmarshall: another example of enumerating malloc blocks.
  • Non-pointer isa: an explanation of changes to the isa field on iOS for ARM64 and mention of the useful objc_debug_isa_class_mask variable.
  • GZIP: A library for compressing/decompressing data on iOS using libz.
  • FMDB: This is an Objective-C wrapper around SQLite.
  • InAppViewDebugger: The inspiration and reference implementation for FLEX 4's 3D view explorer, by @indragiek.

Contributing

Please see our Contributing Guide.

TODO

  • Swift runtime introspection (swift classes, swift objects on the heap, etc.)
  • Add new NSUserDefault key/value pairs on the fly
Comments
  • Swift Package Manager support

    Swift Package Manager support

    Hi, I add support for swift package manager for this awesome library.

    I saw the PR #464 but this contains an error with the functions of extensions (you can't use it).

    This PR solve this error and change the README.md for explain how to install with Swift Package Manager.

    Bassically the support consist in add a new folder "Headers" with all ".h" headers of the library. This ".h" are a symlink to the reals in other paths and they are generated with the new script create_headers.sh in the root repo. The Package.swift use this Header folder as public headers of the library. Feel free to add some exceptions in the script if you want some of this ".h" as private headers.

    Also, I added a sample target in the project with FLEX installed with Swift Package Manager

    enhancement 
    opened by RafaelFernandezAlv 36
  • Add ability to use object-by-address for method arguments with type id

    Add ability to use object-by-address for method arguments with type id

    Currently, if argument type is id, there's no way to pass anything that can't be parsed from JSON. This change adds the ability to select the type of argument to pass:

    • Value - works the same as before, JSON from input string is parsed to NSDictionary/NSArray/NSString/etc.
    • Address - uses object at the specified address, so you can call any method with object you previously created and populated to your preference

    Here's a simple demonstration of how it works: https://streamable.com/hcwo6

    opened by AlexWoodblock 24
  • FLEX breaks custom WhatsApp's UIActionMenu

    FLEX breaks custom WhatsApp's UIActionMenu

    This issue happens on every WhatsApp release. You can test it on 2.20.11.

    1. Open a WhatsApp chat that contains a bubble message.
    2. Tap and hold a message: you will see the custom UIActionMenu with its menu items. Tap anywhere to dismiss it.
    3. Toggle FLEX to show the explorer bar.
    4. Tap select, select anything, then views.
    5. Tap the info button, go back and tap Done.
    6. Close FLEX using the Close button.
    7. Tap and hold a message again and no actions are shown.
    bug 
    opened by Ram4096 22
  • Dark Mode: Add support for icons

    Dark Mode: Add support for icons

    In this PR, we add support for dark mode to the icons. It loads the icons as templates and uses tint color to support dark mode.

    Also in this PR:

    • Updated hierarchy indicator to support dark mode
    • Reorganized FLEXColor

    Toolbar

    Light:

    Dark:


    Hierarchy Indicator

    Light:

    Dark:

    enhancement 
    opened by bdotdub 19
  • Add fallback column query support when PRAGMA table_info is not working

    Add fallback column query support when PRAGMA table_info is not working

    Add fallback column query support when PRAGMA table_info is not working.

    This is my attempt to fix #554, which is a less intrusive way comparing to #555. More detail about the bug itself can be found in #555.

    The change I did here are two parts:

    1. Fallback to use a slightly hackier solution when the PRAGMA table_info is not working.
    2. Do not consider 0 row result as an UPDATE/INSERT/DELETE, it's common that our result has 0 rows.
    do not merge 
    opened by matrush 17
  • tvOS Support

    tvOS Support

    I've started looking into tvOS support, but we would have to re-write a lot of the UI as well as conditionally change things like UIStatusBar and UIAlertView usage. Has anyone else started digging into this?

    enhancement help wanted 
    opened by JALsnipe 17
  • Non-public API usage:

    Non-public API usage:

    I got this mail from App Store Connect. My app is educational, so FLEX is available in the app store version too :)

    Dear Developer,

    We identified one or more issues with a recent delivery for your app, "SwiftHub - Git Client". Please correct the following issues, then upload again.

    Non-public API usage:

    The app references non-public selectors in Frameworks/FLEX.framework/FLEX: _canPerformAction:forCell:sender:, _performAction:forCell:sender:, _tableView, allObjects:, schema

    If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed.

    opened by khoren93 16
  • Crash Enumerating Heap Objects

    Crash Enumerating Heap Objects

    Trying to open the Heap Objects inspector in a large project, I get a crash on line 69 of FLEXHeapEnumerator with EXC_BAD_ACCESS. This occurs consistently on iOS 8.4 and 9.3, on both device and sim.

    I believe this was working before with the current version of FLEX, so the issue may be caused by a class added recently. By throwing in a log on line 71 of FLEXLiveObjectsTableViewController, I can confirm that it enumerates through about 150000 objects successfully before crashing. Of course, the exception occurs before printing the name of the class it's choking on.

    I would love advice as to how I can track down the object causing the crash.

    bug 
    opened by sozorogami 16
  • Fix -Wobjc-signed-char-bool-implicit-int-conversion issue

    Fix -Wobjc-signed-char-bool-implicit-int-conversion issue

    It's an annoying warning and caused my local build to fail when treating warning as error. Let's just fix it. Error:

    stderr: FLEX/src/Classes/Core/Controllers/FLEXTableViewController.m:69:46: error: implicit conversion from integral type 'int' to 'BOOL' [-Werror,-Wobjc-signed-char-bool-implicit-int-conversion]
    [CONTEXT]         _manuallyDeactivateSearchOnDisappear = ({
    [CONTEXT]                                              ^
    
    opened by matrush 15
  • Response Body not in Cache for iOS 15

    Response Body not in Cache for iOS 15

    Environment

    • Platform+version: iOS 15
    • FLEX version: 4.4.1, 4.5.0, 4.6.0

    Bug Report

    • When trying to access the network request body on iOS 15, FLEX says Response Body: not in cache
    • This seems to be only happening on iOS 15.
    • I was able to verify the working functionality on the same app and the same API call on iOS 14.5 and I am able to view the Response Body there.
    • This issue affect both the Device as well as the simulator.
    • I tried the FLEX Example app on Xcode 13 iOS 15 simulator but do not see the issue there.

    Please let me know if there are more details I can add to help debug this.

    Any hints on where one could start looking? Happy to work on a PR.

    Image:

    Notes:

    Looks like a similar issue was reported here but it lacked sufficient detail.

    bug help wanted awaiting response 
    opened by vijaytholpadi 15
  • Add Texture support to node explorer

    Add Texture support to node explorer

    This is a first pass at adding richer inspection of apps using Texture view/layer backed nodes in their hierarchy. It generalizes the View type with the introduction of the FLEXElement proxy class. Items represent either UIViews or ASDisplayNodes and provide a public interface that encapsulates the heuristics of jumping in and out of the node and view hierarchies. Goal was to add support without having to include the AsyncDisplayKit framework as a dependency, hence the excessive amount of performSelector: and NSInvocation.

    I'd like to add some richer properties to the custom node object explorer view controller, but I wanted to put this up in its simplest form to get feedback on the direction and start the conversation about including node hierarchy support to FLEX. Tons of great ideas came to mind while working on this that I'd love to see introduced into FLEX — opening up the object explorer view controller API to be extensible by consumers of the framework being one of them. Looking forward to making it easier to debug Texture apps with FLEX!

    • [ ] elementsAtTapPoint equality always fails. Compare element objects.
    enhancement awaiting response 
    opened by levi 15
  • Fixing CURL request body showing null payload when the content is encoded (gzip, deflate)

    Fixing CURL request body showing null payload when the content is encoded (gzip, deflate)

    Issue:

    • When tapping the "Copy curl" button the cURL string has missing request body (it shows as null) when the content is compressed (gzip, deflate)

    Fix:

    • I realized that the library already has a way to decode compressed payloads since the request body shows fine in the UI. So I just moved the check for Content-Encoding to FLEXUtility to reuse in the FLEXNetworkCurlLogger and call the inflate method from FLEXUtility when necessary.
    opened by sergiosette 0
  • Why not hook start method at NSURLConnection

    Why not hook start method at NSURLConnection

    The NSURLConnectionDataDelegate's methods are optional. If other developer not implement - (void)connection:willSendRequest:redirectResponse:, the request will not record success.

    bug 
    opened by Terriermon 2
  • pod 'FLEX', :configurations => ['Debug']

    pod 'FLEX', :configurations => ['Debug']

    pod 'FLEX', :configurations => ['Debug'] in FLEXExplorerViewController.m that not change

    • (UIWindow *)statusWindow { NSString *statusBarString = [NSString stringWithFormat:@"%@arWindow", @"_statusB"]; return [UIApplication.sharedApplication valueForKey:statusBarString]; }
    bug awaiting response 
    opened by pokerJson 2
  • List of enhancements/features directed towards jailbreak developers.

    List of enhancements/features directed towards jailbreak developers.

    These are couple of enhancements/features directed towards iOS jailbreak developers that could make flex a better tool than it already is.

    1. Rather than having no argument names for methods, flex should add an argument name such as arg#. The reason for this is it would make life easier to just copy and paste the method declaration rather than manually typing every argument name, this gets difficult especially if the method has tons of arguments. The declaration would be valid syntax for objective c, rather than incomplete without the argument names so it would would plug and play when copying and pasting especially when you just want to log the method in a hook.

    2. FlexExtend is a tweak made by me https://github.com/flexextend, which is old and broken and poorly written by me one night. It provided a way to copy full header to the pasteboard. Which would include the interface, the property list, class/instance methods along with the argument names following scheme mentioned above (arg#). Along with that it also provided a full hook in logos syntax, which logged every method in the class and also logged all arguments(using NSLog) with support for format specifiers, such as int, strings, floats, etc. Even things for things like selectors, it would use objective c methods such as NSStringFromSelector, etc. for logging the arguments using NSLog to provide an easy option to log methods automatically rather than doing it one by one. I believe this was and still is a game changer that would make life easier for jailbreak developers. (I would obviously rewrite all of these for the pull request since flex extend is fairly old and I have grown a lot since as a developer and I believe I can do a good job at executing this). If this feature is not in the scope of what flex stands for, then I would be happy to rewrite FlexExtend properly. Here is a sample of what FlexExtend provided, https://pastebin.com/YttYbS5B . (P.S it was a long ago I wrote the tweak, I am aware that I called %orig twice which is not best practice. And the formatting of the log statement is a little off as well)

    3. Unrelated to flex, I was thinking about also updating flexing instead of making yet another tweak that extends flex to provide an easy way for jailbreak developers to inspect iOS. Adding features such as a preference bundle, blacklisting, etc. Also adding a really smart functionality of a tweak called FlexList which is on the bigboss repo that allows for 3D Touch option for automatically opening flex the instance the app is opened. The reason I would want to add this to flexing instead of using FlexList is because I think FlexList is old and not really known and I believe it does some things incorrectly. I believe this is really useful, please let me know if this is in the scope of what flexing is about.

    4. This last feature is one of the most important ones on this list because it excludes using a class dump for applications. Adding a feature to search through all methods in a selected image. On top of that, if this is actually possible, perhaps provide a whole new option to make use of this functionality? And if this is possible, what would also be possible is producing a header for every single class in the selected image (functionality mentioned in 2), which could be saved into the documents folder of that app (This might be a stretch because this functionality would only be limited to jailbroken users to make use a file manager to make use of those headers)? I believe this is another game changer making flex an amazing utility for jailbreak developers because this excludes the use of classdump tools, etc. which are not updated or are private or requires the use of a computer and a decrypted binary.

    Let me know what you think.

    enhancement 
    opened by HearseDev 4
  • Crash when opening Realm DB table on debug

    Crash when opening Realm DB table on debug

    Environment

    • Platform+version: iOS 15.5
    • FLEX version: 7.4.0

    Bug Report

    Opening a Realm database on a debug build causes a crash due to an NSParameterAssert failure in FLEXTableContentViewController seen here and copied below.

    - (instancetype)initWithColumns:(NSArray<NSString *> *)columnNames
                               rows:(NSArray<NSArray<NSString *> *> *)rowData
                             rowIDs:(nullable NSArray<NSString *> *)rowIDs
                          tableName:(nullable NSString *)tableName
                           database:(nullable id<FLEXDatabaseManager>)databaseManager {
        // Must supply all optional parameters as one, or none
        BOOL all = rowIDs && tableName && databaseManager;
        BOOL none = !rowIDs && !tableName && !databaseManager;
        NSParameterAssert(all || none);
    
        //....
    }
    

    When opening up a SQLLite database table, the databaseManager points to null (and so do rowIDs and tableName) and the none condition is satisfied. However when trying to open a Realm database table, the databaseManager object pointer is not null and the assert fails. When I remove that assert, the code works as expected and I can view a Realm database.

    I've tried to triage this issue myself to provide more a detailed report, but I'm getting some really unexpected behavior with the debugger.

    bug 
    opened by nathandud 0
Releases(5.22.10)
  • 5.22.10(Oct 20, 2022)

    Notes

    FLEX will no longer follow semantic versioning, in that there may be breaking changes within the same minor version. I will try to not put breaking changes between patch versions, however. This is basically what TypeScript does.

    The version format is now marketing_number-year-month. I don't push releases out more than once a month, but if I need to, it will be something like 5.22.10-2, which I hope Cocoapods allows…

    What Changed

    • Support for Reflex
    • Add feature to view push notifications
    • Fix crash on iOS 16 and above by @talka123456
    • Silence Xcode 14 warnings related to iOS 11 support in SPM by @kikeenrique
    • Fix issue where websocket hook did not call original completion by @ogres
    • Cocoapod now no longer affects app build settings by @JerryZQS
    • Fix for when the keyboard covers the toolbar by @ExTBH
    • Add a new shortcut for UIWindow to change animation speed by @AnthoPakPak

    New Contributors

    • @talka123456 made their first contribution in https://github.com/FLEXTool/FLEX/pull/607
    • @kikeenrique made their first contribution in https://github.com/FLEXTool/FLEX/pull/610
    • @ogres made their first contribution in https://github.com/FLEXTool/FLEX/pull/609
    • @pyby made their first contribution in https://github.com/FLEXTool/FLEX/pull/616
    • @JerryZQS made their first contribution in https://github.com/FLEXTool/FLEX/pull/626
    • @ExTBH made their first contribution in https://github.com/FLEXTool/FLEX/pull/623
    • @AnthoPakPak made their first contribution in https://github.com/FLEXTool/FLEX/pull/629

    Full Changelog: https://github.com/FLEXTool/FLEX/compare/4.7.0...5.22.10

    Source code(tar.gz)
    Source code(zip)
  • 4.7.0(Apr 27, 2022)

    • Swift Package Manager support!
    • Added SPM example project
    • Fix visibility of some headers
    • View firebase network transactions in network history
    • Pin network history search bar
    • Remember the last selected network history tab
    • Fix potential hang when viewing network response body
    • Adjust color of divider lines in method calling screens for dark mode
    • Fix realm database viewer crash (@skytoup)
    • Add option to add row in DB table (@hossamghareeb)
    • Add option to copy row as CSV (@hossamghareeb)
    • Add accessibilityIdentifier and accessibilityLabel to views properties (@nickholub)
    • Fix obscure SQLite bug related to PRAGMA table_info (@matrush)
    • Pin search bar in system log (@weiminghuaa)
    • Fix filtering incoming messages in system log (@weiminghuaa)
    • Allow focusing on a single DB row (@matrush)

    Full Changelog: https://github.com/FLEXTool/FLEX/compare/4.6.1...4.7.0

    Source code(tar.gz)
    Source code(zip)
  • 4.6.1(Apr 27, 2022)

    • Fix incoming websocket messages not showing correct details
    • Fix websocket activity not being cleared
    • Improvements to detecting whether a given pointer is a valid objc object
    • Fix bug in tab-close logic
    • Use dynamic background color in the network response viewer
    • Added missing nullability to objc metadata types
    • Added FLEXMirror protocol

    Full Changelog: https://github.com/FLEXTool/FLEX/compare/4.6.0...4.6.1

    Source code(tar.gz)
    Source code(zip)
  • 4.6.0(Apr 27, 2022)

    • Use OSCache for the network cache instead of NSCache
    • Add dlopen() button to Runtime Browser
    • Record websocket traffic on iOS 13
    • Fix crash for unsupported type encodings

    Full Changelog: https://github.com/FLEXTool/FLEX/compare/4.5.0...4.6.0

    Source code(tar.gz)
    Source code(zip)
  • 4.5.0(Aug 19, 2021)

    • Drop support for iOS 12 SDK
    • Fix misc crashes
    • Show access group for keychain items
    • Various improvements to the DB viewer
    • Added shortcuts for UIPasteboard and NSNotificationCenter
    • Collections now show shortcuts in addition to thier previews
    • Disable smart quotes in input fields for iOS 11+
    Source code(tar.gz)
    Source code(zip)
  • 4.4.1(Mar 29, 2021)

    • Better "hide likely private methods" behavior
    • Catch exceptions thrown from object descriptions
    • Fix several crashes
    • Add tintColor as a property to UIView
    • Add useful shortcuts for UIAlertController, NSString, and NSData
    • Fix yet another crash in the keychain viewer
    • Don't show the toolbar when tapping on a nav bar button
    Source code(tar.gz)
    Source code(zip)
  • 4.4.0(Jan 28, 2021)

    • Group FLEX objects together in the object refs list
    • Fix object explorer swipe gesture not working
    • Add option to hide metadata with an underscore
    • Add context menu item to view references to object
    • New APIs:
      • Allow registration of global entries with actions
      • Present or dismiss FLEX tools from FLEXManager
    • Prefix more categories
    • Various bug fixes
    • Fix many potential crashes
    Source code(tar.gz)
    Source code(zip)
  • 4.2.2(Nov 3, 2020)

    • Restore ability to copy log messages in iOS 13+
    • Fix crash when editing a property or ivar from a shortcut section
    • Revert d7786449 which could cause crashes
    Source code(tar.gz)
    Source code(zip)
  • 4.2.1(Nov 3, 2020)

  • 4.2.0(Oct 22, 2020)

    • Various under the hood improvements and bug fixes
    • Fixes heap enumeration crashes on arm64e
    • Fixes class properties not showing previews
    • Explorer won't access ivars on tagged pointers
    • Search bar will now automatically activate in heap view
    • Add shortcuts for UIApplication
    • Add sorting to file browser
    • Custom additions section now appears first
    • FLEXMethod.imagePath uses the method's IMP
    • You can edit user defaults again
    • View truncation sliders now match Xcode behavior
    • FLEX will no longer crash when inspecting objects that don't inherit from NSObject
    • You can now use FLEX_DISABLE_CTORS to disable FLEX from doing any swizzling or other runtime setup
    Source code(tar.gz)
    Source code(zip)
  • 4.1.1(Apr 6, 2020)

  • 4.1.0(Apr 6, 2020)

    • Heap viewer will take you straight to the instance if it is the only instance
    • Add ability to view any bundle as a database and query it
      • You can export this database from the file browser
    • Fix crash on iPad when pressing any button that presents an action sheet
    • Add a search bar to the view controllers list
    • Add < iOS 13 support to example project
    • Add option to disable dynamic property/ivar previews
    • Other minor bug fixes
    Source code(tar.gz)
    Source code(zip)
  • 4.0.0(Mar 24, 2020)

    This release has been the product of months of daily work. Most of FLEX was rewritten from the ground up. If you want to show your appreciation, I have a GitHub Sponsors profile with a range of tiers where you can donate to me on a monthly basis. I also have Cash App ($tannerbennett). Reach out to me on Twitter if you have any questions or concerns about anything!

    (This is by no means a complete list of changes)

    Misc

    • Drops support for iOS 8 — if you need to support iOS 8, use FLEX 3
    • Tabs! Every screen now has a toolbar you can use to view the list of open tabs and switch between them.
      • Background a tab by swiping down to dismiss the view controller (yes, even if you're not on iOS 13, try it)
      • Close a tab by pressing the "Done" button or by deleting it from the tabs list
    • Bookmarks! Bookmark objects to save them for later
      • Hit the + button in the tabs list to open a tab from a bookmark
    • New icons for the FLEX toolbar, taken from SFSymbols (yay @3x)
    • System log is back from the dead: iOS 10 largely broke the system log feature with the addition of os_log. FLEX now forces NSLog() to use ASL so you don't get a log full of useless internal junk
    • Added various singletons to the main menu screen
    • Dark mode improvements
    • Run queries on SQLite databases (thanks @LesykMelnychuk)
    • Most screens are now searchable, including lists of object references and the keychain
    • File browser now shows a list of classes when you select a mach-o file
    • More public APIs have been exposed
    • Added a Swift example project which makes use of some new public APIs

    FLEX Toolbar

    • Long press on the Menu button to show the list of open tabs
    • Long press on the Views button after selecting a view to show a list of view controllers at that point
    • Long press on the Select button to show a list of all windows and scenes; tap a window to adjust it's level
    • Added a Recent button which opens the most recently backgrounded tab

    FLEXObjectExplorer

    • New APIs for customizing "shortcuts" that are displayed for any given object or class
    • Uses a monospace font for displaying metadata
    • Adds context menus for metadata rows on iOS 13, useful for copying various metadata properties
    • Protocol conformances are listed at the bottom, as well as instance size and image of origin
    • Added various helpful shortcuts to a number of classes
    • Fine-tuned the shortcuts for various UIKit classes
    • Swipe left or right to change your position in the class hierarchy
    • Tapping on a property or ivar now takes you to the value; press the detail button to edit instead
    • Added a section index control to aid in quickly jumping to a specific metadata section
    • Added a toolbar with quick access to helpful toggles or options
      • Toggles for visibility of method overrides, property-backing ivars, and property-backing methods
      • Quickly copy the object's description or address or bookmark it
      • Quickly access the list of bookmarks or open tabs
    • Support NSDecimalNumber setters
    • Added option to view a list of subclasses when exploring a class object

    View Explorer

    • Swipe left or right on the toolbar's selected view box quickly to move your selection higher or deeper into the view hierarchy
    • Added a 3D reveal-like view explorer: explore an exploded representation of the view hierarchy right on your device!
    • Background colors of views are more accurately indicated
    • Translucency is now correct
    • nil background colors don't show a color indicator at all

    Runtime Browser

    • Replaces the System Libraries and App Classes screens
    • Browse the runtime using a key-path-like syntax: bundle.class.method
      • Accepts wildcards, like *.*View* which will list all classes that contain View
      • Currently only supports searching for methods, properties and ivars soon to come
      • Search for an instance method with -methodName, a class method with +methodName, or either by prefixing your query with a wildcard
        • For example, UIKit*.*Controller.*foo searches for any method containing foo in any class ending with Controller in any loaded bundle starting with UIKit

    Method Calling

    • Added a "paste" button to argument input accessory views, useful for pasting an address
    • Added support for char * and SEL parameters

    Network History

    • Now prompts you to turn it on before taking you to the screen
    • Easy access to the "clear" button in the toolbar
    • iOS 13 users can blacklist domains by 3D touching on requests
    • JSON payloads are now displayed as NSDictionary/NSArray when you try to view them
    Source code(tar.gz)
    Source code(zip)
  • 3.1.2(Dec 26, 2019)

    • Fix +[FLEXRuntimeUtility potentiallyUnwrapBoxedPointer:type: so that it doesn't try to unbox NSNumber instances
    • Add -subviews and -superview @properties to UIView
    • Keep search bar active between screens
    • Fix #359 a little better—enumerate UIApplication.windows until we find the first UITextEffectsWindow and adjust that window instead of looking right at UIApplication.windows[1]
    Source code(tar.gz)
    Source code(zip)
  • 3.1.1(Dec 9, 2019)

    • Fix various iOS 13 bugs
    • Add search bar to the database view
    • Swipe to delete keychain items
    • Fix "Copy/Copy Address" callouts not appearing on iOS 13
    • Fix a bug with the "class carousel" not working properly
    • Fix root view controller global not working
    • Fix crash in keychain viewer when viewing NSData
    Source code(tar.gz)
    Source code(zip)
  • 3.1.0(Nov 14, 2019)

    Marking this as 3.1 instead of 3.0.1 because we don't really have much of an "API" to use for semantic versioning, but a lot changed under the hood so I think a minor version change is warranted.

    Major changes

    • Drops support for iOS 8
    • Initial support for iOS 13 and dark mode
    • Allow passing addresses for id arguments
    • Added a custom class hierarchy scope bar to the object/class explorer
      • This replaces the old scope bar which only had 2-4 options for viewing inherited metadata
    • You can now search the globals screen
    • Additions to the globals screen:
      • NSProcessInfo.processInfo
      • UIPasteboard.generalPasteboard
      • Explore bundle and container
      • Explore the keychain

    Other notable changes

    • Various bug fixes
    • Adopt WKWebView
    • Migrate to UIAlertController
    • Various file browser upgrades
      • Improved image detection
      • Show editor for readonly properties with setters
      • Show share sheet for folders and files
      • Share the actual file instead of the file path in the file browser
      • Adopt context menu on iOS 13
    • By default, exploring user defaults from the globals screen will only show user defaults in the defaults file
      • This hides some useless defaults that appear in NSUserDefaults for all apps
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0(Apr 24, 2019)

    Notable changes

    • Support for notch-screens (iPhone X, etc)
    • Explore objects by address (#258)
    • Allow copying object addresses (33263bf)
      • Long press on description to activate
    • Support for viewing serialized objects (#254)
    • Rudimentary support for viewing system log messages on iOS 10+ (d7d40e6, #140)
    • Detect and unbox pointers to objects from void * (867ae61)
    • Add "Get" to readwrite editor screens (b64cd37)
    • Allow registration of custom content-type viewers (#241)
    • Exploring color objects shows their color as their description (24d5f3e)
    • Show a view-color indicator in the view hierarchy (#239)
    • Add +[NSBundle mainBundle] to global list (400a3cc)
    • Group similar "objects with ivars referencing this object" (#227)
    • Additional object explorer scopes (#228)
    • Failed network requests are highlighted in red (352bae0)
    • Add a network filter mechanism, aka a blacklist (#185)
      • At the moment this can only be enabled programmatically

    All other changes are various bug fixes. You can see the full changelist here.

    Source code(tar.gz)
    Source code(zip)
  • 2.4.0(Oct 1, 2016)

    • Various bug fixes (@dazi.dp, @TimOliver, @revolter, @shepting, @ryanolsonk)
    • Search for specific classes under "system libraries" menu (@ThePantsThief)
    • Copy curl commands from network request debugger (@iampgzp)
    • Fix swizzling/network debugging when some NSURLSession methods are not implemented by the delegate (@Blankdlh)
    • Mute Xcode 8 warnings in example project (@c0diq)
    Source code(tar.gz)
    Source code(zip)
  • 2.3.0(Feb 29, 2016)

    • Realm database inspection (@TimOliver)
    • More stable heap search (@dazi.dp)
    • Access to ancestor view controller from any view (@nin9tyfour)
    • Support viewing AFNetworking request bodies (@ryanolsonk)
    • Keyboard shortcut handling crash fixes (@ryanolsonk)
    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Dec 14, 2015)

    • SQLite database browser! Access it through the file system browser. (@tttpeng)
    • Support for force touch in the iOS simulator. Use the shift, control, and command keys to apply force. One key == 1/3 maximum possible force. Three keys == full maximum possible force. (@ryanolsonk)
    • Search view hierarchy using pointer address (@untouchable741)
    • Modern array & dictionary syntax (@dlo)
    • Move to UISearchController & bump deployment target to 8.0 (@ryanolsonk)
    • Bug fixes (@revolter, @WangHengHeng, @ryanolsonk)
    Source code(tar.gz)
    Source code(zip)
  • 2.1.1(Oct 29, 2015)

    • Add -[FLEXManager toggleExplorer] convenience method (@evliu)
    • View shared HTTP cookie storage (@robinsonrc)
    • Fix crash in network request history list on iOS 9.0.2 (@ryanolsonk)
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Sep 21, 2015)

    • Use simulator keyboard shortcuts to activate FLEX tools, scroll with arrow keys, escape modals, and more.
    • Register your own actions for keyboard shortcuts in the simulator.
    • Simplify network debugging settings.
    screenshot 2015-09-21 11 02 50 Source code(tar.gz)
    Source code(zip)
  • 2.0.6(Sep 10, 2015)

  • 2.0.5(Sep 9, 2015)

  • 2.0.4(Sep 8, 2015)

    • Framework/Carthage support (@erichoracek)
    • Xcode 7 warnings cleanup (@tijoinc and @ryanolsonk)
    • Fix crash from reading isa fields as pointers on arm64 (@ryanolsonk)
    Source code(tar.gz)
    Source code(zip)
  • 2.0.3(May 23, 2015)

    • Fixes/improvements to network request debugging (@modnovolyk & @ryanolsonk)
    • Fix building as a framework for swift projects (@modnovolyk)
    • Fixes to status bar and rotation management, particularly on iOS 8.3 (@ryanolsonk)
    • Remove dependence on PCH imports (@mustafa-coursera)
    • CamelCase directory names that previously had spaces for compatiblity with some build systems (@fabiensanglard)
    • README fixes (@louis-cai & @larrytin)
    Source code(tar.gz)
    Source code(zip)
  • 2.0.2(Mar 5, 2015)

    • Better JSON detection for pretty printing network responses (@DaidoujiChen)
    • Copy network request detail cells via long-press (@ryanolsonk)
    • Button in network request detail view to copy all request/response info (@ryanolsonk)
    • Fix ImageIO console error from trying to thumbnail nil response data (@ryanolsonk)
    Source code(tar.gz)
    Source code(zip)
  • 2.0.1(Feb 25, 2015)

    • Fix network debugging for -[NSURLSession downloadTaskWithRequest:completionHandler:] (@judev)
    • Long press on cells in network history list to copy the URL (@ryanolsonk)
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Feb 24, 2015)

    FLEX v2.0! Lots of new features in this release:

    • Detailed network request history (@ryanolsonk)
    • View system log messages (i.e. from NSLog()) (@ryanolsonk)
    • Add your own view controllers to the FLEX menu (@maniak-dobrii)
    • Rename and delete files in the file browser (@drodriguez)
    • Edit NSDate values stored in NSUserDefaults (@drodriguez)
    • Copy object descriptions via long pressing on the description cell (@tijoinc)
    • Fix viewing the app’s classes on iOS 8 (@studentdeng)
    • Fix view selection when not in portrait on iOS 8 (@ryanolsonk)
    • Fix status bar style in some cases when the FLEX toolbar is showing (@ryanolsonk)
    • Drop support for iOS 6 (@ryanolsonk)
    • Mute deprecation warnings for iOS 8 deployment targets (@ryanolsonk)
    Source code(tar.gz)
    Source code(zip)
  • 1.1.1(Aug 25, 2014)

    • Search bar filtering and sorting by file size in the file browser. (@DaidoujiChen)
    • Present options to open a file in other apps when FLEX can't display the file in the browser. (@studentdeng)
    • Lazily instantiate the FLEX window and explorer view controller. (@JaviSoto)
    • Analyzer warnings cleanup and small bugfixes. (@ryanolsonk)
    Source code(tar.gz)
    Source code(zip)
Owner
FLEXTool
FLEXTool
Dotzu In-App iOS Debugging Tool With Enhanced Logging, Networking Info, Crash reporting And More.

Dotzu In-App iOS Debugging Tool With Enhanced Logging, Networking Info, Crash reporting And More. The debugger tool for iOS developer. Display logs, n

Remi ROBERT 1.8k Jan 3, 2023
Remote network and data debugging for your native iOS app using Chrome Developer Tools

PonyDebugger PonyDebugger is a remote debugging toolset. It is a client library and gateway server combination that uses Chrome Developer Tools on you

Square 5.9k Dec 24, 2022
Free macOS app for iOS view debugging.

Introduction You can inspect and modify views in iOS app via Lookin, just like UI Inspector in Xcode, or another app called Reveal. Official Website:h

Li Kai 575 Dec 28, 2022
A collection of tools for debugging, diffing, and testing your application's data structures.

Custom Dump A collection of tools for debugging, diffing, and testing your application's data structures. Motivation customDump diff XCTAssertNoDiffer

Point-Free 631 Jan 3, 2023
A lightweight, one line setup, iOS / OSX network debugging library! 🦊

Netfox provides a quick look on all executed network requests performed by your iOS or OSX app. It grabs all requests - of course yours, requests from

Christos Kasketis 3.4k Dec 28, 2022
Set of easy to use debugging tools for iOS developers & QA engineers.

DBDebugToolkit DBDebugToolkit is a debugging library written in Objective-C. It is meant to provide as many easily accessible tools as possible while

Dariusz Bukowski 1.2k Dec 30, 2022
Chisel is a collection of LLDB commands to assist debugging iOS apps.

Chisel Chisel is a collection of LLDB commands to assist in the debugging of iOS apps. [Installation • Commands • Custom Commands • Development Workfl

Facebook 8.9k Jan 6, 2023
Next generation debugging framework for iOS

Alpha is the idea of a next generation debugging framework for iOS applications. It combines multiple debugging tools built on top of a simple, unifie

Dal Rupnik 733 Oct 29, 2022
iOS network debugging, like a wizard 🧙‍♂️

Start debugging iOS network calls like a wizard, without extra code! Wormholy makes debugging quick and reliable. What you can do: No code to write an

Paolo Musolino 2.1k Jan 8, 2023
Profiling / Debugging assist tools for iOS. (Memory Leak, OOM, ANR, Hard Stalling, Network, OpenGL, Time Profile ...)

MTHawkeye Readme 中文版本 MTHawkeye is profiling, debugging tools for iOS used in Meitu. It's designed to help iOS developers improve development producti

meitu 1.4k Dec 29, 2022
Droar is a modular, single-line installation debugging window

Droar is a modular, single-line installation debugging window. Overview The idea behind Droar is simple: during app deployment stages, adding quick ap

Myriad Mobile 55 Sep 24, 2022
Convenient debugging button.

FunnyButton Example 在平时开发,运行期间有时候想中途看一下某个视图或变量的信息,虽说打断点是可以查看,但有时候断点调试有时候会卡住好一会才能看到(尤其是大项目经常卡很久),极度影响效率。 基于这种情况,FunnyButton就是为了能够便捷调试的全局按钮,添加好点击事件,就能随时

健了个平_(:з」∠)_ 2 Sep 20, 2022
In-app design review tool to inspect measurements, attributes, and animations.

Hyperion Hyperion - In App Design Review Tool What is it? Hyperion is a hidden plugin drawer that can easily be integrated into any app. The drawer si

WillowTree, LLC 2k Dec 27, 2022
Tool to debug layouts directly on iOS devices: inspect layers in 3D and debug each visible view attributes

Introduction Features Inspect layouts directly on iOS devices Inspection could be triggered only if app is running under DEBUG build configuration, so

Ihor Savynskyi 510 Dec 24, 2022
Xray is viewDebugging tool for iOS, tvOS, watchOS and macOS

XRay XRay is view debugging tool for iOS. Currently, XRay can show all of the view hierarchies in UIKit. For SwiftUI, I'm working on it. XRay helps yo

Shawn Baek 10 Jun 10, 2022
In-app console and debug tools for iOS developers

LocalConsole Welcome to LocalConsole! This Swift Package makes on-device debugging easy with a convenient PiP-style console that can display items in

Duraid Abdul 650 Jan 1, 2023
Customizable Console UI overlay with debug log on top of your iOS App

AEConsole Customizable Console UI overlay with debug log on top of your iOS App AEConsole is built on top of AELog, so you should probably see that fi

Marko Tadić 142 Dec 21, 2022
TouchInspector - a lightweight package that helps you visualize and debug touches on iOS and iPadOS

TouchInspector is a lightweight package that helps you visualize and debug touches on iOS and iPadOS.

Janum Trivedi 116 Jan 3, 2023
App for developers to test REST API.

Httper Httper is a REST API test tool running on your iOS devices. It helps developers to test their REST APIs anywhere and anytime without PC. Featur

MuShare Group 408 Nov 22, 2022