# JRSwizzle ## Description JRSwizzle is source code package that offers a single, easy, correct+consistent interface for exchanging Objective-C method implementations ("method swizzling") across many versions of Mac OS X, iOS, Objective-C and runtime architectures. More succinctly: *JRSwizzle wants to be your one-stop-shop for all your method swizzling needs.* ## Download $ cd /path/to/top/of/your/project $ git submodule add git://github.com/rentzsch/jrswizzle.git JRSwizzle $ git submodule init && git submodule update # OPTIONAL: Execute the following commands if you want to explicitly peg # to a certain version. Otherwise `git submodule update` will keep you # current with HEAD. $ cd JRSwizzle $ git checkout v1.0 ## Reasons for Existence * **Easy:** Just do this: `[SomeClass jr_swizzle:@selector(foo) withMethod:@selector(my_foo) error:&error];` Voila. * **Correct:** There's a subtle interaction between method swizzling and method inheritance. Following in Kevin Ballard's footsteps, this package Does The Right Thing. * **Compatible:** JRSwizzle should Just Work on any version of Mac OS X and iOS you care about. Here's the exhaustive compatibility list: * Mac OS X v10.3/ppc (Ballard implementation) * Mac OS X v10.4/ppc (Ballard implementation) * Mac OS X v10.4/i386 (Ballard implementation) * Mac OS X v10.5/ppc (method_exchangeImplementations+Ballard implementation) * Mac OS X v10.5/i386 (method_exchangeImplementations+Ballard implementation) * Mac OS X v10.5/ppc64 (method_exchangeImplementations+Ballard implementation) * Mac OS X v10.5/x86_64 (method_exchangeImplementations+Ballard implementation) * iOS 2.0+ (method_exchangeImplementations+Ballard implementation) * **Robust:** All parameters are checked and JRSwizzle returns an optional `NSError` with high-quality diagnostics. ## Support Please use [JRSwizzle's GitHub Issues tab](https://github.com/rentzsch/jrswizzle/issues) to [file bugs or feature requests](https://github.com/rentzsch/jrswizzle/issues/new). To contribute, please fork this project, make+commit your changes and then send me a pull request. ## Comparison There's at least four swizzling implementations floating around. Here's a comparison chart to help you make sense of how they relate to each other and why JRSwizzle exists.
| Scenario | Swizzle Technology | Method Implementation | Correct Behavior | 10.4 | 64-bit |
|---|---|---|---|---|---|
| 1 | Classic | Direct | YES | YES | NO |
| 2 | Classic | Inherited | NO | YES | NO |
| 3 | Ballard | Direct | YES | YES | NO |
| 4 | Ballard | Inherited | YES | YES | NO |
| 5 | Apple | Direct | YES | NO | YES |
| 6 | Apple | Inherited | NO | NO | YES |
| 7 | JRSwizzle | Direct | YES | YES | YES |
| 8 | JRSwizzle | Inherited | YES | YES | YES |