Inglés | 简体中文
WBBlades es un conjunto de herramientas basado en el análisis de archivos Mach-O
, que incluye detección con un solo clic para aplicaciones (admite OC
y Swift
), análisis del tamaño del paquete (admite una única biblioteca estática/biblioteca dinámica), análisis de fallos punto a punto (basado en en registros del sistema, admite análisis de fallas de las plataformas Huawei y Bugly, admite estados firmados y no firmados), extracción automática de clases y capacidad de gancho basada en archivos Mach-O. Utiliza principalmente análisis de código ensamblador de __Text, extracción de arquitectura, eliminación de archivos DYSM, eliminación de tablas de símbolos, tecnología de análisis de archivos bloqueados (ips). Admite análisis de métodos grandes/pequeños y iOS 15 anterior sobre el procesamiento dyld_chained_Fixups. Para facilitar que los usuarios comprendan rápidamente el proyecto WBBlades, proporcionamos una función Léame inteligente basada en GPT.
Nombre de la herramienta | Descripción general de funciones | Tecnologías relacionadas |
---|---|---|
Léame inteligente | El formato interactivo de preguntas y respuestas facilita una comprensión rápida del proyecto WBBlades y las tecnologías relacionadas. | chat GPT |
Detección con un clic para la aplicación | Detección de clases inútiles de Swift y OC, detección de recursos inútiles y sugerencias de optimización de reducción de paquetes. | Desmontaje, extracción de instrucciones __Text, análisis Mach-O, tabla de símbolos y estructura de clases Swift en Mach-O |
Análisis del tamaño del paquete | Detectar el tamaño real ocupado por bibliotecas estáticas y dinámicas en archivos .ipa. | Eliminación de arquitectura, análisis de estructura de biblioteca estática. |
Análisis de accidentes | Utilice .app o dYSM para analizar los registros de fallos del sistema y admita el análisis de la pila de fallos en las plataformas Huawei y Bugly. | Análisis de archivos DYSM, extracción ligera de tablas de símbolos, análisis de archivos ips, con/sin análisis de bloqueo de tablas de símbolos |
Gancho clase Mach-O | Extraiga clases automáticamente de cualquier archivo Mach-O y luego conéctelas. | dyld_ chained_ Correcciones, vinculación, rebase y análisis de métodos grandes/pequeños |
La nueva versión implementa una implementación visual integral del conjunto de herramientas basada en la operación original basada en línea de comandos de las herramientas anteriores y está diseñada para mejorar la eficiencia de la investigación y el desarrollo. Además, en el análisis de fallas difíciles, para algunas fallas que no son fáciles de reproducir y no pueden recopilarse mediante herramientas generales (el sistema operativo elimina directamente el proceso de la aplicación), se proporciona un análisis de fallas punto a punto.
$ git clone https://github.com/wuba/WBBlades.git
$ cd WBBlades
$ pod install
El objetivo selecciona "WBBladesCrashApp".
La herramienta de visualización WBBlades se muestra a continuación. Haga clic en el botón en el área de funciones de la izquierda, seleccione una herramienta como Detección de clases inútiles, Análisis del tamaño de la aplicación, etc., y opere de acuerdo con las indicaciones de la herramienta, y el resultado se enviará al cuadro de texto;
Introducción detallada a la herramienta de visualización: Introducción detallada a la herramienta de visualización
Target selecciona "WBBlades", compila y construye para generar herramientas de línea de comando. Copie los "blades" del producto generado en /usr/local/bin, de la siguiente manera: sudo cp ${Your_BUILD_DIR}/blades /usr/local/bin
Detección con un clic
$ blades -diagnose xxx.app
Detección con un solo clic de clases inútiles, recursos inútiles y recursos duplicados, etc.
Detección de código no utilizado ObjC y Swift
$ blades -unused xxx.app -from xxx.a xxx.a ....
-de indicar que solo se analiza el código no utilizado en las siguientes bibliotecas estáticas. Sin este parámetro, el valor predeterminado son todas las clases de la APLICACIÓN.
Análisis del tamaño de la aplicación (mide directamente el tamaño de .a o .framework después de vincularlo)
$ blades -size xxx.a xxx.framework ....
Al admitir la entrada de una ruta de carpeta, se analizarán todas las bibliotecas estáticas de la carpeta.
Recuperación de registros sin archivo dSYM (en caso de que falte un archivo dSYM, pruebe la simbolización de la pila de fallas ObjC
, Swift
no es compatible)
$ blades -symbol xxx.app -logPath xxx.ips
Descripción | Apoyo | Ejemplo de código |
---|---|---|
Llamada estática de clases ObjC | ✅ | [MyClass new] |
Llamada dinámica de clases ObjC. | ✅ | NSClassFromString(@"MyClass") |
Llamada dinámica ObjC a través de concatenación de cadenas | NSClassFromString(@"My" + @"Class") | |
Método de carga de ObjC | ✅ | +load{...} |
ObjC y Swift se heredan | ✅ | SomClass : MyClass |
ObjC y Swift son propiedades | ✅ | @property (strong,atomic) MyClass *obj; |
Llamada directa de clase rápida | ✅ | MyClass.init() |
Llamada rápida usando tiempo de ejecución | ✅ | objc_getClass("Demo.MyClass") |
Parámetros genéricos rápidos | ✅ | SomeClass<MyClass>.init() |
Llamada dinámica de clase Swfit en ObjC | ✅ | NSClassFromString("Demo.MyClass") |
Declaración de tipo Swift en el contenedor. | var array:[MyClass] | |
Anidamiento múltiple rápido | ✅ | class SomeClass {class MyClass {...} ...} |
Admite la detección rápida del tamaño vinculado de una biblioteca estática. No es necesario compilar ni vincular. Por ejemplo: si desea saber cuánto aumentará el tamaño de la aplicación cuando se importe o actualice un SDK, puede usar blades -size
para estimar el tamaño , sin la necesidad de conectar el SDK para compilarlo y vincularlo correctamente para calcular.
En caso de perder el archivo dSYM, intente restaurar el registro mediante blades -symbol
. **Por ejemplo, en el paquete de una aplicación, el archivo dSYM se borra después de un período de tiempo, pero el archivo de la aplicación se conserva. En este caso, puedes considerar el uso de hojas para la simbolización. **Antes de utilizar la herramienta, preste atención a algunos puntos:
Si su aplicación es un paquete de depuración o un paquete que no elimina la tabla de símbolos, puede usar dsymutil app -o xx.dSYM
para extraer la tabla de símbolos. Luego use la tabla de símbolos para simbolizar el registro.
Esta herramienta solo admite ObjC y su principio es determinar la función del bloqueo analizando la dirección del método ObjC en Mach-O. Por lo tanto, no es adecuado para Swfit, C y C++. Además, las herramientas no son omnipotentes y sólo se utilizan como medios técnicos complementarios de emergencia. En situaciones diarias, se recomienda utilizar tablas de símbolos para la simbolización de registros.
Esperamos sinceramente que los desarrolladores puedan brindar comentarios y sugerencias valiosos, y que los desarrolladores puedan brindar comentarios sobre sugerencias y problemas enviando relaciones públicas o problemas.
Si está interesado en WBBlades, puede unirse al grupo de desarrollo de WBBlades y discutir juntos cuestiones técnicas. Agregue la cuenta de WeChat "zqlong320" o escanee el código QR a continuación como amigo y luego lo invitaremos a unirse al grupo.
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
ENANO: https://www.prevanders.net/dwarf.html#releases
简体中文 | Inglés
WBBlades是基于Mach-O
文件解析的工具集,包括App一键体检(支持OC
和Swift
的无用类检测) 、包大小分析(支持单个静态库/动态库的包大小分析)、点对点崩溃解析(基于系统日志,支持华为和Bugly平台崩溃堆栈解析,支持有符号和无符号状态)、基于Mach-O的Class自动提取和Hook能力。主要利用了__TE XT汇编代码分析、架构提取、符号表剥离、dYSM文件提取、崩溃文件(.ips)解析等技术手段实现,支持grande método /método pequeño 解析 以及 iOS 15 ejemplos de dyld_chained_fixups.更快了解WBBlades项目,我们提供了基于GPT的智能Readme功能.
工具名称 | 功能概述 | 相关技术 |
---|---|---|
智能 Léame | 问答式互动,便于快速了解WBBlades项目以及相关技术 | GPT聊天 |
Aplicación一键体检 | Swift/OC无用类检测、无用资源检测、包瘦身优化建议 | 反汇编、__Text指令提取、Mach-O解析、符号表/Swift类在Mach-O中的结构 |
包大小分析 | 检测静态库/动态库在.ipa中占用的实际大小 | 架构剥离、静态库结构分析 |
崩溃解析 | 利用.app或者dYSM对系统崩溃日志解析,支持华为和Bugly平台的崩溃堆栈解析 | dYSM文件解析、轻量符号表提取、ips文件解析、有/无符号表崩溃解析 |
Gancho Mach-O | 自动提取任意Mach-O中的Class并Hook | dyld_chained_fixups, enlace, rebase, método grande/pequeño |
新版本在原来基于命令行运行上述工具的基础上,对工具集进行了全面的可视化实现,开箱即用,专为研发提效而设计。另外,在疑难崩溃解析上,针对一些不易复现、且通用工具无法收集的崩溃(被操作系统直接杀死App进程场景),提供了基于系统日志的点对点崩溃解析功能。
$ git clone https://github.com/wuba/WBBlades.git
$ cd WBBlades
$ pod install
Objetivo: WBBladesCrashApp
WBBlades可视化工具如下图所示。点击左侧功能区按钮,点击进入无用类检测、包大小检测等工具,根据工具内的提示进行操作即可,具体的数据会输出到文本框中;
可视化工具详细介绍: 可视化工具详细介绍
target选择:WBBlades,编译运行,生成命令行工具 将生成的产物blades 拷贝至 /usr/local/bin 下,具体操作如: sudo cp ${Your_BUILD_DIR}/blades /usr/local/bin
一键诊断
$ blades -diagnose xxx.app
一键检测无用类、无用资源、重复资源等
无用代码检测OC
y Swift
$ blades -unused xxx.app -from xxx.a xxx.a ....
-de 标识只分析以下静态库中的无用代码,不加此参数默认为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") | |
Carga OC方法使用 | ✅ | +load{...} |
OC & Swift 被继承 | ✅ | SomClass : MyClass |
OC & Swift 作为属性 | ✅ | @property (strong,atomic) MyClass *obj; |
Swift 类直接调用 | ✅ | MyClass.init() |
Modo de ejecución Swift | ✅ | objc_getClass("Demo.MyClass") |
Swift 泛型参数 | ✅ | SomeClass<MyClass>.init() |
Swfit 类在OC中动态调用 | ✅ | NSClassFromString("Demo.MyClass") |
Swift 容器中作为类型声明 | var array:[MyClass] | |
Swift 多重嵌套 | ✅ | class SomeClass {class MyClass {...} ...} |
支持快速检测一个静态库的链接后大小。无需编译链接。举例说明:如果你想知道一个接入或更新一个SDK对会增加多少包大小,可以用blades -size
来预估下大小,而无需将SDK接入编译链接成功后进行测算.
在丢失dSYM文件的情况下,尝试通过blades -symbol
恢复日志。例如某次打包,在一段时间后符号表被清除,但是保留了app文件,这种情况下可以考虑使用WBBlades进行符号化。在工具使用前应先注意几点:
dsymutil app -o xx.dSYM
来提取符号表。然后用符号表进行日志符号化。我们诚挚地希望开发者提出宝贵的意见和建议,开发者可以通过提交PR或者Issue来反馈建议和问题。
欢迎对WBBlades感兴趣的小伙伴加入WBBlades开发交流群,一起探讨技术问题,请先添加微信号"zqlong320"或者扫描下面的二维码为好友,备注"WBBlades",我们会邀请您进群.
Enlace de GitHub: https://github.com/aquynh/capstone
Enlace de GitHub: https://github.com/Sunnyyoung/SYFlatButton
Enlace de GitHub: https://github.com/nygard/class-dump
Enlace de GitHub: https://github.com/alexrozanski/PXListView
Enlace de GitHub: https://github.com/steventroughtonsmith/cartool
DWARF地址: https://www.prevanders.net/dwarf.html#releases
GitHub: https://github.com/nygard/class-dump