POOLS Chain Documentation
  • Introduction
    • Version
    • Purpose: Blockchain & AI
    • Mission
    • Vision
  • MARKET OVERVIEW
    • Blockchain Market: Current State
    • Blockchain Market: Issues
    • Pools Chain Solutions
  • POOLS CHAIN OVERVIEW
    • Pools chain: Definition & Main functions
    • Features and Utilities
    • Compatible with EVM
    • Abilibitiy of Extension
    • Interoperable
    • Artificial Intelligence
    • Ecosystem
    • Dapps
      • Pools Wallet
      • AIHomes
      • Friendify GPT
      • More Dapps
      • Pools Phone
        • Pools Phone System
        • Pools Phone Authentication
  • Startmobis
  • TECHNICAL ARCHITECTURE
    • Proof-of-Stake (PoS)
    • Node structure
    • Security & Encryption mechanisms
    • Security and Finality
    • Reward
    • Validator Quorum
    • Staking and Governance
    • Staking on POOLS
    • Rewarding
    • Slashing
    • Double Sign
    • Governance Parameters
    • Smart contract language
      • Hardhat: Deploy ERC20 Contract
      • Truffle: Deploy ERC20 Contract
  • Develop smart contracts
  • Integrated smart contracts
  • Smart Contract Verification
    • Overview
    • How to verify your smart contracts on Pools Chain
  • Smart contract
    • Smart Contract Language
      • Hardhat
      • Truffle
    • Smart Contract Development
    • Smart Contract A.I Integration
    • Smart Contract Verification
      • Overview
      • How to verify your smart contracts on Pools Chain
  • TOKENOMIC
    • POOLS Coin: Role & Use case
    • Coin Distribution
    • Incentive Structure
  • ROADMAP & DEVELOPMENT PLAN
    • Pools Chain: Development Milestone
      • A playground for developers
      • Build the Infrastructure
      • Partnership
      • Marketing & PR
    • Future Plans
  • TEAM & PARTNERS
    • Core Team
    • Advisor & Partnership
  • NOTICE & DISCLAIMER
    • Legal Notices & Warnings
    • Regulatory Compliance & Transparency
    • Responsibilities & Rights
      • Pools Chain
      • Users
  • BUILT FOR DEVELOPERS
    • Pools SDK
      • Supported platforms
        • JavaScript
          • React
          • Pure JavaScript
          • Other web frameworks
          • React Native
          • Node.js
          • Electron
        • Mobile
          • Native IOS
    • Contract deploy
    • Blockchain Explorer
  • CONTACT US
    • Summary
    • Contact for further info
Powered by GitBook
On this page
  1. BUILT FOR DEVELOPERS
  2. Pools SDK
  3. Supported platforms
  4. Mobile

Native IOS

You can import Pools SDK into your native iOS dapp to enable your users to easily connect with Pools Chain and Pools Wallet

Steps​

1. Install the SDK​

To add the SDK as a Swift Package Manager (SPM) package to your project, in Xcode, select File > Swift Packages > Add Package Dependency.

Alternatively, you can add the URL directly in your project's package file:

dependencies: [
    .package(
        url: "https://github.com/MetaMask/metamask-ios-sdk",
        from: "0.1.0"
    )
]

NOTE

The SDK supports ios-arm64 (iOS devices) and ios-arm64-simulator (M1 chip simulators). It currently doesn't support ios-ax86_64-simulator (Intel chip simulators).

2. Import the SDK​

Import the SDK by adding the following line to the top of your project file:

import metamask_ios_sdk

3. Connect your dapp​

Connect your dapp by adding the following code to your project file:

@ObservedObject var ethereum = MetaMaskSDK.shared.ethereum

let dapp = Dapp(name: "Dub Dapp", url: "https://dubdapp.com")

// This is the same as calling eth_requestAccounts
ethereum.connect(dapp)

By default, MetaMask logs three SDK events: connectionRequest, connected, and disconnected. This allows MetaMask to monitor any SDK connection issues. To disable this, set MetaMaskSDK.shared.enableDebug = false or ethereum.enableDebug = false.

4. Call provider methods​

You can now call any provider API method.

The SDK uses Combine to publish Ethereum events, so you need to define an AnyCancellable storage by adding the following line to your project file:

@State private var cancellables: Set<AnyCancellable> = []

The following examples use the window.ethereum.request(args) provider API method to call various RPC API methods.

Example: Get chain ID​

The following example gets the user's chain ID by calling eth_chainId.

@State var chainId: String?

let chainIdRequest = EthereumRequest(method: .ethChainId)

ethereum.request(chainIdRequest)?.sink(receiveCompletion: { completion in
    switch completion {
    case .failure(let error):
        print("\(error.localizedDescription)")
    default: break
    }
}, receiveValue: { result in
    self.chainId = result
})
.store(in: &cancellables)

Example: Get account balance​

The following example gets the user's account balance by calling eth_getBalance.

@State var balance: String?

// Create parameters
let parameters: [String] = [
    ethereum.selectedAddress, // address to check for balance
    "latest" // "latest", "earliest" or "pending" (optional)
  ]

// Create request
let getBalanceRequest = EthereumRequest(
    method: .ethGetBalance,
    params: parameters)

// Make request
ethereum.request(getBalanceRequest)?.sink(receiveCompletion: { completion in
    switch completion {
    case .failure(let error):
        print("\(error.localizedDescription)")
    default: break
    }
}, receiveValue: { result in
    self.balance = result
})
.store(in: &cancellables)

Example: Send transaction​

The following examples send a transaction by calling eth_sendTransaction.

  • Use a dictionary

  • Use a struct

If your request parameters make up a simple dictionary of string key-value pairs, you can use the dictionary directly. Note that Any or even AnyHashable types aren't supported, since the type must be explicitly known.

// Create parameters
let parameters: [String: String] = [
    "to": "0x...", // receiver address
    "from": ethereum.selectedAddress, // sender address
    "value": "0x..." // amount
  ]

// Create request
let transactionRequest = EthereumRequest(
    method: .ethSendTransaction,
    params: [parameters] // eth_sendTransaction expects an array parameters object
    )

// Make a transaction request
ethereum.request(transactionRequest)?.sink(receiveCompletion: { completion in
    switch completion {
    case .failure(let error):
        print("\(error.localizedDescription)")
    default: break
    }
}, receiveValue: { result in
    print(result)
})
.store(in: &cancellables)
PreviousMobileNextContract deploy

Last updated 1 year ago