|
|
@@ -1,32 +1,50 @@
|
|
|
# FLEX
|
|
|
+FLEX (Flipboard Explorer) is a set of in-app debugging and exploration tools for iOS development.
|
|
|
|
|
|
-## TODO:
|
|
|
-
|
|
|
-### Must haves:
|
|
|
-- README
|
|
|
- - Note only supported back to iOS 6
|
|
|
- - Usage & feature explanations
|
|
|
- - Exception breakpoint note
|
|
|
- - Notes on unsupported: Classes that don't inherit from NSObject. Unions. Packed structs. C array arguments. Etc.
|
|
|
- - Note that heap objects may have some false positives
|
|
|
- - Thanks/credits section
|
|
|
-- Blog post
|
|
|
-- Cleanup and comments
|
|
|
-- License
|
|
|
-- CocoaPods
|
|
|
-
|
|
|
-### Nice to haves:
|
|
|
+## 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](https://github.com/domesticcatsoftware/DCIntrospect): view hierarchy debugging for the iOS simulator.
|
|
|
+- [PonyDebugger](https://github.com/square/PonyDebugger): network, core data, and view hierarchy debugging using the Chrome Developer Tools interface.
|
|
|
+- [Mike Ash](https://www.mikeash.com/pyblog/): well written, informative blog posts on all things obj-c and more. The links below were very useful for this project:
|
|
|
+ - [MAObjCRuntime](https://github.com/mikeash/MAObjCRuntime)
|
|
|
+ - [Let's Build Key Value Coding](https://www.mikeash.com/pyblog/friday-qa-2013-02-08-lets-build-key-value-coding.html)
|
|
|
+ - [ARM64 and You](https://www.mikeash.com/pyblog/friday-qa-2013-09-27-arm64-and-you.html)
|
|
|
+- [RHObjectiveBeagle](https://github.com/heardrwt/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](https://www.opensource.apple.com/source/lldb/lldb-179.1/examples/darwin/heap_find/heap/heap_find.cpp): an example of enumerating malloc blocks for finding objects on the heap.
|
|
|
+- [Gist](https://gist.github.com/samdmarshall/17f4e66b5e2e579fd396) from @samdmarshall: another example of enumerating malloc blocks.
|
|
|
+- [Non-pointer isa](http://www.sealiesoftware.com/blog/archive/2013/09/24/objc_explain_Non-pointer_isa.html): 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
|
|
|
-- Support setting mutable array/dictionary properties
|
|
|
-- Mutable collection editing
|
|
|
-- Drill in from class explorer to properties, ivars, and methods for full names and attributes ("call/set" disabled/hidden)
|
|
|
-
|
|
|
-### Community feature ideas
|
|
|
- Swift runtime introspection (swift classes, swift objects on the heap, etc.)
|
|
|
- Layer hierarchy support
|
|
|
-- Consider a custom data approach that allows users to prioritize their own relevant information.
|
|
|
-- Keyboard shortcuts (that don't interfere with existing keyboard shortcuts)
|
|
|
-- Add new NSUserDefault key/value pair on the fly
|
|
|
+- Add new NSUserDefault key/value pairs on the fly
|