Access eligible Wallet financial data using FinanceKit and FinanceKitUI. Use when querying transactions or balances, reading Apple Card, Apple Cash, Savings, or U.K. connected-account data, requesting financial-data authorization, using TransactionPicker, enabling iOS 26 background delivery, or saving and checking Wallet orders.
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Use FinanceKit for eligible Wallet financial data, selective transaction
imports, Wallet order storage/querying, and iOS 26+ background delivery. Query
APIs start at iOS/iPadOS 17.4, TransactionPicker at 18, and background
delivery at 26.
Route Apple Pay checkout to passkit, widget rendering/timelines to
widgetkit, and merchant email/Business Connect optimization outside this skill.
FinanceKit financial-data access is a managed capability. Verify all of these before implementation:
com.apple.developer.financekit on the exact bundle ID.NSFinancialDataUsageDescription.U.S. support covers eligible Apple Card, Apple Cash, and Savings data; family exclusions apply. U.K. support starts at iOS/iPadOS 18.4 for supported open banking institutions. Check current Apple eligibility before promising coverage.
Always guard availability before any financial-data or order API:
import FinanceKit
guard FinanceStore.isDataAvailable(.financialData) else { return }
let status = try await FinanceStore.shared.requestAuthorization()Calling financial APIs when unavailable can terminate the app. Availability
does not guarantee accounts exist, and temporary restrictions surface as
FinanceError.dataRestricted.
| Need | API |
|---|---|
| Ongoing account, balance, or transaction access | FinanceStore authorization and queries |
| Selective immediate transaction import | FinanceKitUI TransactionPicker |
| Resumable catch-up or monitoring | Account/balance/transaction history sequences |
| Save/check a Wallet order | Orders availability plus saveOrder/containsOrder |
| Receive changes outside app lifetime | iOS 26+ background delivery extension |
Read FinanceKit extended patterns for predicate factories, pagination, fields, currency formatting, credit/debit interpretation, a resumable sync manager, SwiftUI integration, extension lifecycle, and detailed error handling.
creditDebitIndicator; do not infer sign
from Decimal.newToken.FinanceError.historyTokenInvalid, discard only the affected token and run a
fresh catch-up for that scope.isMonitoring: false for finite catch-up and a separate
isMonitoring: true sequence for live monitoring.iOS 26+ registration methods are synchronous and nonthrowing:
FinanceStore.shared.enableBackgroundDelivery(
for: [.accounts, .accountBalances, .transactions],
frequency: .daily
)The app and background extension both need the FinanceKit entitlement and a
shared App Group for durable state. Implement didReceiveData(for:) and return
only after essential writes complete. willTerminate() is the final chance to
save partial work, not a guarantee of unlimited cleanup time.
Hourly/daily/weekly frequencies are expected minimum intervals when data changes; they are not exact schedules. Register every data type the local model depends on.
Guard .orders availability independently. Handle every SaveOrderResult
(added, cancelled, newerExisting) and every contains result. A signed
archive is a server/merchant contract; do not fabricate or mutate it client-side.
Use AddOrderToWalletButton when the system presentation fits the product.
isDataAvailable.TransactionPicker is sufficient.thienqo/ios-skills
6bf8b62
Canonical home
since May 23, 2026
Also appears in
on Sep 6, 2026
since May 22, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.