英語 | 简体中文
WBBlades は、 Mach-O
ファイル解析に基づくツール セットで、アプリのワンクリック検出 ( OC
およびSwift
サポート)、パッケージ サイズ分析 (単一の静的ライブラリ/動的ライブラリをサポート)、ポイントツーポイント クラッシュ分析 (ベースシステム ログ、Huawei および Bugly プラットフォームのクラッシュ スタック分析のサポート、署名済みおよび未署名の状態のサポート)、Mach-O ファイルに基づくクラス自動抽出およびフック機能。主に __Text アセンブリ コード分析、アーキテクチャ抽出、DYSM ファイル ストリップ、シンボル テーブル ストリップ、クラッシュ ファイル (ips) 分析テクノロジを使用します。ビッグ メソッド/スモール メソッド解析と iOS 15 以降の dyld_chained_Fixups 処理をサポートします。ユーザーが WBBlades プロジェクトをすぐに理解できるように、GPT に基づいたインテリジェントな Readme 機能を提供しています。
ツール名 | 機能概要 | 関連技術 |
---|---|---|
インテリジェント Readme | インタラクティブな Q&A 形式により、WBBlades プロジェクトと関連テクノロジーを素早く理解できます。 | GPT チャット |
ワンクリックでアプリを検出 | Swift および OC の無駄なクラスの検出、無駄なリソースの検出、およびパッケージのダウンサイジングの最適化の提案。 | 逆アセンブリ、__Text 命令の抽出、Mach-O の解析、Mach-O のシンボル テーブルおよび Swift クラス構造 |
パッケージサイズの分析 | .ipa ファイル内の静的ライブラリと動的ライブラリが占める実際のサイズを検出します。 | アーキテクチャストリッピング、静的ライブラリ構造解析 |
クラッシュ分析 | .app または dYSM を使用してシステム クラッシュ ログを分析し、Huawei および Bugly プラットフォームでのクラッシュ スタック分析をサポートします | DYSM ファイル解析、軽量シンボル テーブル抽出、ips ファイル解析、シンボル テーブル クラッシュ解析あり/なし |
マッハクラスフック | 任意の Mach-O ファイルからクラスを自動的に抽出し、それらをフックします。 | dyld_chained_ フィックスアップ、バインディング、リベース、大規模/小規模メソッドの解析 |
新バージョンでは、上記ツールの本来のコマンドラインベースの操作をベースに、ツールセットを包括的にビジュアルに実装し、研究開発効率の向上を目指して設計されています。さらに、困難なクラッシュの分析では、再現が難しく、一般的なツールでは収集できない一部のクラッシュ (アプリのプロセスがオペレーティング システムによって直接強制終了される) については、ポイントツーポイントのクラッシュ分析が提供されます。
$ git clone https://github.com/wuba/WBBlades.git
$ cd WBBlades
$ pod install
ターゲットは「WBBladesCrashApp」を選択します。
WBBlades 視覚化ツールを以下に示します。左側の機能エリアのボタンをクリックし、無駄なクラスの検出、アプリケーション サイズ分析などのツールを選択し、ツールのプロンプトに従って操作すると、結果がテキスト ボックスに出力されます。
可視化ツールの詳細な紹介: 可視化ツールの詳細な紹介
ターゲットは「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 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 または Issue を送信して提案や問題に関するフィードバックを提供できることを心より願っています。
WBBlades に興味がある場合は、WBBlades 開発グループに参加して、技術的な問題について一緒に話し合うことができます。 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
サポートする無用のクラス検出)、包含大小解析 (静的库/動态库をサポートする包含大小解析)、点对点崩溃解析 (系统日志,支持华和バグリー平台崩主に __TEXT 型コード解析、フレーム構造抽出、シンボル表剥離、dYSM 文書抽出、崩壊ファイル (.ips) を利用します。 ) 解析等技术手段实现,サポートビッグメソッド /small メソッド解析および iOS 15 以降では、dyld_chained_fixups の処理に関するものです。また、ユーザーが WBBlades をより簡単に理解できるように、GPT ベースの智能 Readme 機能を提供しています。
ツール名 | 機能概要 | 関連技術 |
---|---|---|
智能Readme | WBBlades の項目および関連技術を迅速に理解するのに便利な応答形式の相互作用 | GPT聊天 |
アプリ一键体检 | Swift/OC 無用类检测、無用资源检测、包瘦身优化建议 | 反汇编、__Text命令抽出、Mach-O解析、Mach-O内のSwift类の構造 |
包大小分析 | 检测静态库/動态库.ipa 内占有实际大小 | 架構剥離、静态库構造分析 |
崩溃解析 | 解析利用.appまたはdYSM对系统崩溃日志,和Bugly平台の崩溃堆栈解析をサポート | dYSM文件解析、轻量記号表抽出、ips文件解析、有/無記号表崩溃解析 |
マッオ类フック | 自動引取任意の Mach-O 中のクラスフック | dyld_chained_fixups、バインディング、リベース、ビッグ/スモールメソッドの解析 |
新しいバージョンは、上記のツールを実行するコマンドに基づいて、ツール コレクションの完全な可視化が実行され、開発促進のために設計されています。分析すると、いくつかの簡単に発生せず、汎用ツールが収集できない崩壊 (オペレーティング システムによって直接削除されるアプリのプロセス環境) に対して、システム日報に基づく点対点崩壊解析機能が提供されます。
$ git clone https://github.com/wuba/WBBlades.git
$ cd WBBlades
$ pod install
ターゲット选择:WBBladesCrashApp
WBBlades は、次の図に示すようなツールを表示できます。左側の機能領域にポイントがあり、無用の検出、パケットサイズの検出などのツールにアクセスし、ツール内の提案に従って操作が実行され、特定のデータがテキスト ボックスに出力されます。
可視化ツール详细介绍: 可視化ツール详细介绍
ターゲット選択: WBBlades、コマンド実行ツール 生成された生成物ブレードを /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 ....
-from 标识ただ分析以下の静的库中の無用コード、不追加このパラメータはAPP中のすべての種類に認められます
包大小分析 (直接計算.a |.framework接続後の大小)
$ blades -size xxx.a xxx.framework ....
1 つのファイルの入力経路をサポートし、入力後のそのファイルの下のすべての静的ファイルの分析をサポートします
無記号表日志記号化(紛失記号表の場合、尝试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] | |
Swift 多重嵌套 | ✅ | class SomeClass {class MyClass {...} ...} |
例: SDK の接続または更新によってパケット サイズが増加することがわかっている場合は、 blades -size
使用できます。 blades -size
、SDK の接続が成功した後に計算する必要がなく、あらかじめ小さく設定されています。
dSYM ファイルが失われた場合、 blades -symbol
置き換えられます。たとえば、あるパケットが起動され、一定の時間が経過するとシンボル テーブルが削除されるが、アプリケーション ファイルは保持されます。このような場合は、WBBlades を使用してシンボル化を行うことが考えられます。使用前应先注意点:
dsymutil app -o xx.dSYM
によってシンボル テーブルを抽出できます。私たちは、発行者が宝のアイデアと提案を提案することを強く望んでいます。発行者は、PR または発行を通じて再提案と提案を行うことができます。
WBBlades の関心のある小さなパートナーを歓迎し、WBBlades の公開交流グループを追加し、技術の問題を調査し、マイクロ信号「zqlong320」を追加するか、次の 2 つのコードを良いものとして追加し、「WBBlades」に注目して、このグループを検討します。
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