Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
68e96cd
Update Gradle to 9.2
nodh Jan 13, 2026
ed724c7
Update to vc-k development
nodh Jan 13, 2026
88df290
Update dependencies
nodh Jan 13, 2026
7d368b7
Fix compiler warnings
nodh Jan 13, 2026
52c2a26
Update DC API support for new vck names
gp-iaik Nov 28, 2025
c88f0a8
Adapt to vck changes
gp-iaik Dec 5, 2025
f483fee
Use AuthenticationResponseParameters directly
gp-iaik Dec 5, 2025
5262397
Add support for matching any Iso credentials
gp-iaik Dec 5, 2025
f9fce95
Use deserialization for DC API request
gp-iaik Dec 6, 2025
d968a9f
Use interface DigitalCredential to return credential
gp-iaik Dec 6, 2025
992b6fa
Remove comment
gp-iaik Dec 9, 2025
43766fc
Fix build
gp-iaik Dec 18, 2025
1735a2f
Update non-local presentation code to multipaz 0.96
gp-iaik Dec 21, 2025
f34a146
Add entitlement to app
gp-iaik Oct 29, 2025
625b503
First implementation of registering and launching app via DC API on iOS
gp-iaik Nov 14, 2025
1d92977
WIP for debugging
gp-iaik Dec 1, 2025
55cdc1a
Fix loading compose-resources in extension
gp-iaik Dec 15, 2025
48bd3c5
Add simple UI to show pre-request
gp-iaik Dec 15, 2025
5c9fd74
Add app group/keychain entitlements
gp-iaik Dec 17, 2025
344471e
Update project file
gp-iaik Dec 17, 2025
b11b79b
WIP: Update UI for DC API
gp-iaik Dec 17, 2025
ab3d8a7
Store app data in group for DC API
gp-iaik Dec 17, 2025
6bc1786
WIP: DC API iOS
gp-iaik Dec 18, 2025
f404f67
Add support for parsing and displaying iOS DC API requests
gp-iaik Dec 19, 2025
005446b
Add cross-platform support for ISO 18013-7 flow
gp-iaik Dec 21, 2025
eef28ae
Remove unused Swift code
gp-iaik Dec 21, 2025
9487be9
Add TODOs
gp-iaik Dec 22, 2025
a1fe8df
Adapt serialization of IsoMdoc response as iOS does some magic on its…
gp-iaik Dec 23, 2025
19f468f
Add Xcode changes that just appeared
gp-iaik Dec 23, 2025
6f603f1
Update changelog
gp-iaik Dec 23, 2025
304054a
Fix non-macOS build
gp-iaik Jan 12, 2026
76ce31e
Move duplicated code to extension method
gp-iaik Jan 12, 2026
1f27b75
Add jvmToolchain and upate Testballoon
gp-iaik Jan 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,6 @@ iosApp/iosApp.xcodeproj/*
!iosApp/iosApp.xcodeproj/xcshareddata
!iosApp/iosApp.xcodeproj/project.pbxproj
shared/shared.podspec
## User settings
xcuserdata/
metrics/
11 changes: 10 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
# Release 5.7.6 (unreleased)
* Update to VC-K 5.11.0
* Credentials: Fix displaying age verification credential
* Support URL scheme `av` for age verification

* Use vck serializers for DC API
* DC API:
* Support requests with multiple protocols
* Use vck data classes to (de-)serialize received/emitted data
* Add preliminary support for iOS using ISO/IEC 18013-7 protocol. Known issues:
* iOS-specific pre-request is shown in a separate rather rudimentary UI
* Content in the pre-request is not yet compared with the content in the full request
* Sharing UI does not always open after approving the pre-request

# Release 5.7.5
* Update to VC-K 5.10.1
* Provide self-signed key attestation on issuing
Expand Down
1 change: 1 addition & 0 deletions androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ plugins {


kotlin {
jvmToolchain(17)
androidTarget()
sourceSets {
androidMain.dependencies {
Expand Down
Binary file modified androidApp/src/androidMain/assets/dcapimatcher.wasm
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -60,16 +60,18 @@ abstract class AbstractWalletActivity : AppCompatActivity() {
)
}
} else {
Napier.e("Creating error response for DC API. Error: $resultStr")
sendErrorResponse(resultStr, resultData)
}

Napier.d("Successfully returned response to DC API invoker. Response: $resultStr")
setResult(RESULT_OK, resultData)
finish()
}

private fun sendErrorResponse(resultStr: String, resultData: Intent) {
/* TODO check with SP that supports exceptions whether this works
* otherwise try with the Google GMS library (see above)
* otherwise try with the Google GMS library
*/
Napier.v("Returning error response: $resultStr")
PendingIntentHandler.setGetCredentialException(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.credentials.registry.provider.RegistryManager
import at.asitplus.wallet.app.android.dcapi.DCAPIInvocationData
import at.asitplus.wallet.app.android.dcapi.AndroidDCAPIInvocationData
import at.asitplus.wallet.app.common.BuildContext
import at.asitplus.wallet.app.common.BuildType
import org.multipaz.prompt.AndroidPromptModel
import org.multipaz.prompt.PromptModel
import ui.navigation.PRESENTATION_REQUESTED_INTENT


Expand All @@ -19,7 +20,11 @@ class MainActivity : AbstractWalletActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
installSplashScreen()
super.onCreate(savedInstanceState)
val promptModel = AndroidPromptModel()

val promptModel: PromptModel by lazy {
AndroidPromptModel.Builder().apply { addCommonDialogs() }.build()
}

setContent {
MainView(
buildContext = BuildContext(
Expand All @@ -38,7 +43,7 @@ class MainActivity : AbstractWalletActivity() {
when (intent.action) {
RegistryManager.ACTION_GET_CREDENTIAL -> {
Globals.dcapiInvocationData.value =
DCAPIInvocationData(intent, ::sendCredentialResponseToDCAPIInvoker)
AndroidDCAPIInvocationData(intent, ::sendCredentialResponseToDCAPIInvoker)
Globals.appLink.value = intent.action
}
PRESENTATION_REQUESTED_INTENT -> {
Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ plugins {
val testballoonVer =
System.getenv("TESTBALLOON_VERSION_OVERRIDE")?.ifBlank { null } ?: libs.versions.testballoon.get()

id("at.asitplus.gradle.conventions") version "20251023"
id("at.asitplus.gradle.conventions") version "20251217"
kotlin("multiplatform") version kotlinVer apply false
kotlin("plugin.serialization") version kotlinVer apply false
id("de.infix.testBalloon") version testballoonVer apply false
Expand Down
14 changes: 14 additions & 0 deletions cinterop/DigitalCredentials-iphoneos.def
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Adapted from https://github.com/openwallet-foundation/multipaz

package = at.asitplus.wallet.app.ios
language = Objective-C

headers = DigitalCredentials/DigitalCredentials-Swift.h
headerFilter = DigitalCredentials/*

staticLibraries = libDigitalCredentials.a
libraryPaths = ../cinterop/build/Release-iphoneos

linkerOpts = -L/usr/lib/swift
linkerOpts.ios_x64 = -platform_version ios 16.0 16.0 -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/
linkerOpts.ios_arm64 = -platform_version ios 16.0 16.0 -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/
14 changes: 14 additions & 0 deletions cinterop/DigitalCredentials-iphonesimulator.def
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Adapted from https://github.com/openwallet-foundation/multipaz

package = at.asitplus.wallet.app.ios
language = Objective-C

headers = DigitalCredentials/DigitalCredentials-Swift.h
headerFilter = DigitalCredentials/*

staticLibraries = libDigitalCredentials.a
libraryPaths = ../cinterop/build/Release-iphonesimulator

linkerOpts = -L/usr/lib/swift
linkerOpts.ios_x64 = -platform_version ios-simulator 16.0 16.0 -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator/
linkerOpts.ios_arm64 = -platform_version ios-simulator 16.0 16.0 -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator/
Loading
Loading