native-app-performance について
native-app-performanceは、ネイティブアプリのTime Profilerトレースをコマンドラインだけで記録・分析するスキルです。開発者向けに、Instrumentsを開かずにサンプルを抽出し、スタックをシンボリケートしてアプリのホットスポットを順位付けします。
主な機能
- 01アタッチまたは起動によるTime Profiler記録
- 02トレースからの時間サンプル抽出
- 03バイナリとロードアドレスを使ったスタックのシンボリケート
- 04アプリ内の頻出フレームの順位付け
活用シーン
- 01ネイティブアプリのホットスポット特定
- 02特定の遅い処理のプロファイリング
- 03Instrumentsを開かずにトレースを分析
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ steipete/ agent-scripts --skill native-app-performanceインストール後、Claude Code で/native-app-performanceを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/extract_time_samples.pyrecord_time_profiler.shtop_hotspots.py詳細
ネイティブアプリのパフォーマンス(CLI のみ)
目標:xctrace で Time Profiler を記録し、サンプルを抽出してシンボルを解決し、Instruments を開かずにホットスポットを提案します。
クイックスタート(CLI)
- Time Profiler を記録(アタッチ):
# Start app yourself, then attach
xcrun xctrace record --template 'Time Profiler' --time-limit 90s --output /tmp/App.trace --attach <pid>
- Time Profiler を記録(起動):
xcrun xctrace record --template 'Time Profiler' --time-limit 90s --output /tmp/App.trace --launch -- /path/App.app/Contents/MacOS/App
- 時間サンプルを抽出:
scripts/extract_time_samples.py --trace /tmp/App.trace --output /tmp/time-sample.xml
- シンボル解決用のロードアドレスを取得:
# While app is running
vmmap <pid> | rg -m1 "__TEXT" -n
- シンボルを解決してホットスポットを順位付け:
scripts/top_hotspots.py --samples /tmp/time-sample.xml \
--binary /path/App.app/Contents/MacOS/App \
--load-address 0x100000000 --top 30
ワークフローに関する注意
- 正しいバイナリ(ローカルビルドか /Applications のものか)をプロファイリングしていることを必ず確認してください。
--launchにはバイナリの直接パスを指定することをおすすめします。 - 記録中に遅い処理を実行してください(メニューの開閉、更新など)。
- スタックが空の場合は、記録時間を長くするか、アイドル状態の区間を避けてください。
xcrun xctrace help recordとxcrun xctrace help exportで正しいフラグを確認できます。
付属スクリプト
scripts/record_time_profiler.sh:アタッチまたは起動して記録します。scripts/extract_time_samples.py:トレースから時間サンプルの XML をエクスポートします。scripts/top_hotspots.py:シンボルを解決し、アプリ内フレームの上位を順位付けします。
注意点
- ASLR のため、
vmmapから実行時の__TEXTロードアドレスを使用する必要があります。 - 新しいビルドを使用する場合は、
--binaryのパスを更新してください。シンボルはトレースと一致している必要があります。 - CLI のみのワークフローでは、
atosでスタックのシンボルを解決できるため、Instruments を開く必要はありません。
コメント
Markdown 対応