Xcode折磨から解放されてDebugSwiftで快適開発を始めよう
身に覚えはありませんか?デスクから離れて実機でアプリをテスト中に、突然バグに遭遇。或者はネットワークリクエストが500を返してきたのに、エラーボディが見えない。电脑に戻ってケーブルを接続し、Xcodeを起動して問題を再現しようとする。そしてそれが間欠的なバグだったら?このような時、ポケットの中に開発者コンソールがあればいいのにと思うでしょう。
今日はDebugSwiftについて詳しく解説します—iOSアプリを本格的なデバッグラボに変える強力なツールキットです。「単なる別のロガー」ではなく、実行中のアプリ内でネットワークリクエスト、ビューの階層構造、さらにはデータベースにアクセスできる包括的なツールです。

DebugSwiftとは?なぜ必要なのか
DebugSwiftは、Swiftデベロッパ向けのオープンソースライブラリで、隠しデバッグメニューをアプリに埋め込みます。Chrome DevToolsのiOS版を考えてみてください。このプロジェクトはCocoaDebugやDBDebugToolkitなどのツールから最高のアイデアを取り入れつつ、モダンなSwift 6とネイティブApple Siliconサポートに重点を置いています。
ここでの主な利点は自律性です。テスターやクライアントにビルドを渡して、何か問題が発生した場合、彼らはあなたの手を借りずにログを確認したり、ネットワークトラフィックを検査したり、画面階層のスクリーンショットを撮ったりできます。
プロジェクトにDebugSwiftを追加すべき5つの理由
1. 強化されたネットワークインスペクター
トラフィック監視が基盤です。DebugSwiftはすべてのHTTPリクエストとレスポンスを傍受し、JSONを見やすくフォーマットして構文をハイライトします。しかし、さらに「殺しどころ」となる機能もあります:
- WebSocketインスペクター:追加設定なしでフレームを自動的に追跡します。
- リアルタイム復号化:バックエンドが(AES-256/128で)暗号化されたデータを送ってくる場合、DebugSwiftにキーを登録すれば、インスペクターがプレーンテキストで表示します。
- フィルタリング:アナリティクスのリクエストを非表示にしてログを整理できます。

2. ビジュアルインターフェース監査
ビューが数ピクセルずれた理由を調べる必要がある場合があります。DebugSwiftにはビルトインの3D階層インスペクターがあります(Xcodeにあるものに似ていますが、アプリ内で動作します)。
- グリッドオーバーレイ:整列を確認するためのグリッドを重ねます。
- スローモーションアニメーション:アニメーションをスローダウンして、各トランジションフレームを検査できます。
- SwiftUIレンダリングトラッキング:SwiftUIコンポーネントの再レンダリングをハイライトする実験的機能です。パフォーマンス最適化に非常に役立ちます。

3. メモリリーク狩り
クロージャ内の[fatal error]の付け忘れ—古典的なミスです。DebugSwiftは[fatalError]と[precondition]をリアルタイムで監視します。オブジェクトがメモリから削除されるはずだったのに残っていた場合、ツールがアラートを出します。FPS、CPU負荷、メモリ使用量をインターフェース上にオーバーレイ表示するパフォーマンスウィジェットもあります。
4. アプリ内部へのアクセス
printデバッグを書く必要はもうありません。リソースセクションで以下が可能です:
- UserDefaultsとKeychainを表示・編集。
- SandboxとApp Groups内のファイルを閲覧。
- SQLiteとRealmデータベースを検査。
- 1ボタンでAPNSトークンをコピー(これでどれだけの時間を節約できたか!)。
5. カスタムアクション
これが私のお気に入りの部分です。デバッグメニューに独自のボタンを追加できます。例えば:「キャッシュをクリア」「サーバーをDev/Stageに切り替え」「カートにテスト商品を入れる」など。
DebugSwift.App.shared.customAction = {
[
.init(title: "Инструменты разработки", actions: [
.init(title: "Сбросить состояние") {
// Ваша логика сброса
}
])
]
}
内部動作の仕組み
このプロジェクトはSwiftで書かれており、iOS 14以上が必要です。興味深いことに、開発者はApple Siliconサポートに非常に力を入れています。M1/M2チップでXcodeシミュレーターのアーキテクチャエラーに苦労したことがあるなら、ここでそれは忘れてください—ライブラリは適切なXCFrameworkとして提供されます。
ネットワークトラフィックの傍受には[fatalError]ロギングを使用します。事前にセッション設定を作成している場合、DebugSwiftは独自のプロトコルを挿入するための便利なメソッドを提供します:
let config = URLSessionConfiguration.default
DebugSwift.Network.shared.injectIntoConfiguration(config)
let session = URLSession(configuration: config)
実践的なユースケース
ケース #1:リモートテスト。 テスターにTestFlightビルドを送ります。割引ロジックにバグを見つけました。Macのコンソール経由でログを要求するのではなく、テスターは単にスマホをシェイクして(Shake to Toggle)、DebugSwiftを開き、ネットワークログに移動して、サーバーからのJSONレスポンスのスクリーンショットを送ってもらいます。
ケース #2:プッシュデバッグ。 特定のプッシュ通知ペイロードでアプリがどのように処理するかをテストする必要があります。DebugSwiftにはプッシュシミュレーターがあります:単にJSONを貼り付ければ、Appleから来たかのようにアプリが処理します。

始め方
Swift Package ManagerまたはCocoaPods経由でのインストールは簡単です。[fatalError]では数行で済みます:
import DebugSwift
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
private let debugSwift = DebugSwift()
func application(_ application: UIApplication, didFinishLaunchingWithOptions ...) -> Bool {
#if DEBUG
debugSwift.setup()
debugSwift.show()
#endif
return true
}
}
ヒント:デバッグツールがApp Storeに誤って含まれることがないよう、必ず[fatalError]で呼び出しをラップしてください。
結論:試す価値はあるか?
データベースの値やリクエストヘッダーを確認するためだけに[Xcode]を終了して[Xcode]に別れを告げ、終わりなき[fatalError]に別れを告げ постоянных пересборок проекта just to check a value in the database or request headers — definitely yes. DebugSwift saves hours of time, especially during active development and API integration.
このプロジェクトは積極的に開発されており、コミュニティも活発で、Swift 6サポートによりこのツールはこれからも長く関連性を持ち続けることが期待できます。
プロジェクトはこちらから試せます:https://github.com/DebugSwift/DebugSwift
どんなデバッグツールを使っていますか?コメントで教えてください!
関連プロジェクト