rentzsch/jrswizzle
rentzsch/jrswizzle has 2,641 GitHub stars and 410 forks. GitHot measured 0 stars in 24 hours and 0 in 7 days. Last checked 2026-11-11 08:53 UTC. Last push 2023-01-20.
one-stop-shop for all your method swizzling needs
Measured star growth
- in 24h
- 0
- in 7 days
- 0
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalJRSwizzle
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 semver-1.x
$ 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.1.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
NSErrorwith high-quality diagnostics.
Support
Please use JRSwizzle's GitHub Issues tab to file bugs or feature requests.
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 |
- Classic is the canonical
MethodSwizzle()implementation as described in CocoaDev's MethodSwizzling page. - Ballard is Kevin Ballard's improved implementation which solves the inherited method problem.
- Apple is 10.5's new
method_exchangeImplementationsAPI. - JRSwizzle is this package.
License
The source code is distributed under the nonviral MIT License. It's the simplest most permissive license available.
Version History
v1.1.0: Nov 28 2016
- [NEW] Block-based swizzle api. Note it uses
NSInvocationwhich is known to be not the fastest of APIs. (dhcdht)
- [NEW] Block-based swizzle api. Note it uses
v1.0: Mar 2 2012
[NEW] iOS Support. (Anton Serebryakov)
[NEW] Class method swizzling. (outis)
v1.0d1: May 31 2009
[FIX] Soothe valgrind by nulling out
hoisted_method_list->obsolete, which it apparently reads. (Daniel Jalkut)[FIX] Xcode 3.2 apparently now needs
ARCHSset explicitly for 10.3 targets. (rentzsch)
v1.0d0: Apr 09 2009
- Moved to github.
v1.0d0: Dec 28 2007
- Under development.
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
561,883 starspublic-apis/public-apis
A collective list of free APIs
498,253 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
452,811 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,365 stars