Skip to content
This repository has been archived by the owner on May 23, 2024. It is now read-only.
/ Snake Public archive

Yet Another Mach-O Unused ObjC Selector/Class/Protocol Detector. 检测ObjC无用方法、无用类、无用协议。

License

Notifications You must be signed in to change notification settings

flexih/Snake

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Features

  • Parse Mach-O directly, no Symbols option required in Strip style of Build Settings, no depends on otool.
  • Unused selectors.
  • Unsued classes.
  • Unused protocols.
  • Duplicate selectors.
  • All classes.
  • Selector/Classes/Protocols sort by library, and selector size, if Linkmap file provided.
  • 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二进制瘦身

Credits

About

Yet Another Mach-O Unused ObjC Selector/Class/Protocol Detector. 检测ObjC无用方法、无用类、无用协议。

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published