영어 | 简体中文
WBBlades는 앱에 대한 원클릭 감지( OC
및 Swift
지원), 패키지 크기 분석(단일 정적 라이브러리/동적 라이브러리 지원), 지점 간 충돌 분석(기반)을 포함하는 Mach-O
파일 구문 분석을 기반으로 하는 도구 세트입니다. 시스템 로그, Huawei 및 Bugly 플랫폼 충돌 스택 분석 지원, 서명 및 서명되지 않은 상태 지원), Mach-O 파일 기반 클래스 자동 추출 및 후크 기능. 주로 __텍스트 어셈블리 코드 분석, 아키텍처 추출, DYSM 파일 스트리핑, 심볼 테이블 스트리핑, 크래시 파일(ips) 분석 기술을 사용합니다. dyld_chained_Fixups 처리에 대해 위의 큰 메소드/소형 메소드 구문 분석 및 iOS 15를 지원합니다. 사용자가 WBBlade 프로젝트를 빠르게 이해할 수 있도록 GPT 기반의 지능형 Readme 기능을 제공합니다.
도구 이름 | 기능 개요 | 관련 기술 |
---|---|---|
지능형 읽어보기 | 대화형 Q&A 형식을 통해 WBBlade 프로젝트 및 관련 기술을 빠르게 이해할 수 있습니다. | GPT 채팅 |
앱에 대한 원클릭 감지 | Swift & OC 쓸모 없는 클래스 감지, 쓸모 없는 리소스 감지 및 패키지 축소 최적화 제안. | 디스어셈블리, __텍스트 명령어 추출, Mach-O 구문 분석, 기호 테이블 및 Mach-O의 Swift 클래스 구조 |
패키지 크기 분석 | .ipa 파일에서 정적 및 동적 라이브러리가 차지하는 실제 크기를 감지합니다. | 아키텍처 스트리핑, 정적 라이브러리 구조 분석 |
충돌 분석 | .app 또는 dYSM을 사용하여 시스템 충돌 로그를 분석하고 Huawei 및 Bugly 플랫폼에서 충돌 스택 분석을 지원합니다. | DYSM 파일 구문 분석, 경량 기호 테이블 추출, ips 파일 구문 분석, 기호 테이블 충돌 구문 분석 유무 |
마하오 클래스 후크 | Mach-O 파일에서 클래스를 자동으로 추출한 다음 연결합니다. | dyld_ chained_ 수정, 바인딩, 리베이스 및 크고 작은 메서드 구문 분석 |
새 버전은 위 도구의 원래 명령줄 기반 작업을 기반으로 도구 세트의 포괄적인 시각적 구현을 구현하고 R&D 효율성 향상을 위해 설계되었습니다. 또한, 어려운 크래시 분석에서는 재현이 쉽지 않고 일반 도구로 수집할 수 없는 일부 크래시(앱 프로세스가 운영 체제에 의해 직접 종료되는 경우)에 대해 지점 간 크래시 분석을 제공합니다.
$ git clone https://github.com/wuba/WBBlades.git
$ cd WBBlades
$ pod install
대상은 "WBBladesCrashApp"을 선택합니다.
WBBlade 시각화 도구는 아래와 같습니다. 왼쪽 기능 영역의 버튼을 클릭하고 쓸모 없는 클래스 감지, 애플리케이션 크기 분석 등과 같은 도구를 선택하고 도구의 프롬프트에 따라 작동하면 결과가 텍스트 상자에 출력됩니다.
시각화 도구 상세 소개: 시각화 도구 상세 소개
대상은 "WBBlades"를 선택하고 컴파일 및 빌드하여 명령줄 도구를 생성합니다. 생성된 제품 "blades"를 /usr/local/bin에 복사합니다. 다음과 같이 sudo cp ${Your_BUILD_DIR}/blades /usr/local/bin
원클릭 감지
$ blades -diagnose xxx.app
쓸모없는 클래스, 쓸모없는 리소스, 중복 리소스 등을 원클릭 감지합니다.
사용하지 않는 코드 감지 ObjC 및 Swift
$ blades -unused xxx.app -from xxx.a xxx.a ....
-from은 다음 정적 라이브러리에서 사용되지 않은 코드만 분석됨을 나타냅니다. 이 매개변수가 없으면 기본값은 APP의 모든 클래스입니다.
앱 크기 분석(링크 후 .a 또는 .framework 크기를 직접 측정)
$ blades -size xxx.a xxx.framework ....
폴더 경로 입력을 지원하면 폴더 아래의 모든 정적 라이브러리가 분석됩니다.
dSYM 파일 없이 로그 복구(dSYM 파일이 누락된 경우 ObjC
크래시 스택 기호화 시도, Swift
지원되지 않음)
$ blades -symbol xxx.app -logPath xxx.ips
설명 | 지원하다 | 코드 예 |
---|---|---|
ObjC 클래스의 정적 호출 | ✅ | [MyClass new] |
ObjC 클래스의 동적 호출 | ✅ | NSClassFromString(@"MyClass") |
문자열 연결을 통한 ObjC 동적 호출 | NSClassFromString(@"My" + @"Class") | |
ObjC 로드 방법 | ✅ | +load{...} |
ObjC 및 Swift가 상속됨 | ✅ | SomClass : MyClass |
ObjC 및 Swift는 속성입니다. | ✅ | @property (strong,atomic) MyClass *obj; |
Swift 수업 직접 통화 | ✅ | MyClass.init() |
런타임을 사용한 신속한 호출 | ✅ | objc_getClass("Demo.MyClass") |
Swift 일반 매개변수 | ✅ | SomeClass<MyClass>.init() |
ObjC의 Swfit 클래스 동적 호출 | ✅ | NSClassFromString("Demo.MyClass") |
컨테이너의 Swift 유형 선언 | var array:[MyClass] | |
신속한 다중 중첩 | ✅ | class SomeClass {class MyClass {...} ...} |
정적 라이브러리의 링크된 크기를 빠르게 감지할 수 있도록 지원합니다. 컴파일하고 링크할 필요가 없습니다. 예: SDK를 가져오거나 업데이트할 때 앱 크기가 얼마나 증가하는지 알고 싶다면 SDK를 연결하여 성공적으로 컴파일하고 링크하여 계산할 필요 없이 blades -size
사용하여 크기를 추정할 수 있습니다 .
dSYM 파일이 손실된 경우 blades -symbol
통해 로그를 복원해 보십시오. **예를 들어 앱 패키징에서는 일정 시간이 지나면 dSYM 파일이 지워지지만 앱 파일은 그대로 유지됩니다. 이 경우 기호화를 위해 블레이드 사용을 고려할 수 있습니다. **도구를 사용하기 전에 몇 가지 사항에 주의하세요.
앱이 디버그 패키지이거나 기호 테이블을 제거하지 않는 패키지인 경우 dsymutil app -o xx.dSYM
사용하여 기호 테이블을 추출할 수 있습니다. 그런 다음 기호 테이블을 사용하여 로그를 기호화합니다.
이 도구는 ObjC만 지원하며, 그 원리는 Mach-O에서 ObjC 방식의 주소를 분석하여 충돌의 기능을 판단하는 것입니다. 따라서 Swfit, C 및 C++에는 적합하지 않습니다. 또한 도구는 만능이 아니며, 비상시 보완적인 기술적 수단으로만 사용된다. 일상적인 상황에서는 로그 기호화를 위해 기호 테이블을 사용하는 것이 좋습니다.
우리는 개발자들이 귀중한 의견과 제안을 제공할 수 있기를 진심으로 희망하며, 개발자들은 PR이나 이슈를 제출하여 제안과 문제에 대한 피드백을 제공할 수 있기를 진심으로 바랍니다.
WBBlade에 관심이 있다면 WBBlade 개발 그룹에 가입하여 기술적인 문제를 함께 논의할 수 있습니다. wechat 계정 "zqlong320"을 추가하거나 아래 QR 코드를 친구로 스캔하면 그룹에 가입하도록 초대됩니다.
GitHub: https://github.com/aquynh/capstone
GitHub: https://github.com/Sunnyyoung/SYFlatButton
GitHub: https://github.com/nygard/class-dump
GitHub: https://github.com/alexrozanski/PXListView
GitHub: https://github.com/steventroughtonsmith/cartool
드워프: https://www.prevanders.net/dwarf.html#releases
简体中文 | 영어
WBBlades는 Mach-O
文件解析의 工具集, 包括App一键体检(支持OC
와 Swift
의 无用类检测) 、包大小分析(支持单个静态库/动态库的包大小分析)、点对点崩溃解析(基于系统日志,支持华为和Bugly平台崩溃堆栈解析,支持有符号和无符号状态)、基于Mach-O的Class自动提取andHook能力。主要利用了__TE XT汇编代码分析、架构提取、符号表剥离、dYSM文件提取、崩溃文件(.ips)解析等技术手段实现、支持big method /small method 解析 以及 iOS 15이(가) dyld_chained_fixups의 관리자에게 적합합니다.
工具name称 | 功能概述 | 상关技术 |
---|---|---|
智能Readme | 问答式互动,便于快速了解WBBlades项目以及상关技术 | GPT 교육 |
App一键体检 | Swift/OC용 类检测、无용资源检测、包瘦身优化建议 | 反汇编、__Text指令提取、Mach-O解析、符号表/Swift类在Mach-O中的结构 |
包大소분자 | 检测静态库/动态库재.ipa中TM용 용도 | 架构剥离、静态库结构分析 |
崩溃解析 | 利用.app或者dYSM对系统崩溃日志解析,支持华为和Bugly平台的崩溃堆栈解析 | dYSM文件解析、轻weight符号表提取、ips文件解析、有/无符号表崩溃解析 |
Mach-O类Hook | 自动提取任意Mach-O中的Class并Hook | dyld_chained_fixups, 바인딩, 리베이스, 크고 작은 방법解析 |
새로운版本은 原来基于命令行运行上述工具的基础上,对工具集进行了전체면에 있습니다的可视化实现,开箱即用,专为研发提效而设计。另外,疑难崩溃解析上,针对一些不易复现、且일반적으로 사용되는 工具无法收集的崩溃(被操作系统直接杀死App进程场景), 提供了基于系统日志的点对点崩溃解析功能.
$ git clone https://github.com/wuba/WBBlades.git
$ cd WBBlades
$ pod install
대상은 WBBladesCrashApp입니다.
WBBlades는 WBBlades의 강력한 보호 장치를 사용하여 더욱 강력한 기능을 제공합니다. 、包大小检测等工具,根据工具内的提示进行操作即可,具体的数据会输 流到文本框中;
可视化工具详细介绍: 可视化工具详细介绍
target选择:WBBlades,编译运行,生成命令行工具 将生成的产物blades 拷贝至 /usr/local/bin 下,具体操작성: sudo cp ${Your_BUILD_DIR}/blades /usr/local/bin
一键诊断
$ blades -diagnose xxx.app
一键检测无用类, 无用资源, 中复资源等
无用代码检测OC
& Swift
$ blades -unused xxx.app -from xxx.a xxx.a ....
- 标识只分析以下静态库中的无用代码, 不加此参数默认为APP중앙부类에서
包大小分析(直接测算.a |.framework链接后的大小)
$ blades -size xxx.a xxx.framework ....
支持输入一个文件夹路径,输入后该文件下所有 静态库島会被分析
无符号表日志符号化(丢失符号表的情况下,尝试OC
崩溃堆栈符号化,不支持Swift
)
$ blades -symbol xxx.app -logPath xxx.ips
설명 | 是否支持 | 代码示例 |
---|---|---|
OC의 주요 유형 | ✅ | [MyClass new] |
OC의 사용 | ✅ | NSClassFromString(@"MyClass") |
OC 字符串接动态调용 | NSClassFromString(@"My" + @"Class") | |
OC 로드 방법 사용 | ✅ | +load{...} |
OC & Swift 被继承 | ✅ | SomClass : MyClass |
OC & Swift 창작성 | ✅ | @property (strong,atomic) MyClass *obj; |
Swift 类直接调용 | ✅ | MyClass.init() |
Swift 통신 런타임 사용 | ✅ | objc_getClass("Demo.MyClass") |
Swift 泛型参数 | ✅ | SomeClass<MyClass>.init() |
Swfit 类재OC中动态调사용 | ✅ | NSClassFromString("Demo.MyClass") |
Swift 容器中작为类型声明 | var array:[MyClass] | |
스위프트 다중화 | ✅ | class SomeClass {class MyClass {...} ...} |
如果你想知道一个接入或更新一个SDK对会增加多少包大小,可以用blades -size
来预估下大小,而无需将SDK接入编译链接成功后进行测算.
丢失dSYM文件的情况下, 尝试通过blades -symbol
恢复日志。例如某次打包, 一段时间后符号表被清除,但是保留了app文件,这种情况下可以考虑使사용WBBlades进行符号化。지금工具使사용앞에应先注의념几点:
dsymutil app -o xx.dSYM
来提取符号表。우리는 이 문제를 해결하기 위해 이 문제를 해결합니다.
欢迎对WBBlades感兴趣的작은伙伴加入WBBlades开发交流群,一起探讨技术问题,请先添加微信号"zqlong320"或者扫描下면의 2종입니다.
GitHub地址:https://github.com/aquynh/capstone
GitHub地址:https://github.com/Sunnyyoung/SYFlatButton
GitHub地址:https://github.com/nygard/class-dump
GitHub 위치: https://github.com/alexrozanski/PXListView
GitHub地址:https://github.com/steventroughtonsmith/cartool
DWARF 지역:https://www.prevanders.net/dwarf.html#releases
GitHub: https://github.com/nygard/class-dump