Repository for the dgca wallet app for iOS.

Overview

EU Digital COVID Certificate Wallet App - iOS

AboutDevelopmentDocumentationSupportContributeContributorsLicensing

About

This repository contains the source code of the EU Digital COVID Certificate Wallet App for iOS.

The wallet app provides a user interface to store and manage personal DGCs directly on the phone. DGCs will be imported by scanning a base45-encoded QR code and decoding CBOR to JSON. Afterwards, it is symmetrically encrypted in the app’s sandbox and the symmetric key is stored in the system’s keychain. Multiple DGCs can be stored in the app. Access to the app is controlled via biometric data (e. g., Touch ID or Face ID). The wallet app can display any imported DGC as QR code for scanning and verifying with the wallet app.

Translators 💬

You can help the localization of this project by making contributions to the /Localization folder.

Development

Prerequisites

  • You need a Mac to run Xcode.
  • Xcode 12.5+ is used for our builds. The OS requirement is macOS 11.0+.
  • To install development apps on physical iPhones, you need an Apple Developer account.
  • Service Endpoints:
    • To get QR Codes for testing, you might want to check out https://dgc.a-sit.at/ehn/testsuite.

Build

Whether you cloned or downloaded the 'zipped' sources you will either find the sources in the chosen checkout-directory or get a zip file with the source code, which you can expand to a folder of your choice.

Xcode based build

Important Info: SPM and the SwiftDGC core module

  • Depending on the development status, this module might be either linked locally or via github URL.
  • If it's linked locally, you should clone both repos into the same folder:
  • <project folder>
    • dgca-app-core-ios
    • dgca-wallet-app-ios
  • Otherwise it will be pulled by Xcode like all other SPM modules.
    • Make sure the core module is up to date by clicking File > Swift Packages > Update Packages.

Build steps

  • Set the development team to any Apple Developer Account
  • Give the project a unique bundle identifier
  • Install swift package manager requirements through Xcode 12.5+
  • Build and run the project through Xcode 12.5+

Documentation

  • TODO: Link to documentation

Support and feedback

The following channels are available for discussions, feedback, and support requests:

Type Channel
Issues
Other requests

How to contribute

Contribution and feedback is encouraged and always welcome. For more information about how to contribute, the project structure, as well as additional contribution information, see our Contribution Guidelines. By participating in this project, you agree to abide by its Code of Conduct at all times.

Contributors

Our commitment to open source means that we are enabling -in fact encouraging- all interested parties to contribute and become part of its developer community.

Licensing

Copyright (C) 2021 T-Systems International GmbH and all other contributors

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.

You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the LICENSE for the specific language governing permissions and limitations under the License.

Comments
  • Apple Wallet Integration (iOS)

    Apple Wallet Integration (iOS)

    Feature description

    I think there should be an option to integrate certificates, passes and other cards directly in Apple Wallet, so this documents could be accessed in one central App and the same place where are already stored things like creditcards from Apple Pay, loyaltycards and tickets.

    https://developer.apple.com/wallet/

    So there could be displayed an „Add to Apple Wallet“ button in the details of each document, so the user can decide which of them should be added to the iOS-native Wallet-App.

    I‘m not sure, if passes in the Wallet-App are stored in the Secure Enclave, but if this isn’t the case, this feature maybe could be at least provided for „simpler“ documents, like vaccination certificates.

    Problem and motivation

    I really think, it is a very important feature for iOS-Users to create a functionality to use the native Wallet-App for documents like these. And iOS-Users are more often looking towards such an integration, as they really like the simplicity and convenience of things like the native Wallet-App especially if they are already using stuff like Apple Pay.

    This would provide a much better experience for the users and this could also help to convince more users from using digital certificates.

    As I couldn’t find any information regarding this Apple Wallet topic, I’ve created this feature-request.

    Is this something you're interested in working on

    No.

    opened by ezadoo 35
  • no biometric or alternate secure requested on start

    no biometric or alternate secure requested on start

    Describe the bug

    on starting the App on my iphone, there is no secure request to enter the app if no biometric or alternate secure is saved on mobile device.

    Expected behaviour

    On starting the App there have to be a login mechanism with biometric data or pin or template. If there are no biometric data saved on mobile device, the user has to save one secure login possibility. Otherwise a start of the app is not possible.

    Steps to reproduce the issue

    1. restart the iphone to be sure no app is running anymore
    2. open the walletApp
    3. no login is requested

    Technical details

    IPhone Xs IOS-version: 14.4. (18D52)

    Possible Fix

    Additional context

    bug 
    opened by rebwalz 24
  • [iOS-Wallet-App] Revocation Entry has Expired but Wallet App still Evaluates DCC-Code as REVOKED when they were stored before expiring

    [iOS-Wallet-App] Revocation Entry has Expired but Wallet App still Evaluates DCC-Code as REVOKED when they were stored before expiring

    If a revoked cerificate expires while it is stored in the wallet, then this is shown as revoked after the expiration date too although the reload button is pressed.

    Expected behaviour: Certificates should be shown as valid after reloading the settings menu and refreshing the overview screen.

    bug 2nd Prio - Medium 
    opened by kerstin-oppermann-tsi 13
  • [Prio iOS Wallet App] No Indication of

    [Prio iOS Wallet App] No Indication of "Revoked" Certificates

    VAC_C1 Revoked certificates are not always shown as revoked on some devices as expected. This problem could mostly be resolved with the workaround by scrolling or by reload. But it does not guarantee that it would work.

    Expected behaviour

    At least in the list view after scrolling or reloading multiple times there should be some indication of revoked certificates.

    Steps to reproduce

    1. Claim the following certificate (which is revoked); The current TAN for claiming this certificate is: M36Z2V7D
    2. Press reload in app settings;
    3. Scroll up and down the certificate list. => no indication of "revoked" is to be seen.

    Technical Details

    iOS Wallet App 1.3.1 (5) tst iPhone 8 plus v. Lutz, iOS 15.3.1

    bug 
    opened by RalicaY 12
  • PRIO 1 - iOS - Ticketing - provide Ok button for going back to app main screen after successful validation of certificate

    PRIO 1 - iOS - Ticketing - provide Ok button for going back to app main screen after successful validation of certificate

    iOS wallet app 1.2.2.1 (3) acc iPad 11 Pro

    expected result There should be an OK oe Close button to go back to the main screen of the wallet app

    actual result confirmation screens stays open and I had to kill the app

    image

    sample from Android: image

    bug 
    opened by kerstin-oppermann-tsi 9
  • iOS - No rules will be used for check validity

    iOS - No rules will be used for check validity

    Describe the bug

    on choosing a certificate to check the validity, the choosen country has no rules. Even if I know that the country should have rules.

    Expected behaviour

    the choosen certificate should be checked by choosen date and country.

    Steps to reproduce the issue

    1. Open WalletApp
    2. choose a already saved certificate
    3. push the button: "check Validity"
    4. choose a country with businessRules
    5. Choose a date
    6. push "I Agree, check validity
    7. see the message: "Sorry! no rules for this country"

    Technical details

    • Host Machine OS (Windows/Linux/Mac): IPhone Xs Modellnummer: MT9G2ZD/A IOS-Version: 14.6 (18F72) ENF-Version: WalletApp Version 1.1.0

    Possible Fix

    Additional context

    bug 
    opened by rebwalz 6
  • [iOS-Wallet-App] Nullable Values in Verifieable Credentials Lead To Unscannable Code

    [iOS-Wallet-App] Nullable Values in Verifieable Credentials Lead To Unscannable Code

    Describe the bug

    We tried to can a Verifiable Credential Code with Null-values. The app could not read the code. It was not scannable. (See attached code).

    Expected behaviour

    The app should be able to scan such codes.

    Technical details

    iOS Wallet App 1.3.3(4) nullable_values

    bug 3rd Prio - Low 
    opened by RalicaY 5
  • [iOS Wallet] newly revoked cerificate will not be updated in certificate list

    [iOS Wallet] newly revoked cerificate will not be updated in certificate list

    When certificate is already claimed to wallet app and will be revoked later, the revokation status is not updated.

    1. Claim valid certificate
    2. Revoke certificate
    3. Wait about 10 minutes
    4. Update revokation status in settings menu
    5. Scroll down certificate list

    Expected result: certificate should be shown as revoked

    Actual result: certificate is shown as valid

    1. Claim the certificate again to app -> certificate is shown as revoked
    bug 1st Prio - High 
    opened by kerstin-oppermann-tsi 4
  • [Low Prio - iOS wallet] Cannot share non-DCC PDF

    [Low Prio - iOS wallet] Cannot share non-DCC PDF

    Describe the bug

    when i want to share a non-DCC PDF, there is no "Share"-Button visible

    Expected behaviour

    a non-DCC PDF is saved. when the pdf is viewd in walletApp, the must be a "Share"-Button to share the pdf

    Steps to reproduce the issue

    1. save non-dcc in walletApp
    2. open the saved pdf

    Technical details

    iPhone 7, IOS 15.3.1 WalletApp 1.3.1 (5) testform1.pdf

    bug 
    opened by michawol 4
  • Anonymized QR codes that works with wallet (and verifier)

    Anonymized QR codes that works with wallet (and verifier)

    Hi all, big thanks to all for making this project open-source.

    Slovakia e.g. declares to have functionality that allows wallet app to share/display QR codes with 'anonymized' data (my guess is that the QR e.g. does not contain a person's name or date of birth).

    I am interested only in the technical point of view of this question - so do you know about ways how this could be accomplished, please?

    I checked the default JSON schema, where "nam" (person's surname and given name) and "dob" are required.

    So I think the only way, how this could be accomplished, is that issuer would always issue 2 kinds/2 versions of certificates for a single test, single vaccination, or single recovery "event":

    -one anonymized where the personal data fields would be just placeholders / containing dummy values to pass JSONSchema validation step -and the second, with original personal data

    I see no point, in a solution where the wallet removes personal data (like 'tampering certificate'), as the signature for the verifier would become invalid.

    Could you suggest other ideas (if any) / or tell me if I am wrong somewhere with the solution above, please?

    I am not a representative, nor a member of any official working group - so I do not want to waste the time of any of you if you are currently under pressure.

    Thanks.

    question 
    opened by majirosstefan 3
  • Deep-Link functionality

    Deep-Link functionality

    Your Question

    in User Story 2: Import Green Certificate in the Wallet App, is a second optionally way to import the cerificate by a deep link which was sended by SMS or email.

    Optionally you can use a deep link instead of a 2D Code to initiate the certificate import in the wallet app. The deep link can look like: dgc://example.authority.com?token=ey… & [publickey] In this case the token is received with the link, and the public key must be replaced by the key of the new generated key pair of the certificate container in the wallet app. The deep link can be delivered by SMS, Email or by presenting another 2D Code for scan.

    You find it in specification: https://ec.europa.eu/health/sites/default/files/ehealth/docs/digital-green-certificates_v4_en.pdf on page 12

    • Question: When will it be implemented?
    question 
    opened by rebwalz 3
  • [iOS wallet] Last updated entry for pub keys and revokation data always stays on 0001-01-01

    [iOS wallet] Last updated entry for pub keys and revokation data always stays on 0001-01-01

    Functional the loading of data seems to work (country list ist loaded, and revokation data is updated) but visuell the reloading date of keys and revokation data is not changed, always stay on 0001-01-01

    image

    bug 3rd Prio - Low 
    opened by kerstin-oppermann-tsi 0
  • [iOS Wallet] Entry

    [iOS Wallet] Entry "Invalidität" should not be part of certificate detail screen

    The new wallet 1.3.3(11) has an entry "Grund der Invalidität" "Keine Einträge im Zertifikat" but this should be not part of the wallet app.

    image image

    Here is the example for the same certifikat in wallet Android without this entry: image

    bug 2nd Prio - Medium 
    opened by kerstin-oppermann-tsi 0
  • [iOS-Wallet-App] Verifiable Credential with Matching KID But Wrong Public Key Data Gets Saved in Wallet

    [iOS-Wallet-App] Verifiable Credential with Matching KID But Wrong Public Key Data Gets Saved in Wallet

    Describe the bug

    A verifiable credential (see attached file) with matching KID but wrong public key data could be saved in the wallet app despite the wrong public key data (invalid signature).

    Expected behaviour

    The app should recognize the invalidity of the signature and deny saving the credential due to invalid signature.

    Technical details

    Wallet App Hash 1.3.3(4)

    private_issuer(1)

    bug 3rd Prio - Low 
    opened by RalicaY 3
  • [iOS wallet] Fix problem for revokation reload when certificates claimed twice (or more)

    [iOS wallet] Fix problem for revokation reload when certificates claimed twice (or more)

    The problem is that when one certificate is claimed more than one time, only the last claimed become to the prior certificate. Means that only for this newest claimed the public keys are can be found in the gateway. So for the older claimed (on other devices or on the same device) the revokation reload function fails with 400 in the API.

    Possible solution should be to ask for the information from the gateway for every single one certificate and not only to get answer for the whole set of certificates.

    @SchulzeStTSI maybe you can explain possible solution here in detail.

    enhancement 
    opened by kerstin-oppermann-tsi 0
  • Removes FloatingPanel

    Removes FloatingPanel

    This removes the FloatingPanel dependency because:

    • FloatingPanel was only used to present Viewcontroller modally which is supported by System APIs just fine
    • Animation feels more natural when using System API
    • Less Code to reason about
    • Less Licensing
    • Less risk of bugs & sec vulnerabilities
    • Smaller binary size

    Feel free to reject this PullRequest if there are good reasons to use FloatingPanel.

    opened by lightsprint09 3
Releases(1.3.1)
  • 1.3.1(Mar 2, 2022)

    What's Changed

    • fixed branch of core lib by @alexchornyi in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/95
    • fixed to work with new hcert sections by @alexchornyi in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/98
    • release context by @alexchornyi in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/99
    • fixed contex by @alexchornyi in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/100
    • fixed contex json for test env by @alexchornyi in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/101
    • Bugfix/error cert by @alexchornyi in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/102
    • revert changes for error qr codes by @alexchornyi in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/103
    • docs: Add usage note by @daniel-eder in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/84
    • fixed wallet sections by @alexchornyi in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/104
    • Part of 1.2.0 by @alexchornyi in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/105
    • Feature/ticketing by @ihorkhomyak in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/126
    • Feat/revocation by @PaulBallmann in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/127
    • Release/1.3.1 by @PaulBallmann in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/130
    • Fix: Release/1.3.1 by @PaulBallmann in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/131

    New Contributors

    • @ihorkhomyak made their first contribution in https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/pull/126

    Full Changelog: https://github.com/eu-digital-green-certificates/dgca-wallet-app-ios/compare/1.1.0...1.3.1

    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Jul 20, 2021)

  • 1.0.5.1(Jun 24, 2021)

  • 1.0.4(Jun 11, 2021)

  • 1.0.1(May 20, 2021)

Owner
Official GitHub Organization of the EU Digital COVID Certificates (EUDCC) project, previously known as the EU Digital Green Certificates (DGC).
null
Twinkle is a Swift and easy way to make any UIView in your iOS or tvOS app twinkle.

Twinkle ✨ Twinkle is a Swift and easy way to make any UIView in your iOS or tvOS app twinkle. This library creates several CAEmitterLayers and animate

patrick piemonte 600 Nov 24, 2022
iOS custom controller used in Jobandtalent app to present new view controllers as cards

CardStackController iOS custom controller used in the Jobandtalent app to present new view controllers as cards. This controller behaves very similar

jobandtalent 527 Dec 15, 2022
Basic iOS app to track stocks (data from Finnhub, Tiingo, or IEX Cloud)

Basic iOS app to track stocks (data from Finnhub, Tiingo, or IEX Cloud)

null 33 Dec 21, 2022
App that uses iTunes Search API with SwiftUI for iOS 15+

ItunesSearchApp App that uses iTunes Search API with SwiftUI for iOS 15+ Documentation iTunes Search API: https://developer.apple.com/library/archive/

Karin Prater 22 Dec 25, 2022
Circular progress indicator for your macOS app

CircularProgress Circular progress indicator for your macOS app This package is used in production by apps like Gifski and HEIC Converter. Requirement

Sindre Sorhus 520 Jan 3, 2023
UI Component. This is a copy swipe-panel from app: Apple Maps, Stocks. Swift version

ContainerController UI Component. This is a copy swipe-panel from app: https://www.apple.com/ios/maps/ Preview Requirements Installation CocoaPods Swi

Rustam 419 Dec 12, 2022
Base types for theming an app.

CostumeKit ?? Base types for theming an app. CostumeKit is made of up a set of Swift protocols. They are meant to be implemented by you in your app. F

Jake Marsh 301 Nov 21, 2022
Show progress in your app's Dock icon

DockProgress Show progress in your app's Dock icon This package is used in production by the Gifski app. You might also like some of my other apps. Re

Sindre Sorhus 958 Jan 2, 2023
⚙ Add a preferences window to your macOS app in minutes

Preferences Add a preferences window to your macOS app in minutes Just pass in some view controllers and this package will take care of the rest. Requ

Sindre Sorhus 1.2k Jan 6, 2023
FacebookMe is a Swift App Mimics the personal profile tab of Facebook.

FacebookMe FacebookMe is a Swift App Mimics the personal profile tab of Facebook. It demos one simple way to implement a UITableView with mutiple sect

Kushal Shingote 3 Feb 20, 2022
A SwiftUI bottom-up controller, like in the Maps app. Drag to expand or minimize.

SwiftUI Drawer A SwiftUI bottom-up controller, like in the Maps app. Drag to expand or minimize. Contents Add the Package Basic Usage Examples Credits

Michael Verges 695 Jan 3, 2023
Example Catalyst app that is shown in a UIKit popover underneath an NSStatusItem

CatalystStatusItemPopoverExample Example Catalyst app that is shown in a UIKit popover underneath an NSStatusItem. References How to use macOS Specifi

Tom Irving 9 Sep 8, 2022
Flutter Apple Product Store App UI Home Page With Getx

Flutter Apple Product Store App UI Home Page With Getx A new Flutter UI Project on my Youtube Channel . About The Project Create a beautiful Flutter U

Muawia Saeed 11 Dec 23, 2022
A Simple Camera App With Programmatic UI

CameraApp-ProgrammaticUI Hey there! This is a simple Camera Application that I and Sahab Alharbi worked on as part of Tuwaiq's iOS bootcamp projects.

null 0 Dec 4, 2021
Confetti View lets you create a magnificent confetti view in your app

ConfettiView Confetti View lets you create a magnificent confetti view in your app. This was inspired by House Party app's login screen. Written in Sw

Or Ron 234 Nov 22, 2022
DrawerKit lets an UIViewController modally present another UIViewController in a manner similar to the way Apple's Maps app works.

DrawerKit What is DrawerKit? DrawerKit is a custom view controller presentation mimicking the kind of behaviour in the Apple Maps app. It lets any vie

Babylon Health 773 Dec 27, 2022
A little app which shows different ways to simulate NSPanel using NSWindow

FunWithPanels A little app which shows different ways to simulate NSPanel using NSWindow, for better or worse. Settings FunWithPanels uses a combinati

Mitchell Cohen 7 Aug 3, 2022
We-split - A study app made using SwiftUI

We Split We Split is a study app made using SwiftUI, being part of 100 Days of S

Gabriel Pereira 1 Mar 16, 2022
UIStackView replica for iOS 7.x and iOS 8.x

TZStackView A wonderful layout component called the UIStackView was introduced with iOS 9. With this component it is really easy to layout components

Tom van Zummeren 1.2k Oct 10, 2022