Skip to content

alex566/DataScoutCompanion

Repository files navigation

DataScoutCompanion

Embeddable SwiftData Inspector into your app

DataScoutCompanion is a lightweight, embeddable Swift package that provides a UI to inspect the contents of your SwiftData/CoreData/SQLite stores at runtime. It ships as a drop‑in Swift Package, integrates seamlessly into SwiftUI, and lets you visualize and debug your data model without leaving your app.

This package is planned as a companion to the macOS app for debugging SwiftData DataScout and will be used in the future to support synchronization between devices.

screenshot

📦 Installation

Add DataScoutCompanion to your project:

  1. In Xcode, choose File > Add Package Dependencies...
  2. Enter the repository URL:
https://github.com/alex566/DataScoutCompanion.git
  1. Set the version requirement.
  2. Add the DataScoutCompanion package to your app target.

🎯 Usage

Everything you need to do is present DatabaseBrowser:

import SwiftUI
import DataScoutCompanion

struct YourRootView: View {
    @State private var isBrowserPresented = false

    var body: some View {
        YourContentView()
            .toolbar {
                Button(action: { isBrowserPresented = true }) {
                    Image(systemName: "tablecells")
                }
            }
            .sheet(isPresented: $isBrowserPresented) {
                DatabaseBrowser()
            }
    }
}

🛜 Remote debugging

  1. Update Info.plist with the following keys:
    <key>NSBonjourServices</key>
    <array>
        <string>_datascout-sync._tcp</string>
    </array>
    <key>NSLocalNetworkUsageDescription</key>
    <string>To debug the database over the local network</string>
  1. In your app’s startup code (e.g. in AppDelegate or SceneDelegate), import the package and call startAdvertising:
import DataScoutCompanion

func application(_ application: UIApplication,
                didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Option A: Pass an existing ModelContainer
    let myModelContainer = /* your ModelContainer instance */
    ConnectionService.shared.startAdvertising(container: myModelContainer)

    // Option B: Pass a file URL to your database
    let dbURL: URL = /* URL to your .sqlite3 file */
    ConnectionService.shared.startAdvertising(url: dbURL)

    return true
}

3. Use the Built-In Database Browser (Alternative)

If you’d rather broadcast from within the companion UI in your app:

  1. Open the database you wish to debug.
  2. Go to the Network Debugging menu.
  3. Enable the Discovery checkbox for that database.

About

Embeddable SwiftData Inspector

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages