https://github.com/flexih/Snake
Yet Another Mach-O Unused ObjC Selector/Class/Protocol Detector. 检测ObjC无用方法、无用类、无用协议。
https://github.com/flexih/Snake
mach-o macho
Last synced: about 1 month ago
JSON representation
Yet Another Mach-O Unused ObjC Selector/Class/Protocol Detector. 检测ObjC无用方法、无用类、无用协议。
- Host: GitHub
- URL: https://github.com/flexih/Snake
- Owner: flexih
- License: mit
- Archived: true
- Created: 2020-02-02T04:29:34.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-08-18T06:36:56.000Z (almost 4 years ago)
- Last Synced: 2024-11-19T07:41:28.837Z (7 months ago)
- Topics: mach-o, macho
- Language: C++
- Homepage:
- Size: 563 KB
- Stars: 173
- Watchers: 1
- Forks: 17
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Snake
🐍 Snake, Yet Another Mach-O Unused ObjC Selector/Class/Protocol Detector.ObjC Metadata
* Classes ✔
* Protocols ✔
* Methods ✔
* Categories ✔
* Binding Info ✔
* ObjC-Specific Sections
* `__objc_selrefs` ✔
* `__objc_superrefs` ✔
* `__objc_classrefs` ✔
* `__objc_classlist` ✔
* `__objc_catlist` ✔
* `__objc_protolist` ✔See [SnakeKit][1]
## Features
- [x] Parse Mach-O directly, no Symbols option required in Strip style of Build Settings, __no depends on otool__.
- [x] Unused selectors.
- [x] Unsued classes.
- [x] Unused protocols.
- [x] Duplicate selectors.
- [x] All classes.
- [x] Selector/Classes/Protocols sort by library, and selector size, if Linkmap file provided.
- [x] Fast, a 460.6M binary and a 134.3M linkmap file costs 1.62s(3.7 GHz 6-Core Intel Core i5;40 GB 2667 MHz DDR4).## Homebrew
`brew tap flexih/tap && brew install snake`## How To Use
```
Usage:
snake [-dscp] [-l path] path/to/binary ...-s, --selector Unused selectors
-c, --class Unused classes
-p, --protocol Unused protocoles
-d, --duplicate Duplicate selectors
-a, --allclass All Classes
-l, --linkmap arg Linkmap file, which has selector size, library name
-j, --json Output json format
--help Print help
```snake -l path/to/linkmap path/to/binary [-dscpa]
## Example
bin/snake -l demo/release/demo-LinkMap-normal-x86\_64.txt demo/release/demo.app/demo -c
```
Total Lib Count: 1
Total Unused Class Count: 3# demo
SceneDelegate
UnusedClass
ViewController
```
bin/snake -l demo/release/demo-LinkMap-normal-x86\_64.txt demo/release/demo.app/demo -s
```
Total Lib Count: 1
Total Class Count: 2
Total Unused Selector: 2# demo
@ UnusedClass
-[UnusedClass unusedMethOfUnusedClass] 6@ UsedClass
-[UsedClass unusedMeth] 6
```## Storyboard
Used selectors
```
python2 storyboard.py path/to/x.storyboard
```## Source
git clone --recursive https://github.com/flexih/Snake.git
## Details
[Objective-C二进制瘦身][2]
## Credits
* [cxxopts][3]
[1]: https://github.com/flexih/SnakeKit
[2]: https://www.jianshu.com/p/e3cf048c67aa
[3]: https://github.com/jarro2783/cxxopts