Skip to content

iOS App debugging probe SDK is used to capture and analyze the app's network requests, logs, databases and other debugging information in real time.

License

Notifications You must be signed in to change notification settings

AIAugmentLab/iOS-DebugProbe

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

52 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

DebugProbe

iOS App ่ฐƒ่ฏ•ๆŽข้’ˆ SDK๏ผŒ็”จไบŽๅฎžๆ—ถๆ•่Žทๅ’Œๅˆ†ๆž App ็š„็ฝ‘็ปœ่ฏทๆฑ‚ใ€ๆ—ฅๅฟ—ใ€ๆ•ฐๆฎๅบ“็ญ‰่ฐƒ่ฏ•ไฟกๆฏใ€‚

Important

ๆœฌ้กน็›ฎๅ…จ้ƒจไปฃ็ ๅ’Œๆ–‡ๆกฃๅ‡็”ฑ AI Agent ็”Ÿๆˆ

ๅฝ“ๅ‰็‰ˆๆœฌ: 1.5.0 | ๆ›ดๆ–ฐๆ—ฅๅฟ— | ๆœ€ๅŽๆ›ดๆ–ฐ: 2025-12-17

ๅŠŸ่ƒฝ็‰นๆ€ง

๐ŸŒ ็ฝ‘็ปœๆ•่Žท

  • HTTP/HTTPS ่ฏทๆฑ‚ๆ•่Žท - ่‡ชๅŠจๆ‹ฆๆˆชๆ‰€ๆœ‰็ฝ‘็ปœ่ฏทๆฑ‚๏ผŒๅŒ…ๆ‹ฌ URLSessionใ€Alamofire ็ญ‰
  • WebSocket ็›‘ๆŽง - ๆ•่Žท WebSocket ่ฟžๆŽฅๅ’Œๆถˆๆฏ
  • ่ฏทๆฑ‚/ๅ“ๅบ”่ฏฆๆƒ… - ๅฎŒๆ•ด็š„ Headersใ€Bodyใ€Timing ไฟกๆฏ
  • gRPC & Protobuf ๆ”ฏๆŒ - ่‡ชๅŠจ่งฃๆž Protobuf ๆ ผๅผๆ•ฐๆฎ

๐ŸŽญ Mock Engine

  • ่ฏทๆฑ‚ Mock - ๆ‹ฆๆˆช่ฏทๆฑ‚ๅนถ่ฟ”ๅ›ž่‡ชๅฎšไน‰ๅ“ๅบ”
  • ๅปถ่ฟŸๆณจๅ…ฅ - ๆจกๆ‹Ÿ็ฝ‘็ปœๅปถ่ฟŸ
  • ๆกไปถๅŒน้… - ๆ”ฏๆŒ URLใ€Methodใ€Header ็ญ‰ๅคš็งๅŒน้…่ง„ๅˆ™

๐Ÿ”ง ๆ–ญ็‚น่ฐƒ่ฏ•

  • ่ฏทๆฑ‚ๆ–ญ็‚น - ๆš‚ๅœ่ฏทๆฑ‚ๅนถๅ…่ฎธไฟฎๆ”น
  • ๅ“ๅบ”ๆ–ญ็‚น - ๆ‹ฆๆˆชๅ“ๅบ”ๅนถๅ…่ฎธไฟฎๆ”นๅŽ่ฟ”ๅ›ž
  • ๅฎžๆ—ถ็ผ–่พ‘ - ๅœจ Web UI ไธญ็›ดๆŽฅ็ผ–่พ‘่ฏทๆฑ‚/ๅ“ๅบ”ๅ†…ๅฎน

๐Ÿ’ฅ Chaos Engineering

  • ๅปถ่ฟŸๆณจๅ…ฅ - ๆจกๆ‹Ÿ็ฝ‘็ปœๅปถ่ฟŸ
  • ่ถ…ๆ—ถๆจกๆ‹Ÿ - ๆจกๆ‹Ÿ่ฏทๆฑ‚่ถ…ๆ—ถ
  • ้”™่ฏฏ็ ๆณจๅ…ฅ - ่ฟ”ๅ›žๆŒ‡ๅฎš็š„ HTTP ้”™่ฏฏ็ 
  • ่ฟžๆŽฅ้‡็ฝฎ - ๆจกๆ‹Ÿ็ฝ‘็ปœไธญๆ–ญ
  • ๆ•ฐๆฎๆŸๅ - ๆจกๆ‹Ÿๅ“ๅบ”ๆ•ฐๆฎๆŸๅ

๐Ÿ“‹ ๆ—ฅๅฟ—ๆ•่Žท

  • CocoaLumberjack ้›†ๆˆ - ่‡ชๅŠจๆ•่Žท DDLog ๆ—ฅๅฟ—
  • OSLog ๆ”ฏๆŒ - ๆ•่Žท็ณป็ปŸๆ—ฅๅฟ—
  • ่‡ชๅฎšไน‰ๆ—ฅๅฟ— - ๆ”ฏๆŒ่‡ชๅฎšไน‰ๆ—ฅๅฟ—็บงๅˆซๅ’Œๅˆ†็ฑป

๐Ÿ—„๏ธ ๆ•ฐๆฎๅบ“ๆฃ€ๆŸฅ

  • SQLite ๆต่งˆ - ๆŸฅ็œ‹ App ๅ†…็š„ SQLite ๆ•ฐๆฎๅบ“
  • ่กจๆ•ฐๆฎๆŸฅ่ฏข - ๆ”ฏๆŒๅˆ†้กตใ€ๆŽ’ๅบใ€SQL ๆŸฅ่ฏข
  • Schema ๆŸฅ็œ‹ - ๆŸฅ็œ‹่กจ็ป“ๆž„

๐Ÿ“Š ๆ€ง่ƒฝ็›‘ๆŽง

  • CPU ไฝฟ็”จ็އ - ๅฎžๆ—ถ็›‘ๆŽง App CPU ๅ ็”จ
  • ๅ†…ๅญ˜ไฝฟ็”จ - ็›‘ๆŽงๅ†…ๅญ˜ๅ ็”จๅ’Œๅ†…ๅญ˜ๅŽ‹ๅŠ›
  • ๅธง็އ (FPS) - ๅฎžๆ—ถๅธง็އ็›‘ๆŽงๅ’Œๅก้กฟๆฃ€ๆต‹
  • App ๅฏๅŠจๆ—ถ้—ด - ๅ†ทๅฏๅŠจ/็ƒญๅฏๅŠจ่€—ๆ—ถๅˆ†ๆž
  • ้กต้ข่€—ๆ—ถ - ่‡ชๅŠจ/ๆ‰‹ๅŠจ้‡‡้›†้กต้ขๅŠ ่ฝฝ่€—ๆ—ถ

๐Ÿ“ธ ๆˆชๅ›พ้ข„่งˆ

HTTP ่ฏทๆฑ‚ๅˆ—่กจ ่ฏทๆฑ‚่ฏฆๆƒ…
ๆ—ฅๅฟ—ๆŸฅ็œ‹ ๆ•ฐๆฎๅบ“ๆฃ€ๆŸฅ

ๅฎ‰่ฃ…

Swift Package Manager

ๅœจ Package.swift ไธญๆทปๅŠ ไพ่ต–๏ผš

dependencies: [
    .package(url: "https://github.com/example/DebugProbe.git", branch: "main")
]

ๆˆ–ๅœจ Xcode ไธญ๏ผš

  1. File โ†’ Add Package Dependencies
  2. ่พ“ๅ…ฅไป“ๅบ“ URL
  3. ้€‰ๆ‹ฉ็‰ˆๆœฌๅนถๆทปๅŠ ๅˆฐ็›ฎๆ ‡

ๅฟซ้€Ÿๅผ€ๅง‹

1. ๆœ€็ฎ€ๅฏๅŠจ๏ผˆๆŽจ่๏ผ‰

import DebugProbe

// ๅœจ AppDelegate ๆˆ– App ๅ…ฅๅฃๅค„ๅˆๅง‹ๅŒ–
func application(_ application: UIApplication, didFinishLaunchingWithOptions...) -> Bool {
    
    #if DEBUG
    // ่‡ชๅŠจไปŽ DebugProbeSettings ่ฏปๅ–้…็ฝฎ๏ผˆhubHost, hubPort, token๏ผ‰
    DebugProbe.shared.start()
    #endif
    
    return true
}

2. ้…็ฝฎ DebugProbeSettings๏ผˆๅฏ้€‰๏ผ‰

DebugProbeSettings ๆ˜ฏ SDK ็š„้…็ฝฎ็ฎก็†ไธญๅฟƒ๏ผŒๆ”ฏๆŒๅคšๅฑ‚้…็ฝฎไผ˜ๅ…ˆ็บง๏ผš่ฟ่กŒๆ—ถ้…็ฝฎ > Info.plist > ้ป˜่ฎคๅ€ผ

// ๆ–นๅผไธ€๏ผšๅœจไปฃ็ ไธญ่ฎพ็ฝฎ้ป˜่ฎคๅ€ผ๏ผˆ้€‚ๅˆๆ‰“ๅŒ…ๆ—ถ้…็ฝฎ๏ผ‰
DebugProbeSettings.defaultHost = "192.168.1.100"  // ้ป˜่ฎค "127.0.0.1"
DebugProbeSettings.defaultPort = 8081             // ้ป˜่ฎค 8081

// ๆ–นๅผไบŒ๏ผš่ฟ่กŒๆ—ถ้…็ฝฎ๏ผˆไผšๆŒไน…ๅŒ–ๅˆฐ UserDefaults๏ผ‰
DebugProbeSettings.shared.configure(
    host: "192.168.1.100",
    port: 8081,
    token: "my-token"
)

// ๆ–นๅผไธ‰๏ผš้€š่ฟ‡ Info.plist ้…็ฝฎ
// DEBUGHUB_HOST = "192.168.1.100"
// DEBUGHUB_PORT = 8081
// DEBUGHUB_TOKEN = "my-token"

3. ้…็ฝฎๅ˜ๆ›ด่‡ชๅŠจ้‡่ฟž

// ็›‘ๅฌ้…็ฝฎๅ˜ๆ›ด้€š็Ÿฅ
NotificationCenter.default.addObserver(
    forName: DebugProbeSettings.configurationDidChangeNotification,
    object: nil,
    queue: .main
) { _ in
    // ่‡ชๅŠจไปŽ DebugProbeSettings ่ฏปๅ–ๆ–ฐ้…็ฝฎๅนถ้‡่ฟž
    DebugProbe.shared.reconnect()
}

4. ่‡ชๅฎšไน‰ๅฏๅŠจๅ‚ๆ•ฐ

#if DEBUG
// ๅฏไปฅ้ข„ๅ…ˆ้…็ฝฎๅ‚ๆ•ฐ
let settings = DebugProbeSettings.shared
settings.hubHost = "192.168.1.100"     // ่‡ชๅฎšไน‰ Hub ๅœฐๅ€
settings.networkCaptureMode = .automatic
settings.networkCaptureScope = .all
settings.enablePersistence = true

// ็„ถๅŽๅฏๅŠจ
DebugProbe.shared.start()
#endif

6. ๆณจๅ†Œๆ•ฐๆฎๅบ“๏ผˆๅฏ้€‰๏ผ‰

import DebugProbe

// ๆณจๅ†Œ่ฆๆฃ€ๆŸฅ็š„ๆ•ฐๆฎๅบ“
DatabaseRegistry.shared.register(
    id: "main-db",
    name: "MyDatabase",
    url: databaseURL,
    kind: "main",
    isSensitive: false
)

// ๆˆ–่‡ชๅŠจๅ‘็Žฐ็›ฎๅฝ•ไธ‹็š„ๆ‰€ๆœ‰ SQLite ๆ•ฐๆฎๅบ“
DatabaseRegistry.shared.autoDiscover(in: documentsURL)

7. ่‡ชๅฎšไน‰ๆ—ฅๅฟ—๏ผˆๅฏ้€‰๏ผ‰

// ๅ‘้€่‡ชๅฎšไน‰่ฐƒ่ฏ•ๆ—ฅๅฟ—
DebugProbe.shared.log(
    level: .info,
    message: "็”จๆˆท็™ปๅฝ•ๆˆๅŠŸ",
    subsystem: "Auth",
    category: "Login"
)

// ไพฟๆทๆ–นๆณ•
DebugProbe.shared.debug("่ฐƒ่ฏ•ไฟกๆฏ")
DebugProbe.shared.info("ๆ™ฎ้€šไฟกๆฏ")
DebugProbe.shared.warning("่ญฆๅ‘Šไฟกๆฏ")
DebugProbe.shared.error("้”™่ฏฏไฟกๆฏ")

8. CocoaLumberjack ้›†ๆˆ๏ผˆๅฏ้€‰๏ผ‰

DebugProbe SDK ไธๅŒ…ๅซ CocoaLumberjack ไพ่ต–ใ€‚ๅฆ‚ๆžœๆ‚จ็š„้กน็›ฎไฝฟ็”จ CocoaLumberjack๏ผŒ้œ€่ฆๆ‰‹ๅŠจๅˆ›ๅปบๆกฅๆŽฅๅ™จ๏ผš

#if canImport(CocoaLumberjack)
import Foundation
import CocoaLumberjack
import DebugProbe

/// CocoaLumberjack ๆ—ฅๅฟ—ๆกฅๆŽฅๅ™จ
public final class DDLogBridgeLocal: DDAbstractLogger {
    private var _logFormatter: DDLogFormatter?

    override public var logFormatter: DDLogFormatter? {
        get { _logFormatter }
        set { _logFormatter = newValue }
    }

    override public func log(message logMessage: DDLogMessage) {
        DebugProbe.shared.log(
            level: mapDDLogFlagToLevel(logMessage.flag),
            message: logMessage.message,
            subsystem: logMessage.fileName,
            category: logMessage.function ?? "DDLog"
        )
    }

    private func mapDDLogFlagToLevel(_ flag: DDLogFlag) -> LogEvent.Level {
        switch flag {
        case .verbose: return .verbose
        case .debug: return .debug
        case .info: return .info
        case .warning: return .warning
        case .error: return .error
        default: return .debug
        }
    }
}
#endif

็„ถๅŽๅœจ AppDelegate ไธญๆณจๅ†Œ๏ผš

#if canImport(CocoaLumberjack)
DDLog.add(DDLogBridgeLocal())
DDLog.add(DDOSLogger.sharedInstance)  // ๅฏ้€‰๏ผšไฟ็•™ๆŽงๅˆถๅฐ่พ“ๅ‡บ
#endif

API ๆฆ‚่งˆ

DebugProbe

ๆ–นๆณ• ่ฏดๆ˜Ž
start() ไฝฟ็”จ DebugProbeSettings ้…็ฝฎๅฏๅŠจ๏ผˆๆŽจ่๏ผ‰
stop() ๅœๆญข DebugProbe
reconnect() ไฝฟ็”จ DebugProbeSettings ้…็ฝฎ้‡่ฟž๏ผˆๆŽจ่๏ผ‰
reconnect(hubURL:token:) ไฝฟ็”จๆŒ‡ๅฎš URL ๅ’Œ Token ้‡่ฟž
retryConnection() ๆ‰‹ๅŠจ้‡่ฏ•่ฟžๆŽฅ๏ผˆ็”จไบŽ่ฟžๆŽฅๅคฑ่ดฅๅŽ๏ผ‰
isStarted ๆ˜ฏๅฆๅทฒๅฏๅŠจ
connectionState ๅฝ“ๅ‰่ฟžๆŽฅ็Šถๆ€

DebugProbeSettings

ๅฑžๆ€ง/ๆ–นๆณ• ่ฏดๆ˜Ž
hubHost Hub ไธปๆœบๅœฐๅ€
hubPort Hub ็ซฏๅฃ
token ่ฎค่ฏ Token
hubURL ๅฎŒๆ•ด็š„ WebSocket URL
isEnabled ๆ˜ฏๅฆๅฏ็”จ DebugProbe
verboseLogging ๆ˜ฏๅฆๅฏ็”จ่ฏฆ็ป†ๆ—ฅๅฟ—
configure(host:port:token:) ๅฟซ้€Ÿ้…็ฝฎ
configure(from: URL) ไปŽ URL ่งฃๆž้…็ฝฎ๏ผˆๅฆ‚ๆ‰ซ็ ๏ผ‰
resetToDefaults() ้‡็ฝฎไธบ้ป˜่ฎคๅ€ผ
connectionStatusDetail ่ฟžๆŽฅ็Šถๆ€่ฏฆๆƒ…
configurationDidChangeNotification ้…็ฝฎๅ˜ๆ›ด้€š็Ÿฅ

ๆžถๆž„

ๆ’ไปถๅŒ–ๆžถๆž„

DebugProbe ้‡‡็”จๆ’ไปถๅŒ–ๆžถๆž„๏ผŒๆ‰€ๆœ‰ๅŠŸ่ƒฝๆจกๅ—๏ผˆ็ฝ‘็ปœใ€ๆ—ฅๅฟ—ใ€Mock ็ญ‰๏ผ‰ๅ‡ไปฅๆ’ไปถๅฝขๅผๅฎž็Žฐ๏ผš

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                              DebugProbe SDK                                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                 โ”‚
โ”‚  โ”‚   HttpPlugin  โ”‚   โ”‚   LogPlugin   โ”‚   โ”‚WebSocketPluginโ”‚                 โ”‚
โ”‚  โ”‚  (HTTP ๆ•่Žท)   โ”‚   โ”‚  (ๆ—ฅๅฟ—ๆ•่Žท)    โ”‚   โ”‚  (WS ็›‘ๆŽง)    โ”‚                 โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ”‚
โ”‚          โ”‚                   โ”‚                   โ”‚                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                 โ”‚
โ”‚  โ”‚  MockPlugin   โ”‚   โ”‚BreakpointPluginโ”‚  โ”‚  ChaosPlugin  โ”‚                 โ”‚
โ”‚  โ”‚  (Mock ่ง„ๅˆ™)   โ”‚   โ”‚  (ๆ–ญ็‚น่ฐƒ่ฏ•)    โ”‚   โ”‚  (ๆ•…้šœๆณจๅ…ฅ)   โ”‚                 โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ”‚
โ”‚          โ”‚                   โ”‚                   โ”‚                          โ”‚
โ”‚          โ–ผ                   โ–ผ                   โ–ผ                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚                      PluginManager + EventCallbacks                    โ”‚ โ”‚
โ”‚  โ”‚  โ€ข ๆ’ไปถ็”Ÿๅ‘ฝๅ‘จๆœŸ็ฎก็†๏ผˆๆณจๅ†Œ/ๅฏๅŠจ/ๅœๆญข๏ผ‰                                   โ”‚ โ”‚
โ”‚  โ”‚  โ€ข ไบ‹ไปถ่ทฏ็”ฑ๏ผˆๆ•่Žทๅฑ‚ โ†’ ๆ’ไปถๅฑ‚ โ†’ BridgeClient๏ผ‰                          โ”‚ โ”‚
โ”‚  โ”‚  โ€ข ๅ‘ฝไปคๅˆ†ๅ‘๏ผˆๆœๅŠก็ซฏๅ‘ฝไปค โ†’ ็›ฎๆ ‡ๆ’ไปถ๏ผ‰                                    โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚          โ”‚                                                                  โ”‚
โ”‚          โ–ผ                                                                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚                       DebugBridgeClient                                โ”‚ โ”‚
โ”‚  โ”‚  โ€ข ๅ†…็ฝฎไบ‹ไปถ็ผ“ๅ†ฒๅŒบ (ไธขๅผƒ็ญ–็•ฅใ€ๆŒไน…ๅŒ–)                                    โ”‚ โ”‚
โ”‚  โ”‚  โ€ข WebSocket ้€šไฟก                                                      โ”‚ โ”‚
โ”‚  โ”‚  โ€ข ๆ‰น้‡ๅ‘้€ใ€ๆ–ญ็บฟ้‡่ฟž                                                   โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                                    โ”‚                                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                     โ”‚ WebSocket
                                     โ–ผ
                              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                              โ”‚ Debug Hub   โ”‚
                              โ”‚  (ๆœๅŠก็ซฏ)    โ”‚
                              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅ†…็ฝฎๆ’ไปถ

ๆ’ไปถ ID ๆ’ไปถๅ็งฐ ๅŠŸ่ƒฝ
http HttpPlugin HTTP/HTTPS ่ฏทๆฑ‚ๆ•่Žท
log LogPlugin ๆ—ฅๅฟ—ๆ•่Žท๏ผˆDDLog, OSLog๏ผ‰
websocket WebSocketPlugin WebSocket ่ฟžๆŽฅ็›‘ๆŽง
mock MockPlugin HTTP/WS Mock ่ง„ๅˆ™็ฎก็†
database DatabasePlugin SQLite ๆ•ฐๆฎๅบ“ๆฃ€ๆŸฅ
breakpoint BreakpointPlugin ่ฏทๆฑ‚/ๅ“ๅบ”ๆ–ญ็‚น่ฐƒ่ฏ•
chaos ChaosPlugin ๆ•…้šœๆณจๅ…ฅ๏ผˆChaos Engineering๏ผ‰
performance PerformancePlugin ๆ€ง่ƒฝ็›‘ๆŽง๏ผˆCPU/ๅ†…ๅญ˜/FPS/้กต้ข่€—ๆ—ถ๏ผ‰

็›ฎๅฝ•็ป“ๆž„

DebugProbe/
โ”œโ”€โ”€ Sources/
โ”‚   โ”œโ”€โ”€ Core/
โ”‚   โ”‚   โ”œโ”€โ”€ DebugProbe.swift          # ไธปๅ…ฅๅฃ
โ”‚   โ”‚   โ”œโ”€โ”€ DebugBridgeClient.swift   # WebSocket ้€šไฟก + ไบ‹ไปถ็ผ“ๅ†ฒ
โ”‚   โ”‚   โ”œโ”€โ”€ EventPersistenceQueue.swift # ไบ‹ไปถๆŒไน…ๅŒ–
โ”‚   โ”‚   โ””โ”€โ”€ Plugin/
โ”‚   โ”‚       โ”œโ”€โ”€ PluginManager.swift   # ๆ’ไปถ็ฎก็†ๅ™จ
โ”‚   โ”‚       โ”œโ”€โ”€ EventCallbacks.swift  # ไบ‹ไปถๅ›ž่ฐƒไธญๅฟƒ
โ”‚   โ”‚       โ””โ”€โ”€ PluginBridgeAdapter.swift # ๅ‘ฝไปค่ทฏ็”ฑ้€‚้…ๅ™จ
โ”‚   โ”œโ”€โ”€ Plugins/
โ”‚   โ”‚   โ”œโ”€โ”€ Engines/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ BreakpointEngine.swift    # ๆ–ญ็‚นๅผ•ๆ“Ž
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ChaosEngine.swift         # ๆ•…้šœๆณจๅ…ฅๅผ•ๆ“Ž
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ MockRuleEngine.swift      # Mock ่ง„ๅˆ™ๅผ•ๆ“Ž
โ”‚   โ”‚   โ”œโ”€โ”€ HttpPlugin.swift          # HTTP ็ฝ‘็ปœๆ’ไปถ
โ”‚   โ”‚   โ”œโ”€โ”€ LogPlugin.swift           # ๆ—ฅๅฟ—ๆ’ไปถ
โ”‚   โ”‚   โ”œโ”€โ”€ WebSocketPlugin.swift     # WebSocket ๆ’ไปถ
โ”‚   โ”‚   โ”œโ”€โ”€ MockPlugin.swift          # Mock ๆ’ไปถ
โ”‚   โ”‚   โ”œโ”€โ”€ DatabasePlugin.swift      # ๆ•ฐๆฎๅบ“ๆ’ไปถ
โ”‚   โ”‚   โ”œโ”€โ”€ BreakpointPlugin.swift    # ๆ–ญ็‚นๆ’ไปถ
โ”‚   โ”‚   โ”œโ”€โ”€ ChaosPlugin.swift         # Chaos ๆ’ไปถ
โ”‚   โ”‚   โ””โ”€โ”€ PerformancePlugin.swift   # ๆ€ง่ƒฝ็›‘ๆŽงๆ’ไปถ
โ”‚   โ”œโ”€โ”€ Network/
โ”‚   โ”‚   โ”œโ”€โ”€ NetworkInstrumentation.swift  # HTTP ๆ‹ฆๆˆชๅŸบ็ก€่ฎพๆ–ฝ
โ”‚   โ”‚   โ””โ”€โ”€ WebSocketInstrumentation.swift # WebSocket ๆ‹ฆๆˆชๅŸบ็ก€่ฎพๆ–ฝ
โ”‚   โ”œโ”€โ”€ Log/
โ”‚   โ”‚   โ””โ”€โ”€ DDLogBridge.swift         # CocoaLumberjack ๆกฅๆŽฅ
โ”‚   โ”œโ”€โ”€ Database/
โ”‚   โ”‚   โ””โ”€โ”€ DatabaseRegistry.swift    # ๆ•ฐๆฎๅบ“ๆณจๅ†Œ
โ”‚   โ””โ”€โ”€ Models/
โ”‚       โ””โ”€โ”€ ...                       # ๆ•ฐๆฎๆจกๅž‹
โ””โ”€โ”€ Package.swift

ไธŽ DebugHub ้…ๅˆไฝฟ็”จ

DebugProbe ้œ€่ฆ้…ๅˆ DebugHub ๆœๅŠก็ซฏไฝฟ็”จ๏ผš

  1. ๅฏๅŠจ DebugHub ๆœๅŠกๅ™จ
  2. ๅœจ iOS App ไธญ้…็ฝฎ DebugProbe ่ฟžๆŽฅๅˆฐ DebugHub
  3. ๆ‰“ๅผ€ Web UI (http://localhost:8081) ๆŸฅ็œ‹่ฐƒ่ฏ•ไฟกๆฏ

Demo ๅทฅ็จ‹

้กน็›ฎๅŒ…ๅซๅฎŒๆ•ด็š„ Demo ๅทฅ็จ‹๏ผŒๆผ”็คบๆ‰€ๆœ‰ๅŠŸ่ƒฝๆจกๅ—็š„ไฝฟ็”จๆ–นๆณ•๏ผš

# Demo ๅทฅ็จ‹ไฝ็ฝฎ
DebugProbe/Demo/DebugProbeDemo/

# ไฝฟ็”จ Xcode ๆ‰“ๅผ€
open Demo/DebugProbeDemo/DebugProbeDemo.xcodeproj

Demo ๅŒ…ๅซไปฅไธ‹ๅŠŸ่ƒฝๆผ”็คบ๏ผš

  • HTTP ่ฏทๆฑ‚ - GET/POST/PUT/DELETE/ๆ–‡ไปถไธŠไผ /ๅนถๅ‘่ฏทๆฑ‚
  • WebSocket - ่ฟžๆŽฅ็ฎก็†ใ€ๆถˆๆฏๆ”ถๅ‘
  • ๆ—ฅๅฟ—็ณป็ปŸ - ๅคš็บงๅˆซๆ—ฅๅฟ—ๅ‘้€
  • ๆ•ฐๆฎๅบ“ - SQLite CRUD ๆ“ไฝœ
  • Mock ่ง„ๅˆ™ - API Mock ้…็ฝฎ
  • ่ฎพ็ฝฎ - DebugHub ่ฟžๆŽฅ้…็ฝฎ

่ฏฆ่ง Demo README

่ฆๆฑ‚

  • iOS 14.0+
  • macOS 12.0+
  • Swift 5.9+
  • Xcode 15.0+

ๅฏ้€‰ไพ่ต–

  • CocoaLumberjack - ็”จไบŽๆ—ฅๅฟ—ๆ•่Žท้›†ๆˆ

License

MIT License

็›ธๅ…ณ้กน็›ฎ

  • Debug Platform - ๅฎŒๆ•ด็š„่ฐƒ่ฏ•ๅนณๅฐ๏ผˆๅŒ…ๅซ Debug Hub ๆœๅŠก็ซฏๅ’Œ Web UI๏ผ‰

About

iOS App debugging probe SDK is used to capture and analyze the app's network requests, logs, databases and other debugging information in real time.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published