Brak opisu

Ryan Olson 9c834223fe Exclude FLEX from release builds in the example project. 12 lat temu
Classes cad1eb4a9b Go back to using [[object class] description] 12 lat temu
Example 9c834223fe Exclude FLEX from release builds in the example project. 12 lat temu
.gitignore 395752d3d1 Add README and .gitignore 12 lat temu
LICENSE a310c289c6 Add LICENSE 12 lat temu
README.md 85db936649 Update README (in progress) 12 lat temu

README.md

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