Buoy for Swift: in-app debugging tools for native iOS
Updated September 30, 2026
Install
Buoy for Swift is a Swift package that ships as a prebuilt, signed framework. It needs iOS 16 or later and Xcode 16 or later, and works in apps that use Swift 5 or Swift 6 language mode. In Xcode, choose File > Add Package Dependencies…, enter the URL below and use the rule Up to Next Minor Version from 0.1.0.
https://github.com/Buoy-gg/Buoy-Swift.gitThen start Buoy and add the overlay, both behind #if DEBUG:
import SwiftUI
import Buoy
@main
struct MyApp: App {
init() {
#if DEBUG
var config = BuoyConfig()
config.licenseKey = ProcessInfo.processInfo.environment["BUOY_LICENSE_KEY"]
Buoy.start(config)
#endif
}
var body: some Scene {
WindowGroup {
#if DEBUG
ContentView().buoyDevTools()
#else
ContentView()
#endif
}
}
}Put your account key in a BUOY_LICENSE_KEY environment variable in the Xcode Run scheme. UIKit apps call Buoy.install(in: windowScene) from the scene delegate instead of the modifier. The Swift quick start walks through the first captured request.
The tools
The package bundles the tools below in one module, so a single import Buoy brings them all in. Network and Console start with Buoy.start; the others need a line of configuration or a view modifier to reach your app's state. Each card links to its setup and to what the Swift version leaves out compared with React Native.
Network
URLSession requests on default and ephemeral configurations, with headers, bodies, timing and errors. Response overrides and throttling included.
Start Buoy before you create URLSessions.
Console
print output after Buoy.start, plus the app's own Logger, os_log and NSLog entries.
Storage
UserDefaults, keychain items you register and MMKV instances you register, with required-key checks.
Env
The values your app configures, checked against the keys and types you declare.
BuoyEnv.configure(vars:required:)
Impersonate
Search your users and add an impersonation header to captured requests. Your backend authorizes the change.
Image Overlay
Lay a design image over the running app, placed freely or locked to a marked view.
Images
Force loading, failure, blank and replacement states on images drawn with BuoyAsyncImage.
Notifications
Received notifications, presentation decisions, taps and permission status, forwarded to your delegate unchanged.
BuoyNotifications.install()
Routes
Your route patterns and live navigation stack. Desktop and MCP can navigate the app.
BuoyRoutes.configure + .buoyRoute(...)
Scenarios
Repeatable app setups built from tool actions, reviewed on the device before they run. Development builds only.
Time Machine
Snapshots of UserDefaults and MMKV that you restore live, with the screen you were on.
Events
Network, storage and route activity in one timeline you can filter, copy and export.
Assets
Sizes and duplicates of the loose resources in your app bundle, compared against a saved baseline.
Buoy Desktop, MCP and physical devices
A Swift app connects to Buoy Desktop the same way a React Native app does, and appears next to your other devices. In the iOS Simulator it finds Desktop on its own. On an iPhone, set BUOY_SOCKET_URL to your computer's address in the Run scheme and add the local network and App Transport Security entries from the physical devices guide. Buoy prints a [Buoy] setup: line in the Xcode console when one is missing.
With a Pro account, the Buoy MCP server lets an AI agent in your editor read captured requests and logs, tap supported UI elements, navigate between routes and restore Time Machine snapshots in the running app.
Keeping Buoy out of Release
Your app decides whether Buoy runs. Swift packages cannot be linked only in Debug, so the framework is embedded in every build, but nothing runs until Buoy.start is called: no URLProtocol registration, no swizzling, no overlay window and no network connection. Keep both calls behind #if DEBUG and a Release build never executes it. Scenario runs and UI recording also check at runtime that the app is a development build.
The framework adds about 9 MB to an uncompressed arm64 Release build, measured before App Store thinning. The Release builds guide has the details.
If you used Flipper
Flipper was a desktop debugging platform for mobile apps, and its owner has archived the repository on GitHub. Buoy covers part of the same ground for native iOS: it inspects network traffic, logs and stored values from inside a debug build and shows them in a desktop app. It is a different tool with its own setup, so check the Tools guide for what each Swift tool captures before planning a move.
What the beta leaves out
Buoy for Swift runs on iOS devices and the iOS Simulator; Mac Catalyst and macOS are not supported. Tools built on JavaScript stores or React rendering, such as React Query, Redux and render highlighting, are React Native only. Individual Swift tools also do less than their React Native counterparts in places; the Tools guide lists each gap. Report problems on the issue tracker.
Which Xcode and iOS versions does it support?
Does it work with UIKit?
Is the source code available?
Does it run in my App Store build?
Is it free?
Try Buoy for Swift
Start with a Free account and follow the Swift quick start. Debug builds you gate yourself; Pro adds MCP.
github.com/Buoy-gg/Buoy-Swiftsources
Capability claims on this page come from each vendor's own documentation, read on the date shown. We did not install and run every tool listed.
- Flipper repository (archived by its owner) · checked September 30, 2026
