Skip to content
Snippets Groups Projects
Commit 182f0bac authored by Ahmed Shehata's avatar Ahmed Shehata
Browse files

Merge branch 'feature/basic-docs' into 'main'

Add basic usage examples

See merge request elixxir/elixxir-dapps-sdk-swift!4
parents 58f2ed2d 57d1ed3a
No related branches found
No related tags found
1 merge request!4Add basic usage examples
# elixxir-dapps-sdk-swift
# Elixxir dApps Swift SDK
![Swift 5.6](https://img.shields.io/badge/swift-5.6-orange.svg)
![platform iOS](https://img.shields.io/badge/platform-iOS-blue.svg)
......@@ -9,6 +9,147 @@ Add `ElixxirDAppsSDK` library as a dependency to your project using Swift Packag
For usage examples, checkout included example iOS application.
### ▶️ Instantiating client
Create a new client and store it on disk:
```swift
let downloadNDF: NDFDownloader = .live
let createClient: ClientCreator = .live
try createClient(
directoryURL: ...,
ndf: try downloadNDF(.mainnet),
password: ...
)
```
Load existing client from disk:
```swift
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:
```swift
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:
```swift
let client: Client = ...
let myIdentity = try client.makeIdentity()
```
### ▶️ Connecting to remote
Perform auth key negotiation with the given recipient to get the `Connection`:
```swift
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:
```swift
let connection: Connection = ...
let report = try connection.send(
messageType: 1,
payload: ...
)
```
Check if the round succeeded:
```swift
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:
```swift
let connection: Connection = ...
connection.listen(messageType: 1) { message in
...
}
```
### ▶️ Using rest-like API
Use `RestlikeRequestSender` to perform rest-like requests:
```swift
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).
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment