SkillAgentSearch skills...

GATT

Bluetooth Generic Attribute Profile (GATT) for Swift

Install / Use

/learn @PureSwift/GATT
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

GATT

Swift Platform Release License

Bluetooth Generic Attribute Profile (GATT) for Swift

Installation

GATT is available as a Swift Package Manager package. To use it, add the following dependency in your Package.swift:

.package(url: "https://github.com/PureSwift/GATT.git", branch: "master"),

and to your target, add GATT to your dependencies. You can then import GATT to get access to GATT functionality.

Platforms

| Platform | Roles | Backend | Library | | ---- | -------- | --- | ----------- | | macOS, iOS, watchOS, tvOS, visionOS | Central, Peripheral | CoreBluetooth | DarwinGATT | | Linux | Central, Peripheral | BlueZ | BluetoothLinux, GATT | Android | Central | Java Native Interface | AndroidBluetooth | WebAssembly | Central | Bluetooth Web API | BluetoothWeb | Pi Pico W | Peripheral | BlueKitchen BTStack | BTStack | ESP32 | Peripheral | Apache NimBLE | NimBLE | nRF52840 | Peripheral | Zephyr SDK | Zephyr

Usage

Peripheral

import Bluetooth
#if canImport(Darwin)
import DarwinGATT
#elseif os(Linux)
import BluetoothLinux
#endif

#if os(Linux)
typealias LinuxPeripheral = GATTPeripheral<BluetoothLinux.HostController, BluetoothLinux.L2CAPSocket>
guard let hostController = await HostController.default else {
    fatalError("No Bluetooth hardware connected")
}
let serverOptions = GATTPeripheralOptions(
    maximumTransmissionUnit: .max,
    maximumPreparedWrites: 1000
)
let peripheral = LinuxPeripheral(
    hostController: hostController,
    options: serverOptions,
    socket: BluetoothLinux.L2CAPSocket.self
)
#elseif canImport(Darwin)
let peripheral = DarwinPeripheral()
#else
#error("Unsupported platform")
#endif

// start advertising
try await peripheral.start()

Central

import Bluetooth
#if canImport(Darwin)
import DarwinGATT
#elseif os(Linux)
import BluetoothLinux
#endif

#if os(Linux)
typealias LinuxCentral = GATTCentral<BluetoothLinux.HostController, BluetoothLinux.L2CAPSocket>
let hostController = await HostController.default
let central = LinuxCentral(
    hostController: hostController,
    socket: BluetoothLinux.L2CAPSocket.self
)
#elseif canImport(Darwin)
let central = DarwinCentral()
#else
#error("Unsupported platform")
#endif

// start scanning
let stream = try await central.scan(filterDuplicates: true)
for try await scanData in stream {
    print(scanData)
    stream.stop()
}

Documentation

Read the documentation here. Documentation can be generated with DocC.

License

GATT is released under the MIT license. See LICENSE for details.

View on GitHub
GitHub Stars68
CategoryDevelopment
Updated3mo ago
Forks19

Languages

Swift

Security Score

97/100

Audited on Dec 7, 2025

No findings