BlockchainAppMaker Get a quote

Blog

Web3 iOS app development: libraries, wallets and App Store rules

A web3 iOS app reads from a blockchain, asks a wallet to sign transactions, and passes Apple's App Review. This guide covers the wallet models that work on iOS, the Swift and React Native libraries that are maintained in October 2026, how passkeys fit in, and the App Store rules for wallets, exchanges, mining and NFTs, quoted from Apple.

A phone wallet screen with a Connect button linked to a stack of layers: Swift app, Wallet SDK, Passkeys and Blockchain

The web3 dApp development guide covers the rest of the stack: contracts, indexing and hosting. This article covers only the iPhone app.

Two decisions to make first

Every web3 iOS app answers two questions before any code is written:

  • Who holds the keys? Either the user's own wallet app holds them (an external wallet such as MetaMask, Trust or Rainbow), or your app creates a wallet for each user (an embedded wallet).
  • Native Swift or cross-platform? Swift gives full access to iOS features such as the Secure Enclave. React Native with Expo shares one TypeScript codebase with Android and with web libraries such as viem.

The choice of who holds the keys matters more on iOS than on Android, because talking to a separate wallet app is harder on an iPhone. iOS suspends apps in the background, and it has no system dialog for choosing between apps that handle the same link.

External wallets: Reown AppKit

WalletConnect is the standard way for an iOS app to connect to a wallet app that the user already has. Reown, the company behind WalletConnect, maintains its SDKs. The old WalletConnectSwiftV2 repository is archived, and its replacement is reown-swift, which contains AppKit for apps and WalletKit for wallets. The latest reown-swift release is 2.4.0, from 14 September 2026.

A native AppKit setup, from Reown's iOS documentation, has these steps:

  1. Create a project in the Reown dashboard to get a project ID.
  2. Add https://github.com/reown-com/reown-swift with Swift Package Manager and select the AppKit product. Reown says its CocoaPods support may be deprecated soon.
  3. Call AppKit.configure(projectId:metadata:) at launch. By default the session requests eth_sendTransaction, personal_sign and eth_signTypedData on Ethereum mainnet (eip155:1), and you pass your own session parameters for other chains.
  4. Show the connect modal with AppKitButton in SwiftUI, or with AppKit.present().
  5. List the URL schemes of the wallets you want to detect (metamask, trust, rainbow and so on) under LSApplicationQueriesSchemes in Info.plist. iOS only lets an app check for URL schemes that the app declared in advance. A wallet that is missing from the list is not detected until you ship a new build.

Two wallets have SDK problems. Reown's documentation warns that the new Base Wallet (formerly Coinbase Wallet) does not support the Coinbase Mobile Wallet SDK, so AppKit's Coinbase connector does not work with Base Wallet. MetaMask's separate iOS SDK repository is archived, and its last release was in October 2024, so connect MetaMask through WalletConnect instead.

Every external-wallet action is an app switch: the user leaves your app, approves in the wallet, and comes back. A user who has no wallet app has to install one before the first step.

Embedded wallets

An embedded wallet is created inside your app when the user signs in with email, a social account or a passkey. No second app is involved, so there is no app switching. The wallet provider stores the key with its own scheme, such as multi-party computation (MPC), and providers differ in security, custody and recovery.

Three providers ship a native Swift SDK with a release in the last two months:

SDKLatest releaseNotes from the vendor's docs
Privy iOS2.17.0, 15 Oct 2026Needs iOS 17 and Xcode 16. Shipped as a binary framework with no source code. Privy's docs still call the 2.x SDK beta.
Dynamic Swift SDK1.8.1, 27 Oct 2026Needs iOS 15. Supports EVM chains and Solana, with social, email, SMS and passkey login.
Web3Auth Swift SDK13.0.0, 30 Sep 2026Social login with OAuth providers such as Google and Discord. Version 13 changed the session model, and the README has a migration list.

An embedded wallet usually means your app creates user accounts, and two App Review rules follow from that. Guideline 5.1.1 says: "If your app supports account creation, you must also offer account deletion within the app." Guideline 4.8 covers apps that use a third-party login, such as Google Sign-In, for the user's primary account. Such an app "must also offer as an equivalent option another login service" that collects only name and email, lets users keep their email private, and does not track them for ads without consent. Sign in with Apple meets those conditions. The extra login is not required if your app uses only your company's own sign-in system.

Passkeys and wallet keys

A passkey can unlock a wallet with Face ID instead of a seed phrase. The problem is the key type. Apple's Secure Enclave documentation says it "works only with NIST P-256 elliptic curve keys", while Ethereum accounts sign with secp256k1 and Solana accounts sign with ed25519. A passkey therefore cannot sign an ordinary Ethereum or Solana transaction directly.

There are two ways around this:

  • Smart accounts that verify P-256. EIP-7951 added a precompile at address 0x100 that verifies secp256r1 (P-256) signatures. It went live on Ethereum mainnet with the Fusaka upgrade on 3 December 2025. A smart contract account can now check a passkey signature on-chain at a fixed gas cost, and the EIP lists the Apple Secure Enclave and WebAuthn authenticators among the hardware that uses P-256.
  • Passkey as a lock on another key. The app encrypts the wallet's own signing key and stores it in the passkey, and the passkey unlocks it when the user signs. Solana Mobile's iOS guide describes this for ed25519 keys and notes the cost: the key is exposed to the app when it is retrieved for signing.

Swift web3 libraries and their maintenance status

The dates below come from each GitHub repository on 30 October 2026.

LibraryChainLatest release or tagStatus
argentlabs/web3.swiftEthereum and EVMTag 2.0.0, 19 Aug 2026Maintained. Swift Package Manager only, since CocoaPods support was removed in August 2026.
web3swiftEthereum and EVM3.3.2, 30 Sep 2025Last release over a year ago.
chainnodesorg/Web3.swift (formerly Boilertalk)Ethereum and EVM0.8.8, 2 May 2024No commits since August 2024. Treat it as unmaintained.
Trust Wallet CoreMany chains: key generation, addresses and signing4.8.7, 28 Oct 2026Maintained. Does not talk to nodes, so pair it with an RPC client.
p2p-org/solana-swiftSolanaTag 5.0.0, Jan 2024Last code change merged in April 2025.
metaplex-foundation/Solana.SwiftSolana2.0.2, Oct 2022Unmaintained.

The web3.swift README warns that its sample EthereumKeyLocalStorage class "should not be used in production code". If your app holds keys itself, write a key storage class backed by the Keychain, and have the key handling reviewed as you would for any crypto wallet app.

Solana on iOS

On Android, Solana apps connect to wallets through the Mobile Wallet Adapter, which does not work on iOS. Solana Mobile's iOS guide states that "Mobile Wallet Adapter is not available on iOS, and deep links are not a viable replacement for it." The adapter needs a persistent connection between the app and the wallet, and iOS suspends apps in the background.

Solana Mobile's guide gives three options for iOS instead:

  • An embedded wallet from a wallet-as-a-service provider, which needs no app switching.
  • A passkey that unlocks an encrypted ed25519 key. The key is exposed to the app each time it is retrieved for signing.
  • For web apps in Safari, a wallet that ships a Safari Web Extension. Standard Solana wallet adapter libraries detect such an extension.

Deep links to a single wallet still work for simple one-off actions. Solana Mobile notes that each request causes a full app switch, the response comes back through your AppDelegate rather than to the code that sent it, and Apple may reject an app that relies heavily on deep links.

React Native and Expo

React Native lets an iOS app use the same TypeScript web3 libraries as a web dApp. viem, the TypeScript Ethereum library used by wagmi, had its latest release on 28 October 2026. Wallet connection has two main paths:

  • Reown AppKit for React Native. Reown's install guide covers EVM chains through an Ethers or wagmi adapter, plus Solana and Bitcoin adapters. It has Expo install commands, and the Coinbase connector needs Expo Prebuild because it does not work in Expo Go.
  • Embedded wallet SDKs. Privy publishes an Expo package (@privy-io/expo) that uses expo-apple-authentication for Sign in with Apple and react-native-passkeys for passkey login. thirdweb's mobile page lists a React Native SDK and no Swift SDK.

React Native does not remove the iOS-specific setup. Wallet detection still needs the LSApplicationQueriesSchemes list, which Expo sets in app.json under ios.infoPlist, and anything that needs the Secure Enclave goes through a native module.

App Store rules for crypto apps

Apple's App Review Guidelines were last updated on 16 October 2026. The rules below are quoted from that page.

Guideline 3.1.5: cryptocurrencies

  • Wallets: "Apps may facilitate virtual currency storage, provided they are offered by developers enrolled as an organization." An individual developer account cannot publish a wallet.
  • Mining: "Apps may not mine for cryptocurrencies unless the processing is performed off device (such as cloud-based mining)." Guideline 2.4.2 adds that apps and their ads "may not run unrelated background processes, such as cryptocurrency mining."
  • Exchanges: "Apps may facilitate transactions or transmissions of cryptocurrency on an approved exchange, provided they are offered only in countries or regions where the app has appropriate licensing and permissions to provide a cryptocurrency exchange." In App Store Connect, limit the app's availability to those countries.
  • ICOs and derivatives: apps for ICOs, "cryptocurrency futures trading, and other crypto-securities or quasi-securities trading must come from established banks, securities firms, futures commission merchants ("FCM"), or other approved financial institutions."
  • Rewards: "Cryptocurrency apps may not offer currency for completing tasks, such as downloading other apps, encouraging other users to download, posting to social networks, etc."

Guideline 3.1.1: NFTs and in-app purchase

Crypto cannot replace in-app purchase for digital features. Guideline 3.1.1 says: "Apps may not use their own mechanisms to unlock content or functionality, such as license keys, augmented reality markers, QR codes, cryptocurrencies and cryptocurrency wallets, etc."

The NFT paragraph of guideline 3.1.1 has three parts:

  • "Apps may use in-app purchase to sell and sell services related to non-fungible tokens (NFTs), such as minting, listing, and transferring."
  • "Apps may allow users to view their own NFTs, provided that NFT ownership does not unlock features or functionality within the app."
  • Apps may let users browse NFT collections owned by others. Outside the United States storefront, those apps "may not include buttons, external links, or other calls to action that direct customers to purchasing mechanisms other than in-app purchase."

An NFT that works as a game item or a membership pass inside the app conflicts with the rule that NFT ownership must not unlock features. For an NFT marketplace app, Apple names minting, listing and transferring as services the app can sell through in-app purchase.

Checklist before you submit

  1. Enroll in the Apple Developer Program as an organization if the app stores crypto.
  2. Limit an exchange or trading app to the countries where you hold the licences.
  3. Offer account deletion inside the app if users can create accounts.
  4. Offer Sign in with Apple, or another login that meets guideline 4.8, next to Google or other social login.
  5. Check that no NFT or token unlocks a feature, and that digital goods are sold through in-app purchase.
  6. Remove any token reward for downloads, referrals or social posts.
  7. Check the last release date of every web3 library in your package list.
  8. Test wallet connection on a physical iPhone with the wallets listed in LSApplicationQueriesSchemes installed, and with none installed.

Frequently asked questions

Does Apple allow crypto wallet apps on the App Store?

Yes. Guideline 3.1.5 allows apps that store virtual currency, provided the developer is enrolled in the Apple Developer Program as an organization, not as an individual.

What is the best Swift library for Ethereum?

Of the Swift Ethereum libraries compared in this article, argentlabs/web3.swift has the most recent version, a 2.0.0 tag from August 2026. web3swift's last release was in September 2025, and chainnodesorg/Web3.swift has had no commits since August 2024.

How do I connect an iOS app to MetaMask or other wallets?

Use Reown AppKit, the WalletConnect SDK, which is in the reown-swift package for native apps and in a separate package for React Native. MetaMask's own iOS SDK repository is archived.

Does the Solana Mobile Wallet Adapter work on iOS?

No. Solana Mobile says the adapter is not available on iOS because it needs a persistent connection that iOS does not allow for apps in the background. Its guide suggests embedded wallets, passkeys or a Safari Web Extension instead.

Can an iOS app sell or unlock features with NFTs?

An app can sell NFT services such as minting, listing and transferring through in-app purchase. Guideline 3.1.1 does not allow NFT ownership, crypto or a crypto wallet to unlock features in the app.

Can a passkey sign Ethereum transactions?

Not for a normal account, because the Secure Enclave uses P-256 keys and Ethereum accounts use secp256k1. A smart contract account can verify passkey signatures through the P-256 precompile that EIP-7951 added to Ethereum mainnet in December 2025.