-
Dariusz Rybicki authoredDariusz Rybicki authored
Elixxir dApps Swift SDK
📖 Usage
Add ElixxirDAppsSDK
library as a dependency to your project using Swift Package Manager.
For usage examples, checkout included example iOS application.
▶️ 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()
▶️ Connecting to remote
Perform auth key negotiation with the given recipient to get the Connection
:
let client: Client = ...
let connection = try client.connect(
withAuthentication: false,
recipientContact: ...,
myIdentity: ...
)
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
...
}
▶️ Using rest-like API
Use RestlikeRequestSender
to perform rest-like requests:
let client: Client = ...
let connection: Connection = ...
let sendRestlike: RestlikeRequestSender = .live(authenticated: false)
let response = try sendRestlike(
clientId: client.getId(),
connectionId: connection.getId(),
request: ...
)
Pass true
for the authenticated
parameter if you want to perform authenticated requests.
🛠️ Development
Open ElixxirDAppsSDK.xcworkspace
in Xcode (≥13.4).