README.md

June 5, 2025 ยท View on GitHub


App Attest

capacitor-app-attest

Ionic Capacitor plugin for App Attest from Apple


Buy me a coffee

Maintainers

MaintainerGitHubSocialLinkedIn
Luan Freitas (ludufre)ludufre@ludufreLuan Freitas

Installation

npm install capacitor-app-attest
npx cap sync

# or using pnpm
pnpm install capacitor-app-attest
npx cap sync

Add App Attest capability to your iOS project in Xcode.

Examples

Example App | Example Backend

Screenshot 1 Screenshot 2 Screenshot 3

Credits

This plugin is based on the App Attest feature from Apple, which provides a way to attest the integrity of your app and its interactions with your backend. WWDC 2021 session 10244 provides a good overview of how to use it.

Backend validation example in ./example-backend is based on the node-app-attest-example (@uebelack).

API

isSupported()

isSupported() => Promise<{ isSupported: boolean; }>

Checks if App Attest is supported on the device

Returns: Promise<{ isSupported: boolean; }>


generateKey()

generateKey() => Promise<{ keyId: string; }>

Generates a new key for App Attest

Returns: Promise<{ keyId: string; }>


attestKey(...)

attestKey(options: { keyId: string; challenge: string; }) => Promise<{ attestation: string; keyId: string; challenge: string; }>

Attests a key using a challenge

ParamTypeDescription
options{ keyId: string; challenge: string; }- Object containing the keyId and challenge.

Returns: Promise<{ attestation: string; keyId: string; challenge: string; }>


generateAssertion(...)

generateAssertion(options: { keyId: string; payload: string; }) => Promise<{ assertion: string; keyId: string; }>

Generates an assertion for a payload

ParamTypeDescription
options{ keyId: string; payload: string; }- Object containing the keyId and payload

Returns: Promise<{ assertion: string; keyId: string; }>


storeKeyId(...)

storeKeyId(options: { keyId: string; }) => Promise<{ success: boolean; }>

Stores the keyId locally in UserDefaults

ParamTypeDescription
options{ keyId: string; }- Object containing the keyId to store.

Returns: Promise<{ success: boolean; }>


getStoredKeyId()

getStoredKeyId() => Promise<{ keyId: string | null; hasStoredKey: boolean; }>

Retrieves the stored keyId locally

Returns: Promise<{ keyId: string | null; hasStoredKey: boolean; }>


clearStoredKeyId()

clearStoredKeyId() => Promise<{ success: boolean; }>

Removes the stored keyId

Returns: Promise<{ success: boolean; }>