Skip to content
Snippets Groups Projects
Select Git revision
  • development
  • main default protected
  • integration
  • v1.1.5
  • v1.1.4
  • v1.1.3
  • v1.1.2
  • v1.1.1
  • v1.1.0
  • v1.0.0
10 results

elixxir-dapps-sdk-swift

  • Clone with SSH
  • Clone with HTTPS
  • Elixxir dApps Swift SDK

    Swift 5.6 platform iOS

    📖 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).

    Project structure

    ElixxirDAppsSDK [Xcode Workspace]
     ├─ elixxir-dapps-sdk-swift [Swift Package]
     |   └─ ElixxirDAppsSDK [Library]
     └─ Example [Xcode Project]
         ├─ ExampleApp (iOS) [iOS App Target]
         ├─ example-app [Swift Package]
         |   ├─ AppFeature [Library]
         |   └─ ...
         └─ example-app-icon [Swift Package] 
             ├─ ExampleAppIcon [Library]
             └─ example-app-icon-export [Executable]

    Build schemes

    • Use exlixxir-dapps-sdk-swift scheme to build the package with ElixxirDAppsSDK library.
    • Use ExampleApp (iOS) to build and run the example app.
    • Use example-app scheme to build and test the example app package with all contained libraries.
    • Use ExampleAppIcon scheme with macOS target to build and preview the example app icon.
    • Use example-app-icon-export scheme with macOS target to build and update the example app icon.
    • Use other schemes, like AppFeature, for building and testing individual libraries in isolation.

    📄 License

    Copyright © 2022 xx network SEZC

    License