Skip to content
Snippets Groups Projects

XXClient Quick Start Guide

Add XXClient library as a dependency to your project using Swift Package Manager.

▶️ Instantiating cMix

You can use a convenient CMixManager wrapper to manage cMix stored on disk:

let cMixManager: CMixManager = .live(
  passwordStorage: .init(
    save: { password in
      // securely save provided password
    },
    load: {
      // load securely stored password
    }
  )
)

let cMix: CMix
if cMixManager.hasStorage() {
  cMix = try cMixManager.load()
} else {
  cMix = try cMixManager.create()
}

Check out included example iOS application for the PasswordStorage implementation that uses the iOS keychain.

▶️ Connecting to the network

Start network follower:

try cMix.startNetworkFollower(timeoutMS: 10_000)

Wait until connected:

let isNetworkHealthy = try cMix.waitForNetwork(timeoutMS: 30_000)

▶️ Making a new reception identity

Use the cMix to make a new reception identity:

let myIdentity = try cMix.makeReceptionIdentity()

▶️ Create new E2E

let login: Login = .live
let e2e = try login(
  cMixId: cMix.getId(),
  identity: myIdentity
)

▶️ Connecting to remote

Perform auth key negotiation with the given recipient to get the Connection:

let connection = try cMix.connect(
  withAuthentication: false,
  e2eId: e2e.getId(),
  recipientContact: ...
)

Pass true for the withAuthentication parameter if you want to prove id ownership to remote as well.

▶️ Sending messages

Send a message to the connection's partner:

let sendReport = try connection.send(
  messageType: 1,
  payload: ...
)

Check if the round succeeded:

try cMix.waitForRoundResult(
  roundList: try sendReport.encode(),
  timeoutMS: 30_000,
  callback: .init { result in
    switch result {
    case .delivered(let roundResults):
      ...
    case .notDelivered(let timedOut):
      ...
    }
  }
)

▶️ Receiving messages

Use connection's message listener to receive messages from partner:

try connection.registerListener(
  messageType: 1,
  listener: .init { message in
    ...
  }
)