This repository contains sample applications demonstrating integration with the Kiwa eLicense SDK. The samples showcase how to build mobile wallet applications for storing, managing, and presenting digital licenses.
For comprehensive documentation, guides, and API reference, visit:
https://docs.sphereon.com/kiwa/guides/getting-started
| Sample App | Platforms | Language | Description |
|---|---|---|---|
| Compose Multiplatform | Android + iOS | Kotlin (KMP) | Full-featured cross-platform app with shared UI |
| Swift Simple | iOS only | Swift | Native iOS app with XCFramework integration |
Located at example/holder/compose-sample-app/ - a full-featured e-license wallet built with Kotlin Multiplatform and Jetpack Compose.
- License retrieval, display, and verification
- NFC and QR code engagement
- BLE data transfer
- Shared UI across Android and iOS
example/holder/compose-sample-app/
├── composeApp/ # Main KMP Compose module
│ └── src/
│ ├── commonMain/ # Shared code
│ ├── androidMain/ # Android-specific code
│ └── iosMain/ # iOS-specific code (Kotlin)
└── iosApp/ # iOS Xcode wrapper
# Android
./gradlew :example:holder:compose-sample-app:composeApp:assembleDebug
# iOS - build framework then open Xcode
./gradlew :example:holder:compose-sample-app:composeApp:linkDebugFrameworkIosSimulatorArm64
open example/holder/compose-sample-app/iosApp/iosApp.xcodeprojLocated at example/holder/swift-sample-app/ - a native iOS app demonstrating direct XCFramework integration.
- License activation via PIN entry
- License storage and display
- mDoc CBOR decoding
- Native SwiftUI interface
example/holder/swift-sample-app/
├── kiwa-swift-sample.xcodeproj/
└── kiwa-swift-sample/
├── KiwaSwiftSampleApp.swift
├── KiwaManager.swift
├── LicenseListView.swift
└── PinEntryView.swift
For detailed documentation, see:
open example/holder/swift-sample-app/kiwa-swift-sample.xcodeprojRequires KiwaSdk.xcframework - see XCFramework section.
Located at example/holder/xcframework/ - a standalone Gradle project for building the iOS XCFramework.
cd example/holder/xcframework
# Build XCFramework
./gradlew assembleXCFrameworkKiwaSdk
# Build release only
./gradlew assembleReleaseXCFrameworkKiwaSdkbuild/XCFrameworks/release/KiwaSdk.xcframework
build/XCFrameworks/debug/KiwaSdk.xcframework
A podspec is generated for CocoaPods integration:
./gradlew generatePodspecThe podspec is output to build/cocoapods/KiwaSdk.podspec.
Located at example/holder/ui/ - reusable UI modules shared across sample apps:
auth/- Authentication UI componentscard/- Credential display componentscore/- Core UI utilitieselicense/- eLicense-specific features
- JDK 17 or higher
- Android Studio with Kotlin Multiplatform plugin
- Xcode 15+ (for iOS builds)
- Kiwa SDK Access: Nexus credentials for SDK repositories
- Subscription Key: Valid
KIWA_SUBSCRIPTION_KEYfrom Kiwa
Create or update local.properties:
nexusUsername=YOUR_NEXUS_USERNAME
nexusPassword=YOUR_NEXUS_PASSWORDSet subscription key via environment variable:
export KIWA_SUBSCRIPTION_KEY=your_subscription_key- Kotlin Multiplatform (KMP): Cross-platform development
- Jetpack Compose / Compose Multiplatform: Shared UI
- kotlin-inject + Anvil: Compile-time dependency injection
- SKIE: Enhanced Swift interoperability
- Ktor: HTTP client
| Platform | Minimum Version |
|---|---|
| Android | API 27 (Android 8.1) |
| iOS | iOS 15+ / Xcode 15+ |
The sample app and UI code is provided as permissive Open-Source using an Apache 2.0 license. However, the Kiwa SDK itself is proprietary, requires a license, and does not allow redistribution. See LICENSE.md for details.