Use MetaMask SDK with iOS
Import MetaMask SDK into your native iOS dapp to enable your users to easily connect with their MetaMask Mobile wallet.
Prerequisites
-
MetaMask Mobile version 7.6.0 or later installed on your target device (that is, a physical device or emulator). You can install MetaMask Mobile from the App Store or clone and compile MetaMask Mobile from source and build to your target device.
-
iOS version 14 or later. The SDK supports
ios-arm64
(iOS devices) andios-arm64-simulator
(M1 chip simulators). It currently doesn't supportios-ax86_64-simulator
(Intel chip simulators).
Steps
1. Install the SDK
- CocoaPods
- Swift Package Manager
To add the SDK as a CocoaPods dependency to your project, add the following entry to our Podfile:
pod "metamask-ios-sdk"
Run the following command:
pod install
To add the SDK as a Swift Package Manager (SPM) package to your project, in Xcode, select
File > Swift Packages > Add Package Dependency.
Enter the URL of the MetaMask iOS SDK repository: https://github.com/MetaMask/metamask-ios-sdk
.
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.3.0"
)
]
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 to MetaMask by adding the following code to your project file:
let appMetadata = AppMetadata(name: "Dub Dapp", url: "https://dubdapp.com")
@ObservedObject var metamaskSDK = MetaMaskSDK.shared(appMetadata)
metamaskSDK.connect()
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 methods
You can now call any JSON-RPC API method using metamaskSDK.request()
.
Example: Get chain ID
The following example gets the user's chain ID by calling
eth_chainId
.
let chainIdRequest = EthereumRequest(method: .ethChainId)
let chainId = await metamaskSDK.request(chainIdRequest)
Example: Get account balance
The following example gets the user's account balance by calling
eth_getBalance
.
// Create parameters.
let account = metamaskSDK.account
let parameters: [String] = [
// Account to check for balance.
account,
// "latest", "earliest", or "pending" (optional)
"latest"
]
// Create request.
let getBalanceRequest = EthereumRequest(
method: .ethGetBalance,
params: parameters
)
// Make request.
let accountBalance = await metamaskSDK.request(getBalanceRequest)