Hello all 👋
I'm getting unexpected behavior when testing FinanceKit for my app and was hoping to get assistance.
Pre-reqs (defined at https://developer.apple.com/documentation/financekit):
I've been given the FinanceKit entitlement
I have the com.apple.developer.financekit entitlement set to financial-data
I also have NSFinancialDataDescription set in Info.plist.
I am targeting iOS 17.4 (a physical device)
When I call FinanceStore.shared.requestAuthorization(), I immediately get a denied status without any alert dialogs.
No data about my app is listed in Settings > Privacy & Security > Wallet
Any idea what else is needed here?
Thanks so much for the help!
Code
import SwiftUI
import FinanceKit
@main
struct myApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct ContentView: View {
@State private var status: AuthorizationStatus?
@State private var dataAvail: Bool?
var body: some View {
VStack {
Text("Data available \(String(describing: dataAvail))")
Text("Auth status \(String(describing: status))")
Button("Get Status") {
Task{
dataAvail = FinanceStore.isDataAvailable(.financialData)
status = try await FinanceStore.shared.authorizationStatus()
}
}.buttonStyle(.borderedProminent)
Button("Request Auth") {
Task{
do{
status = try await FinanceStore.shared.requestAuthorization()
}catch{
print(error)
}
}
}.buttonStyle(.borderedProminent)
}
.padding()
}
}
#Preview {
ContentView()
}
app.entitlements:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.financekit</key>
<array>
<string>financial-data</string>
</array>
</dict>
</plist>
Info.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSFinancialDataDescription</key>
<string>Budget across all your accounts</string>
</dict>
</plist>
VIdeo demo:
Selecting any option will automatically load the page