Skip to main content
Version: 2.0 beta

Swift Client (iOS)

Swift implementation of WalletConnect v.2 protocol for native iOS applications.


Note: The Swift client is in Alpha and should only be used for testing.


  • iOS 13
  • XCode 13
  • Swift 5


Instantiate Client

let url = URL(string: "wss://")!
let options = WalletClientOptions(apiKey: String, name: String, isController: true, metadata: AppMetadata(name: String?, description: String?, url: String?, icons: [String]?), relayURL: url)
let client = WalletConnectClient(options: options)

Pair Clients

Pair client with a uri generated by the dapp.

let uri = "wc:..."
try! client.pair(uri: uri)

Approve Session

Sessions are always proposed by the Proposer client so Responder client needs either reject or approve a session proposal.

class ClientDelegate: WalletConnectClientDelegate {
func didReceive(sessionProposal: SessionType.Proposal) {
client.approve(proposal: proposal)


    func didReceive(sessionProposal: SessionType.Proposal) {
client.reject(proposal: proposal, reason: Reason)

Handle Delegate methods

    func didSettle(session: SessionType.Settled) {
// handle settled session
func didReceive(sessionProposal: SessionType.Proposal) {
// handle session proposal
func didReceive(sessionRequest: SessionRequest) {
// handle session request

JSON-RPC Payloads


You can parse JSON-RPC Requests received from "Requester" in didReceive(sessionRequest: SessionRequest) delegate function.

Request parameters can be type casted based on request method as below:

            let params = try! sessionRequest.request.params.get([EthSendTransaction].self)
            let jsonrpcResponse = JSONRPCResponse<AnyCodable>(id:, result: AnyCodable(responseParams))
client.respond(topic: sessionRequest.topic, response: jsonrpcResponse)

API Keys

For api keys look at API Keys.