Transfer Target

The transfer target is the device that will receive data from another device.

In terms of Bluetooth, the transfer source is the one that is broadcasting to another device.

Example integration

import WultraProximityTransfer

struct MyTransferData: Codable {
    let id: String
    let token: String

class MySampleTarget: WPTTargetDelegate {

    let target: WPTTarget

    let config = WPTConfig(
        serviceUUID: UUID(uuidString: "21f8190c-e4bc-11ed-b5ea-0242ac120001")!, 
        coder: WPTAESCoder(
            salt: "MyApplicationDemoSalt!".data(using: .utf8)!, // static data
            iv: Data(base64Encoded: "7x9ZEvEVf4IqlBxuYmzKhw==")! // 16 bytes encoded in Base64

    init() {
        do {
            let target = try WPTTarget(config: config)
            target.delegate = self
   = target
        } catch let e {
            fatalError("Failed to create WPTTarget: \(e)")
    // MARK: - WPTTargetDelegate
    func targetStatusChanged(_ sender: WPTTarget, status: WPTTargetStatus) {
        print("WPTTarget status changed: \(status)")
        switch status {
        case .notStarted: 
            // The target is not started.
        case .preparing: 
            // The target is preparing to start.
        case .bluetoothOn:
            // Bluetooth is ready
        case .startingFailed(let e):
            // Bluetooth broadcast failed
        case .unsupported:
            // The Bluetooth isn't available on this device.
        case .unauthorized:
            // The Bluetooth permission not granted
        case .bluetoothOff:
            // The Bluetooth is turned off
        case .active:
            // Target is active and broadcasting

Classes used for the target


Entrypoint for the target. Just start the target and instruct the user to scan the QR code that will be prepared on the source device.

Swift interface of the class

public class WPTTarget {

    /// Status of the target.
    public var status: WPTTargetStatus { get }

    /// Delegate that receives status changes
    public weak var delegate: WPTTargetDelegate?

    /// Creates an instance of a target.
    /// Please note that the target configuration must be the same as the Source configuration.
    /// - Parameter config: Target configuration.
    public init(config: WPTConfig) throws

    /// Starts the Bluetooth broadcast. After a successful start, you should start offering a user a QR scanner.
    public func start()

    /// Stops the Bluetooth broadcast.
    public func stop()

    /// Decodes the data scanned via QR scanner
    /// - Parameter data: Scanned data
    /// - Returns: Decoded (decrypted) data.
    public func decode(data: Data) throws -> Data

    /// Decodes the data scanned via QR scanner to a `Decodable` object.
    /// - Parameter data: Scanned data
    /// - Returns: Decoded object.
    public func decode<T>(data: Data) throws -> T where T : Decodable


A delegate will be called when the status of the target changes.

Swift interface of the class

public protocol WPTTargetDelegate {
    /// Bluetooth broadcasting status changed
    /// - Parameters:
    ///   - sender: Target that reported the change
    ///   - status: Status of the change
    func targetStatusChanged(_ sender: WPTTarget, status: WPTTargetStatus)


Status of the target for you to react upon and display user to appropriate UI (loading, errors, etc).

Swift interface of the class

public enum WPTTargetStatus {
    /// Service is not started.
    case notStarted
    /// Service or bluetooth is starting.
    case preparing
    /// Bluetooth is not supported on this device.
    case unsupported
    /// Bluetooth permission not granted for the app.
    /// Show an error to the user and navigate him to the app settings.
    /// ```
    /// let url = URL(string: UIApplicationOpenSettingsURLString)!
    ///, options: [:], completionHandler: nil)
    /// ```
    case unauthorized
    /// Bluetooth is turned off in the system.
    case bluetoothOff
    /// Error happened
    case startingFailed(e: Error)
    /// Bluetooth service turned on.
    case bluetoothOn
    /// Service is active
    case active
Last updated on Feb 01, 2024 (13:25) Edit on Github Send Feedback


Proximity Transfer for Apple