Jelly for iOS

Add a feedback toolbar to your iOS debug builds. Long-press any SwiftUI or UIKit element, write a note, and send your coding agent structured feedback with the screenshot attached.

Why it works well with SwiftUI

SwiftUI does not expose its full render tree the way you might want it to. So Jelly checks both the UIView hierarchy and the accessibility tree, then picks the tighter match.

In normal words: you can tap the actual thing that needs feedback, not just the giant hosting view around it.

Set it up in three steps

  • Add the package

    In Xcode, go to File → Add Package Dependencies, paste the repo URL, and add Jelly to your app target for debug builds.

    // Package.swift
    dependencies: [
        .package(url: "https://github.com/rajanndube/jelly-swift.git", from: "0.1.0")
    ],
    targets: [
        .executableTarget(
            name: "MyApp",
            dependencies: [
                .product(name: "Jelly", package: "jelly-swift",
                         condition: .when(configuration: .debug))
            ]
        )
    ]

    The debug-only condition keeps Jelly out of release builds.

  • Call Jelly.install() once

    Add it in your App init or AppDelegate, behind #if DEBUG.

    import SwiftUI
    #if DEBUG
    import Jelly
    #endif
    
    @main
    struct MyApp: App {
        init() {
            #if DEBUG
            Jelly.install()
            #endif
        }
    
        var body: some Scene {
            WindowGroup { ContentView() }
        }
    }
  • Build and run

    A small draggable Jelly pill appears on every scene. No extra wiring for each screen.

Source attribution

Every annotation includes a Source: File.swift:42 line. For sharper screen-level accuracy, tag your screen root with .jellySource().

SwiftUI does not expose file:line from runtime call stacks, so .jellySource() gives Jelly the exact screen source. Think of it as adding a name tag to the area you want feedback on.

What gets shared

Jelly exports the element, location, source line, component type, position, feedback, intent, severity, and screenshot. The format matches Android, React Native, and web, so your agent workflow stays the same across platforms.