Skip to main content
The release notes for our Swift SDK.
On an older version of the SDK? Check out our migration guides to help you upgrade:
- V2 Migration Guide

Added

  • getTransactions(_:) method on EmbeddedWallet for fetching a wallet’s transaction history, with cursor-based pagination via GetTransactionsParams and TransactionsPage.
  • transactionError case to PrivyErrorCode for handling transaction history errors.

Added

  • getAuthStateWithoutRefresh() method on the Privy protocol for reading auth state synchronously in contexts where triggering a session refresh is unsafe, such as background tasks and app extensions.
  • sessionExpired case to PrivyErrorCode for handling expired session errors.
  • Promotes 2.12.0-beta release to GA.

Added

  • Telegram OAuth login.
  • Native wallet signing with CryptoKit P256, replacing the webview signer.
  • Native /wallets/authenticate call with HPKE decryption.

Added

  • Support for binary payloads in generateAuthorizationSignature.

Fixed

  • Remove stray logger error call.
  • Allow Privy sessions to be refreshed when the app is backgrounded.

Added

  • Added addSigners, addSigner, removeSigner, and removeAllSigners methods on EmbeddedWallet for managing wallet signers directly from the client

Fixed

  • Added more descriptive error logging in wallet flows.

Fixed

  • Circular dependency during SDK initialization.

Added

  • Added support for transaction MFA with SMS, TOTP, and passkeys, including enrollment, verification, and unenrollment
  • Added automatic MFA prompting via a delegate, so the SDK can prompt for MFA when wallet operations require it
  • Added support for embedded wallet migration onto TEE execution, automatically or manually
  • Added OAuth account linking
  • Added generateAuthorizationSignature to the user object, enabling client-side signing of requests to the Privy API with authorization keys

Added

  • Add account unlinking for email, phone number, SIWE, SIWS, and OAuth

Changed

  • Link methods now return PrivyUser instead of Void:
    • func privy.email.linkWithCode(_ code: String, sentTo email: String) async throws -> PrivyUser
    • func privy.sms.linkWithCode(_ code: String, sentTo phoneNumber: String) async throws -> PrivyUser
    • func privy.siwe.link(message: String, signature: String, params: SiweMessageParams, metadata: WalletLoginMetadata?) async throws -> PrivyUser
    • func privy.siws.link(message: String, signature: String, metadata: WalletLoginMetadata?) async throws -> PrivyUser
    • func privy.passkey.link(relyingParty: String, displayName: String?) async throws -> PrivyUser
  • Unlink methods now return PrivyUser instead of Void:
    • func privy.email.unlink(email: String) async throws -> PrivyUser
    • func privy.sms.unlink(phoneNumber: String) async throws -> PrivyUser
    • func privy.siwe.unlink(address: String) async throws -> PrivyUser
    • func privy.siws.unlink(address: String) async throws -> PrivyUser
    • func privy.passkey.unlink(credentialId: String) async throws -> PrivyUser
    • func privy.oAuth.unlink(with: OAuthProvider, subject: String) async throws -> PrivyUser

Added

  • Expose MFA methods on the PrivyUser object

Added

  • Adds support for Passkey login, signup, account linking and unlinking

Added

  • Adds support for signTransaction to the Solana provider
  • Adds support for signAndSendTransaction to the Solana provider
  • Adds support for login and linking through Sign in with Solana
  • Adds support for unlinking an external Solana wallet

Deprecated

The following methods have been deprecated in favor of new names, which have identical functionality:
  • .siwe.generateSiweMessage.siwe.generateMessage
  • .siwe.loginWithSiwe.siwe.login
  • .siwe.linkWithSiwe.siwe.link

Changed

  • Minimum iOS version is now 17.0
  • Minimum macOS version is now 14.0
  • Bumps internal dependencies to latest versions

Fixed

  • Add some additional guard rails to webview timeout issues

Fixed

  • Adds some safeguards to flows to prevent timeouts

Fixed

  • Fixes a bug related to wallet creation

Added

  • Adds the ability to specify a timeout when creating a wallet

Changed

  • Throw PrivyError when authenticate network call fails
  • Make APIError a public enum

Added

  • Adds support for updating a user’s email address via privy.email.updateWithCode(_:sentTo:)
  • Adds support for updating a user’s phone number via privy.sms.updateWithCode(_:sentTo:)
  • Adds support for linking a phone number via privy.sms.linkWithCode(_:sentTo:)

Added

  • func getUser() async -> PrivyUser? - awaits ready under the hood, then returns user if authenticated

Deprecated

  • Privy.user - Use func getUser() async -> PrivyUser? instead.

Added

  • func getAuthState() async -> AuthState - awaits ready under the hood, then returns most up to date AuthState

Deprecated

  • func awaitReady() async in favor of the newly added func getAuthState() async -> AuthState

Added

  • Adds a typed form to EmbeddedEthereumWalletProvider.request for the following methods: personal_sign, secp256k1_sign, eth_sign, eth_signTypedData_v4, eth_signTransaction, eth_sendTransaction.

Important

This is a major release of the Privy Swift SDK. It introduces a new architecture that is more flexible and easier to use. Please make sure to read the migration guide to better understand the changes and how to migrate your code.

Added

  • Adds Swift 6 support.
  • Adds a new case to AuthState, authenticatedUnverified.
  • Adds a new method to Privy, onNetworkRestored.
  • Adds a new method to Privy, awaitReady.
  • Adds support for the secp256k1_sign ethereum RPC.
  • Adds support for HD wallets on Solana.
  • Adds support for social login via Discord.

Changed

  • Distributes as a binary framework with library evolution.
  • AuthState.authenticated now contains a PrivyUser object instead of the session struct.

Removed

  • Removed Factory as a dependency.

Improvements

  • Add support for the secp256k1_sign ethereum RPC
  • Add support for HD wallets on Solana

Improvements

  • Adds Discord support for social login
  • Swift 6 support

Improvements

  • Support Swift binary evolution

Fixed

  • Misc bug fixes

Added

  • Swift 6.1 Compiler Support

Fixed

  • Misc bug fixes

Fixed

  • Misc bug fixes

Fixed

  • Misc bug fixes

Fixed

  • Misc bug fixes

Fixed

  • Fixes a bug related to refreshing the user’s session when using custom auth.
Breaking Changes
  • App client ID required at initialization
  • PrivySdk.initialize now throws if called more than once
  • new Privy.awaitReady async method
  • AuthState now contains the PrivyUser object instead of the raw session struct

Improvements

  • Add support for the secp256k1_sign ethereum RPC

Improvements

  • Add support for identity tokens and expose the AuthSession.identityToken property

Improvements

  • Adds some additional logic to reinitialize secure context after app is backgrounded
  • Automatically connects wallets when making rpc requests

Improvements

  • Adds PrivyLoggingConfig that allows you to specify PrivyLogLevel, and optionally, a logMessage callback if you want to manage logging

Improvements

  • Enhances logging around WebView and Session

Improvements

  • Set log level at init
  • Add enhanced logging throughout SDK

Improvements

  • Add some additional debug logs

Improvements

  • Bump timeouts to 60 seconds or higher

Improvements

  • Bump timeouts on create wallet flow
  • Reset wallet state after errors in create wallet flow

Improvements

  • Improved error handling for LoginWithEmail.linkWithCode(code:, sentTo:)

Bug Fixes

  • Fix for macOS and macOS Catalyst xcframework

Improvements

  • Support for macOS and macOS Catalyst

Improvements

  • Twitter/X Login
  • EthereumEmbeddedWalletProvider for Ethereum wallet requests
  • SolanaEmbeddedWalletProvider for Solana wallet requests
  • Solana sign message support
Breaking Changes
  • Deprecated EmbeddedWalletProvider. This method’s name sounds chain agnostic, but the provider is Ethereum specific.

Bug Fixes

  • Fixes a bug in the connect wallet flow

Improvements

  • Create wallet by specifying chain type (Ethereum or Solana)
  • New connect wallet API that doesn’t require passing “retryOnFailure”
Breaking Changes
  • Deprecated Create wallet API (Ethereum only)
  • Deprecated Connect wallet API that requires developer to specify retryOnFailure
  • Deprecated Recover wallet API (now handled automatically under the hood)

Improvements

  • Lower minimum support to iOS 16

Improvements

  • Add support for Privy RPC URLs
  • Support native Sign in with Apple

Improvements

  • Link email
  • Link wallet

Improvements

  • Makes some core foundational changes that better handles race conditions

Improvements

  • Introduces “appClientId” in Privy config initializer

Bug Fixes

  • Bug fix related to awaiting embedded wallet ready state

Improvements

  • Introduces login with Google

Bug Fixes

  • Fixed a bug where user object wasn’t properly updated after auth refresh

Bug Fixes

  • Fix a bug in embedded wallets that prevented sending rpc requests with additional wallets

Improvements

  • Drops the requirement that embeddedWalletState must be disconnected before calling privy.embeddedWallet.connectWallet()

Improvements

  • Bug fix and edge case handling when calling logout
  • Updates privy.embeddedWallet.connectWallet() such that it no ops if wallet is already connected

Improvements

  • The official launch of our flagship Swift SDK

Improvements

  • Base Sepolia chain (84532) added to supported chains

Improvements

  • Login with SIWE (Sign in with Ethereum)

Improvements

  • Login with email
  • Login with SMS
  • Privy session restoration on SDK init

Improvements

  • Improved error handling and guarding during wallet creation

Improvements

  • Interface updates for simpler embedded wallet interactions
  • Embedded wallets now auto-connect after successful login
  • Separate callbacks for authState and embeddedWalletState
  • Improved error messages

Improvements

  • Now possible to create and send requests on behalf of multiple embedded wallets