Skip to content
Snippets Groups Projects

Add basic usage examples

Merged Dariusz Rybicki requested to merge feature/basic-docs into main
1 file
+ 142
1
Compare changes
  • Side-by-side
  • Inline
+ 142
1
# elixxir-dapps-sdk-swift
# Elixxir dApps Swift SDK
![Swift 5.6](https://img.shields.io/badge/swift-5.6-orange.svg)
![Swift 5.6](https://img.shields.io/badge/swift-5.6-orange.svg)
![platform iOS](https://img.shields.io/badge/platform-iOS-blue.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
@@ -9,6 +9,147 @@ Add `ElixxirDAppsSDK` library as a dependency to your project using Swift Packag
For usage examples, checkout included example iOS application.
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
## 🛠 Development
Open `ElixxirDAppsSDK.xcworkspace` in Xcode (≥13.4).
Open `ElixxirDAppsSDK.xcworkspace` in Xcode (≥13.4).
Loading