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