-
Ahmed Shehata authoredAhmed Shehata authored
Elixxir dApps Swift SDK
📱 Demo
Refer to this demo to see an example of how to build an app with the SDK to send E2E
messages and send RestLike
messsage.
Also you can checkout included example iOS application.
📖 Documentation
You can find full documentation with step by step guide here
🚀 Quick Start
Add ElixxirDAppsSDK
library as a dependency to your project using Swift Package Manager.
▶️ Instantiating client
Create a new client and store it on disk:
let downloadNDF: NDFDownloader = .live
let createClient: ClientCreator = .live
try createClient(
directoryURL: ...,
ndf: try downloadNDF(.mainnet),
password: ...
)
Load existing client from disk:
let loadClient: ClientLoader = .live
let client = try loadClient(
directoryURL: ...,
password: ...
)
You can also use a convenient ClientStorage
wrapper to manage a client stored on disk:
let storage: ClientStorage = .live(
passwordStorage: .init(
save: { password in
// securely save provided client's password
},
load: {
// load securely stored client's password
}
)
)
let client: Client
if storage.hasStoredClient() {
client = try storage.loadClient()
} else {
client = try storage.createClient()
}
Check out included example iOS application for the PasswordStorage
implementation that uses the iOS keychain.
▶️ Connecting to the network
Start network follower:
let client: Client = ...
try client.networkFollower.start(timeoutMS: 10_000)
Wait until connected:
let client: Client = ...
let isNetworkHealthy = client.waitForNetwork(timeoutMS: 30_000)
▶️ Making a new identity
Use the client to make a new identity:
let client: Client = ...
let myIdentity = try client.makeIdentity()
▶️ Create new E2E client
let client: Client = ...
let clientE2E = try ClientE2ELogin.live(with: client)
▶️ Connecting to remote
Perform auth key negotiation with the given recipient to get the Connection
:
let client: Client = ...
let clientE2E: ClientE2E = ...
let connection = try client.connect(
withAuthentication: false,
recipientContact: ...,
e2eId: clientE2E.getId()
)
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 connection: Connection = ...
let report = try connection.send(
messageType: 1,
payload: ...
)
Check if the round succeeded:
let client: Client = ...
try client.waitForDelivery(roundList: ..., timeoutMS: 30_000) { result in
switch result {
case .delivered(let roundResults):
...
case .notDelivered(let timedOut):
...
}
}
▶️ Receiving messages
Use connection's message listener to receive messages from partner:
let connection: Connection = ...
connection.listen(messageType: 1) { message in
...
}