README.md 2.8 KB

FLEX

FLEX (Flipboard Explorer) is a set of in-app debugging and exploration tools for iOS development.

Feature Overview

  • 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.
  • Access any live object via a scan of the heap.
  • View the file system within your app's sandbox.
  • Explore all classes in your app and linked systems frameworks (public and private).
  • Quick access to useful singletons such as [UIApplication sharedApplication], the app delegate, the root view controller on the key window, and more.
  • Dynamically view and modify NSUserDefaults values.

Usage

Feature Examples

View Hierarchy Exploration

Object Exploration

All Objects on the Heap

File Browser

System Library Exploration

NSUserDefaults Editing

Thanks & Credits

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

  • 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:
  • 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.

TODO

  • Search bar filtering in file browser
  • Sorting by file size in file browser
  • File browser: try to parse binary files as plists or keyed archives even if they lack the extension?
  • Demo app
  • Swift runtime introspection (swift classes, swift objects on the heap, etc.)
  • Layer hierarchy support
  • Add new NSUserDefault key/value pairs on the fly