Sonar icon indicating copy to clipboard operation
Sonar copied to clipboard

Apple's radar communication in Swift

Sonar

An interface to create radars on Apple's bug tracker and Open Radar frictionless from swift.

Example

Login

let openRadar = Sonar(service: .openRadar(token: "abcdefg"))
openRadar.login(
    getTwoFactorCode: { _ in fatalError("OpenRadar doesn't support 2 factor" })
{ result in
    guard case let .success = result else {
        return
    }

    print("Logged in!")
}

Create radar

let radar = Radar(
    classification: .feature, product: .bugReporter, reproducibility: .always,
    title: "Add REST API to Radar", description: "Add REST API to Radar", steps: "N/A",
    expected: "Radar to have a REST API available", actual: "API not provided",
    configuration: "N/A", version: "Any", notes: "N/A", attachments: []
)

let openRadar = Sonar(service: .openRadar(token: "abcdefg"))
openRadar.create(radar: radar) { result in
    // Check to see if the request succeeded
}

Login and Create radar on the same call

let radar = Radar(
    classification: .feature, product: .bugReporter, reproducibility: .always,
    title: "Add REST API to Radar", description: "Add REST API to Radar", steps: "N/A",
    expected: "Radar to have a REST API available", actual: "API not provided",
    configuration: "N/A", version: "Any", notes: "N/A", attachments: []
)

let appleRadar = Sonar(service: .appleRadar(appleID: "a", password: "b"))
appleRadar.loginThenCreate(
    radar: radar,
    getTwoFactorCode: { closure in
        let code = // Somehow get 2 factor auth code for user
        closure(code)
    })
{ result in
    switch result {
    case .success(let value):
        print(value) // This is the radar ID!
    case .failure(let error):
        print(error)
    }
}