CoronaMelder - COVID-19 Notification App for iOS

Overview

CoronaMelder - COVID-19 Notification App for iOS

CI

This repository contains the native iOS implementation of the Dutch COVID-19 Notification App CoronaMelder.

Table of Contents

  1. About the app 1.1 App Requirements 1.2 Feature overview 1.3 Dependencies
  2. Development & Contribution process 2.1 Build Requirements 2.2 Getting started 2.3 Continuous Integration & reproducible builds 2.4 Validate GAEN signature 2.5 SSL Hash Generation 2.6 GAEN API Disclaimer 2.7 Developer Menu
  3. Where to begin development
  4. Background Task
  5. Theming, Strings, Fonts and Images 5.1 Translations 5.1.1 Uploading iOS translations to OneSky 5.1.2 Downloading and importing iOS translations from OneSky
  6. Release Procedure

1. About the app

CoronaMelder is a COVID-19 exposure notification app. Its main use is to notify users of the app when they previously were in (close) contact with a person who later tested positive for the coronavirus. The app does this by using Apple and Google's GAEN framework that uses Bluetooth Low Energy to monitor proximity to other people who have CoronaMelder or any of the other GAEN-based apps installed on their iOS or Android phone.

1.1 App Requirements

The app can run on devices that meet the following requirements.

  • Operating System: iOS 12.5+
  • Internet connection (either Wifi or Mobile Data)
  • Bluetooth

Note: Although the app can be installed on iOS 12.5 and higher, iOS 13 to iOS 13.6 don't support the GAEN features that the app uses. On these iOS versions, CoronaMelder will permanently show a splash screen asking users to update their device to iOS 14.

1.2 Feature Overview

This is a general overview of the features that are available in the app:

  • Onboarding. When the app starts or the first time, the user is informed of the functionality of the app and is asked to give permission for local notifications and the use of the GAEN framework.
  • Share GGD Key. If you have tested positive for coronavirus, you can share you unique identifiers publicly to make sure people who came into contact with you during the infectious period are alerted. (This action can only be performed when the user is called by the GGD).
  • Pausing. The user has the option to pause the contact tracing framework for a set number of hours. This is useful when you are in an environment where other measures have been taken to protect people from the virus or in situations where you are aware that you are interacting with a large number of potentially infected individuals (like in Coronavirus testlocations) and you don't want to receive notifications about this in the future.
  • Q&A Section. In-app information about the functionality of the app, how your privacy is protected and how the app works in detail.
  • Requesting a Coronatest. Information on how to request a Coronatest with links to related websites or phonenumbers. Note that you can not directly request a test within the app itself.
  • Invite people to use the app. Allows the user to share a link to coronamelder.nl to their friends & family using the native iOS share sheet.

Other functions of the app that are automatically performed and are not available through the UI of the app:

  • Contact Tracing using the GAEN framework. The app regularly downloads published keys from a public API and checks if the user ever came into contact with the device from which these infectious keys originated. This work is performed in regularly scheduled background tasks.
  • Decoy Traffic Generation. Since the "Share GGD Key" functionality of the app sends data to the API, any network traffic coming from the app could be construed as a sign that the user was infected. Because this presents a potential breach of privacy, the app regularly schedules similar (decoy) calls to the API to mask this traffic.

1.3 Dependencies

The app uses a number of external dependencies. To make sure we always use the correct version of these dependencies and to mitigate the risk of contaminating the codebase with unwanted code, the source code of these dependencies can be found within the repository in the vendor/ folder.

Here is an overview of what dependencies are used and why.

  • CocoaLumberjack Logging framework. When the app is build with debugging enabled, the app logs information to a local logfile that can be exported via the developer menu (sidebar menu that can be accessed by swiping to the left with 2 fingers on the screen). When the app is built for release, this logging is disabled. This means that builds that are published to the App Store do not log any information.

  • Lottie Lottie is used to display JSON-based animations within the app. The animation files can be found in ENCore/Resources/Animations

  • Mockolo Mockolo is an application that can generate mock classes based on protocols. These mock classes are used in our test suites to inject as dependencies in classes that are tested.

  • OpenSSL-for-iPhone This project relies on OpenSSL to validate the KeySet signatures. OpenSSL binaries (v1.1.1d) are included and can be built using make build_openssl. By default the compiled binaries are part of the repo to reduce CI build times. Feel free to compile the binaries yourself. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/)

  • Reachability (https://github.com/ashleymills/Reachability.swift) Helper library to determine network connection status and reachability of the API.

  • RxSwift (https://github.com/ReactiveX/RxSwift) Reactive Programming framework. RxSwift is used throughout the app to monitor the state of the App, the GAEN framework, the network etc. and update the UI accordingly.

  • Snapkit (https://github.com/SnapKit/SnapKit) SnapKit simplifies autolayout code within the app by providing a Domain Specific Language to describe the layout of the interface.

  • Swift-snapshot-testing (https://github.com/pointfreeco/swift-snapshot-testing) Used to snapshot test UI components of the app. Snapshot tests are unit tests that generate an image or textual description of the UI and then compare the UI against those references in later test runs to catch (unexpected) visual changes to the interface.

  • SwiftFormat (https://github.com/nicklockwood/SwiftFormat) Command Line tool to standardize code formatting. This can run as a pre-commit githook that can be installed using make install_dev_deps.

  • XcodeGen (https://github.com/yonaskolb/XcodeGen) Command Line tool to generate an Xcode projectfile based on a project.yml description file. The .xcodeproj file that is generated by this tool is not checked into the git repository but has to be created when checking out the code by running make project.

  • ZipFoundation (https://github.com/weichsel/ZIPFoundation) Zip / unzip library. Used to unpack all compressed content we receive from the API.

2. Development & Contribution process

The development team works on the repository in a private fork (for reasons of compliance with existing processes) and shares its work as often as possible. If you plan to make non-trivial changes, we recommend to open an issue beforehand where we can discuss your planned changes. This increases the chance that we might be able to use your contribution (or it avoids doing work if there are reasons why we wouldn't be able to use it).

2.1 Build Requirements

To build and develop the app you need:

  • Xcode 13
  • Xcode Command Line tools (Specifically "Make").
  • Homebrew

2.2 Getting Started

The project uses a Makefile in the root folder of the repository to perform basic actions needed for the development of the app.

  • make dev to install all required libraries and components to develop the app
  • make project to generate the .xcodeproj file for the app. This uses xcodegen and the project.yml file in the root folder of the repository.

Other commands that are available and might be useful during the development process:

  • make clean_snapshots to delete all recorded snapshot test reference file in the repository. This is handy if you want to re-record all snapshots after a big change or after changing the Simulator / OS version you want the snapshots to be recorded on.
  • make push_notification send a mock push notification to the app running in the simulator. The payload for this notification can be found in tools/push/payload.apns

2.3 Continuous Integration & reproducible builds

In order to facilitate CI and reproducible builds (https://github.com/minvws/nl-covid19-notification-app-coordination/issues/6) this codebase can be built using Github Actions.

2.4 Validate GAEN signature

Both Apple and Google validate signatures when processing exposure keysets. These so-called GAEN signatures are generated using a private key on our backend. The public key is sent to Google and Apple and for every bundle-identifier, region-identifier, key-version combination they store a public key.

Examples:

  • nl.rijksoverheid.en.test, region 204, key version v1 -> public key 1
  • nl.rijksoverheid.en, region 204, key version v1 -> public key 2

To validate the generated GAEN signatures on mobile please execute the following steps:

  • Remove all test entitlements from Debug.entitlements, this leaves two entitlements left: com.apple.developer.exposure-notification and the data protection one
  • Compile the app with the USE_DEVELOPER_MENU environment variable set
  • Once ran, open the development menu, select "Erase Local Storage"
  • Validate the correct network environment in the development menu
  • Select "Download and Process New KeySets" from the development menu and look at the debugger
  • Make sure the number of valid keysets in > 0 (it's logged)
  • Make sure you don't see Error: AddFile, ENErrorDomain:5 'Unable to find Application's Exposure Notification Configuration'
  • In case of success you'll see an ENExposureSummary object in the logs

This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/)

2.5 SSL Hash Generation

let certificate = """
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
"""
let cert = certificate
    .replacingOccurrences(of: "-----BEGIN CERTIFICATE-----", with: "")
    .replacingOccurrences(of: "-----END CERTIFICATE-----", with: "")
    .replacingOccurrences(of: "\n", with: "")
let certData = Data(base64Encoded: cert)!

guard let secCert = SecCertificateCreateWithData(nil, certData as CFData) else {
    fatalError()
}

print(Certificate(certificate: secCert).signature!)

2.6 GAEN API Disclaimer

Keep in mind that the Apple Exposure Notification API is only accessible by verified health authorities. Other devices trying to access the API using the code in this repository will fail to do so.

2.7 Developer menu

To aid in development of the app, a special hidden side menu was built that can be used to check or change the state of the app. This developer menu is only included in debug or test builds of the app and can be accessed on any screen bij swiping to the left with 2 fingers. Some of the features that can be found in this menu are:

  • Showing screens of the app that can normally only be accessed in specific situations. Like the onboarding screens, the OS update screen or the App Update screen.
  • Changing the state of the GAEN framework. Enabling / disabling it, mimicking a disabled bluetooth connection.
  • Simulating a possible exposure on a specific date.
  • Removing / fetching exposure key sets.
  • Erasing all locally stored data.
  • Sharing the log files of the app.

3. Where to begin development

Even though the architecture of the app is quite straight forward, it can still be hard to grasp the complexity as a new developer. Here are some helpful points in the codebase to start from.

  • MainViewController is a container that contains 2 other viewcontrollers (StatusViewController and MoreInformationViewController) that together represent the main screen of the app. It shows the status of the user / framework (exposed or not exposed) and a menu that gives access to all other features of the app.
  • RootRouter is the location of the startup sequence of the app. It determines which screen is shown when the app starts (onboarding screens, the main screen or something else)
  • BackgroundController handles the scheduling and execution of the background task that is the "heartbeat" of the app. It keeps the app up-to-date and performs exposure checks.

4. Background Task

One of the most important aspects of the app is a regularly scheduled background task that wakes up the app. Since the scheduling of background tasks is normally not guaranteed by iOS, CoronaMelder (like any other GAEN app) is given a special entitlement by Apple (based on the Bundle ID) that allows this scheduling to be more reliable. The task is currently scheduled to run every hour. However, not all work in this task will be performed during each run since they might depend on content from the backend that is updated in other intervals.

This is an overview of the work that is performed by the background task. The scheduling and execution of this work can all be found in the BackgroundController class:

  • removePreviousExposureDateIfNeeded. This cleans up any stored exposure date after 14 days. The exposure date is stored during this period to make it possible for the app to determine if an exposure was detected before.
  • activateExposureController. This prepares the GAEN framework for some of the work following work.
  • updateStatusStream. This makes sure the app is aware of the status of the GAEN framework, including things like the state of Bluetooth or Internet connection on the device.
  • fetchAndProcessKeysets. This downloads the latest keyset batches from the API, submits them to the GAEN framework and checks if the keysets lead to a possible exposure.
  • processPendingUploads. This uploads the users GGD key if a previous attempt by the user failed to do so (for instance due to network issues)
  • sendInactiveFrameworkNotificationIfNeeded. If the app is unable to download or process keysets for 24 hours, the app sends a local notification to the user that indicates that CoronaMelder is not functioning correctly.
  • sendNotificationIfAppShouldUpdate. In some situations, the development team might want to force users to update to the latest version of the app. For instance if there is a bug that prevents the app from functioning correctly. In that case, the appconfig file coming from the API will contain a "iOSMinimumVersion" field. This task checks that minimum version and sends a local notification to the user indicating that they should update the app.
  • updateTreatmentPerspective. This updates the content we show to users if a possible exposure was detected. The content is retrieved from the API and should always be in line with the latest government guidelines.
  • sendExposureReminderNotificationIfNeeded. If we previously detected an exposure, this task periodically reminds the user of this exposure using a local notification.
  • processDecoyRegisterAndStopKeys. This triggers decoy calls to the API that are intended to obfuscate the network traffic. This obfuscation makes sure that it is not possible to determine if somebody has shared a GGD-key (and was infected) based on the network traffic of the app.

5. Theming, Strings, Fonts and Images

To ensure a clean look & feel of the app, we have standardised the use of UI components such as text, fonts and images.

  • Strings are all stored in (translated) .strings files and are only accessed through static properties and functions in Localization.swift. This makes sure we don't make errors in the string's name and allows us to also fallback to a specific base language if the user's system language is not available. See more about the translation of these strings in Managing Translations.
  • Colors and Fonts can be accessed through a Theme object that is propagated throughout the app.
  • Fonts are standardised in ENFoundation/Fonts.swift. The name of the fonts we use follows iOS's semantic font naming conventions.
  • Colors are stored in ENFoundation/Resources/Colors.xcassets and can be accessed through the Theme object. The color assets file contains both Light and Dark appearances because we support Dark mode within the application.
  • Images are stored in ENCore/Resources/Assets.xcassets. These can be accessed by static properties on UIImage itself (like UIImage.chevron). Most images have Light and Dark appearances set to support Dark mode within the app.

5.1 Managing Translations

The content of the app is translated into 10 different languages. These translations are done via OneSky.

5.1.1 Uploading iOS translations to OneSky

  • The App contains 2 Resource folders:
    • Sources/EN/Resources
    • Sources/ENCore/Resources
  • Open OneSky and go to the iOS Project
  • Click the + icon next to Files on the left side of the screen
  • Drag Sources/ENCore/Resources/nl.lproj/Localizable.strings to OneSky
  • Rename Sources/EN/Resources/nl.lproj/Localizable.strings to Main.strings
  • Drag Sources/EN/Resources/nl.lproj/Main.strings to OneSky
  • Always select the deprecate option in OneSky

When updating existing translations by uploading files, make sure the Dutch language is not finalised, otherwise updates won't "overwrite" existing translations. Translations are set to crowdsource mode which means that everyone with access to the url can sign up and add translations for non-finalised strings, so for that reason finalising the translations is advisable too.

5.1.2 Downloading and importing iOS translations from OneSky

  • Check out the master branch in git
  • Go to OneSky -> Translation Overview and click Download Translation on the top right
  • Select all languages and all files
  • Click Export
  • Unzip the downloaded file
  • Open a terminal and go to /tools/scripts
  • Type "sh import-onesky.sh /absolute/path/of/extracted/onesky/folder". This will import the files and copy them to the correct location in the project

6. Release Procedure

The following steps need to be taken to create a version of CoronaMelder and release it to the iOS App Store:

  • Update the version number of the app in the project.yml. The version number is set by the CFBundleShortVersionString property in that file.
  • When the master branch is built, various build versions are automatically sent to Firebase App Distribution to make it easier to test the release.
  • Once the team is satisfied with the quality of the builds on Firebase App Distribution, the build can be sent to TestFlight using the internal release system (Azure DevOps)
  • Once the app hits TestFlight, we perform a manual regression test on the build to make sure the app performs as normal in this production-like environment.
  • If the team determines the app is ready for release, we manually submit the app for App Store Review via App Store Connect. We typically choose a manual release action instead of automatically releasing it on App Store approval to make sure we release the app on a day when we have enough personel to monitor the release.

After release After the app is released to the App Store we perform some actions to tag the release, make it public and verify the integrity of the released code:

  • We tag the release in our internal Git repository with a name matching the release version. for example 2.4.2.
  • We push the code from our internal Git repository to the GitHub repository to make it public.
  • We publish the created tag to GitHub too.
  • We communicate the tag that was pushed to GitHub to an Escrow party (via the internal Product Owner) that can confirm that the code of the released app matches the code that was tagged. This ensures that no malicious changes were made to the code during the release process.
Comments
  • [2020-08-20]: [VWS/Covid19NotificationApp] iOS Background TEK check not working?

    [2020-08-20]: [VWS/Covid19NotificationApp] iOS Background TEK check not working?

    Describe the bug, issue or concern

    I understood that yesterday the first batch of TEK keys was made available on the server. Until this morning my "Blootstellingscontroles" list was empty. When i launched the app the check was immediately performed and added to the list. I thought the interval was 4 hours?

    To Reproduce

    Steps to reproduce the behavior: Install the app and wait for background TEK check.

    Expected behavior

    I expected the TEK to be performed in the background.

    Platform

    iPhone 11 iOS 13.6.1

    Additional context

    I do have the German Corona-app installed, but it is not active

    Governance

    • [x] I've read the contributing document https://github.com/minvws/.github/blob/master/CONTRIBUTING.md
    • [x] I've read and understand the Code of Conduct https://github.com/minvws/.github/blob/master/CODE_OF_CONDUCT.md
    • [x] I understand that any contributions or suggestions I made may make it into the actual code. I've read the License https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/LICENSE.txt and the contributor license agreement https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/CLA.md
    opened by TeunVR 26
  • On reinstall the app doesn't reactivate by itself

    On reinstall the app doesn't reactivate by itself

    Describe the bug, issue or concern

    When you delete the app for whatever reason and later reinstall, the activation cannot complete. The 'Aanzetten' button does not do anything. You can only skip with 'Sla over' to continue.

    To Reproduce

    Steps to reproduce the behavior:

    1. Install the app from the App Store.
    2. Complete the activation steps.
    3. Close and delete the app.
    4. Reinstall the app from the App Store.
    5. Go through the activation steps.
    6. When you arrive at the activation panel tap 'Aanzetten'

    The buttons responds to touch, but nothing happens.

    Expected behavior

    Upon reinstall the app completes the activation like a new install and adds the region to the iOS exposure settings.

    Alternative: the app detects a previous install or odd settings and presents the correct manual steps.

    Screenshots

    Video: https://fvdm.com/u/apps/coronamelder-reinstall-activation.mp4

    Smartphone (please complete the following information):

    • Device: iPhone 8
    • OS: iOS 14.0.1
    • Browser: CoronaMelder app
    • Version 1.0.10

    Additional context

    Add any other context about the problem here.

    Governance

    • [x] I've read the contributing document https://github.com/minvws/.github/blob/master/CONTRIBUTING.md
    • [x] I've read and understand the Code of Conduct https://github.com/minvws/.github/blob/master/CODE_OF_CONDUCT.md
    • [X] I understand that any contributions or suggestions I made may make it into the actual code. I've read the License https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/LICENSE.txt and the contributor license agreement https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/CLA.md
    mirrored-to-azure 
    opened by fvdm 11
  • Disable CDN communication

    Disable CDN communication

    Adds a stubbed NetworkManager returning fixed responses for manifest and app config

    Fixes https://github.com/minvws/nl-covid19-notification-app-coordination-private/issues/32

    opened by 7hommay 8
  • [2020-08-23]: [VWS/Covid19NotificationApp] Exposure checks not working on iOS 14

    [2020-08-23]: [VWS/Covid19NotificationApp] Exposure checks not working on iOS 14

    Describe the bug, issue or concern

    I installed the CoronaMelder app the day it was released. The exposure log has remained empty since, despite the fact that numerous keys have been published since. Because I'm running iOS 14 beta 5, I assumed it might be an issue with the beta rather than the app.

    In an attempt to confirm this, I installed the Corona-Warn app (Germany) and switched regions. After about 24 hours, entries did start appearing in the exposure log, which makes me think this is an issue specific to the CoronaMelder app.

    Edit: Note that this doesn't just affect the app when it's running in the background like #37. When the app is foregrounded or restarted completely and kept running in the foreground for a while, the exposure log still remains empty.

    To Reproduce

    Steps to reproduce the behavior:

    1. Install iOS 14 beta 5
    2. Install CoronaMelder
    3. Run the app for an extended period (e.g. 24 hours)
    4. Go the Settings → Exposure Notification → Exposure Logging Status → Exposure checks
    5. Confirm that the exposure log remains empty

    Expected behavior

    Given that there are numerous publications and multiple update windows of 4 hours (?) have passed, I would expect the exposure log to contain entries.

    Smartphone (please complete the following information):

    • Device: iPhone X
    • OS: iOS 14 beta 5

    Governance

    • [x] I've read the contributing document https://github.com/minvws/.github/blob/master/CONTRIBUTING.md
    • [x] I've read and understand the Code of Conduct https://github.com/minvws/.github/blob/master/CODE_OF_CONDUCT.md
    • [x] I understand that any contributions or suggestions I made may make it into the actual code. I've read the License https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/LICENSE.txt and the contributor license agreement https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/CLA.md
    opened by erikvdwal 8
  • iOS 13.7-14.0.1 bug? App suddenly inactive.

    iOS 13.7-14.0.1 bug? App suddenly inactive.

    Describe the bug, issue or concern

    Without user intervention the app displays (after 24 hours?):

    "App is niet actief" (status.appState.card.title) "CoronaMelder werkt alleen als de noodzakelijke instellingen aanstaan." (status.appState.card.description)

    The app directs you to iOS Settings, where there is no toggle to turn it even more 'on'. Though settings does show CoronaMelder as 'inactive' ('inactief').

    In the App Store 'CoronaMelder' is shown as installed 'yesterday'. Which could possibly have caused this problem to show up after 24 hours.

    Bluetooth is on.

    iPhone 11 is rebooted.

    Never chose to disable the tracking.

    Issue did not resolve itself.

    To Reproduce

    Steps to reproduce the behavior:

    ?

    Expected behavior

    App / Apple API should stay active.

    Screenshots

    If applicable, add screenshots to help explain your problem.

    Desktop (please complete the following information):

    • OS: [e.g. iOS]
    • Browser [e.g. chrome, safari]
    • Version [e.g. 22]

    Smartphone (please complete the following information):

    • Device: iPhone 11
    • OS: iOS13.7
    • Browser [e.g. stock browser, safari]
    • Version [e.g. 22]

    Additional context

    Add any other context about the problem here.

    Governance

    • [ ] I've read the contributing document https://github.com/minvws/.github/blob/master/CONTRIBUTING.md
    • [ ] I've read and understand the Code of Conduct https://github.com/minvws/.github/blob/master/CODE_OF_CONDUCT.md
    • [ ] I understand that any contributions or suggestions I made may make it into the actual code. I've read the License https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/LICENSE.txt and the contributor license agreement https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/CLA.md
    opened by HenkPoley 7
  • Improve English translation

    Improve English translation

    Thanks to everyone involved with creating this app!

    I downloaded it today, and noticed that in the English translation there was something that may be a bit too literally translated from the Dutch equivalent, although I'm not a native English speaker either so correct me If I'm wrong :)

    @sbarow I believe you seem to be working most on localisation, so tagging you.

    opened by edwardmp 7
  • CI: Update pipelines to Xcode 12.2, iOS 14.2 and iPhone 12

    CI: Update pipelines to Xcode 12.2, iOS 14.2 and iPhone 12

    Updates the build.yml Azure pipeline to use:

    • Xcode 12.2
    • iOS 14.2
    • iPhone 12 (as simulation target)

    Using Xcode 12.2 improves support for the iPhone 12 series and devices on iOS 14.2.

    Also updates the CI.yml Github Actions workflow to target iPhone 12.

    opened by EwoutH 6
  • Don't use OpenSSL but Apple's Security services for signature verification

    Don't use OpenSSL but Apple's Security services for signature verification

    Describe the bug, issue or concern

    Vendoring OpenSSL puts burden on keeping it up to date manually; which is error prone.

    It currently is used for verifying PKCS#7/CMS detached signatures as defined https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/architecture/Crypto%20Raamwerk.md ; however Apple's Security services already has support for this built-in directly:

    https://developer.apple.com/documentation/security/cryptographic_message_syntax_services

    I would suggest using the Apple APIs directly instead of vendoring OpenSSL to minimize dependency footprint and attack surface.

    opened by arianvp 6
  • 08/07/20: VWS/Covid19NotificationApp - Can't enable notification exposure api on iOS 14 beta

    08/07/20: VWS/Covid19NotificationApp - Can't enable notification exposure api on iOS 14 beta

    Describe the bug, issue or concern

    App doesn't work with iOS 14

    To Reproduce

    Steps to reproduce the behavior:

    1. Following on-boarding
    2. On the screen where you can enable the exposure notification API, press "Aanzetten"

    OR

    1. Follow previous reproduce steps
    2. Press "Sla over" on the screen with the "Aanzetten" button
    3. Finish onboarding
    4. Press "Instellingen aanzetten"

    Expected behaviour

    The ability to enable the Exposure Notification API

    Screenshots

    Smartphone (please complete the following information):

    • Device: iPhone 11 Pro Max
    • OS: 14.0 (18A5301v)
    • Browser: irrelevant
    • Version: App version v0.1 (256)

    Additional context

    I'm running the iOS developer beta, seemingly the ExposureNotifcation API is not enabled for these iOS builds source: iOS & iPadOS 14 Beta 2 Release Notes

    Governance

    • [x] I've read the contributing document https://github.com/minvws/.github/blob/master/CONTRIBUTING.md
    • [x] I've read and understand the Code of Conduct https://github.com/minvws/.github/blob/master/CODE_OF_CONDUCT.md
    • [x] I understand that any contributions or suggestions I made may make it into the actual code. I've read the License https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/LICENSE.txt and the contributor license agreement https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/CLA.md
    opened by milo526 6
  • Cannot generate project files on Apple Silicon Macs

    Cannot generate project files on Apple Silicon Macs

    Describe the bug, issue or concern

    On Apple Silicon Macs you cannot generate the project files out-of-the-box. It fails while linking XcodeGen due to an architecture mismatch. This can be worked around by adding the correct architecture in Makefile:

    build_xcodegen:
    	cd vendor/XcodeGen && swift build -c release -Xswiftc "-target" -Xswiftc "arm64-apple-macosx10.13"
    

    Maybe something like uname -m (will return x86_64 on Intel and arm64 on AS) can be used in the Makefile to insert the correct architecture at run time.

    To Reproduce

    Steps to reproduce the behavior:

    1. Clone the repo on your M1 Mac (I'm using a Mac mini)
    2. make dev
    3. Wait for XcodeGen to build
    4. See error:
    ld: warning: ignoring file /Users/tieleman/Documents/Code/nl-covid19-notification-app-ios/vendor/XcodeGen/.build/arm64-apple-macosx/release/CYaml.build/src/api.c.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
    ld: warning: ignoring file /Users/tieleman/Documents/Code/nl-covid19-notification-app-ios/vendor/XcodeGen/.build/arm64-apple-macosx/release/CYaml.build/src/emitter.c.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
    ld: warning: ignoring file /Users/tieleman/Documents/Code/nl-covid19-notification-app-ios/vendor/XcodeGen/.build/arm64-apple-macosx/release/CYaml.build/src/parser.c.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
    ld: warning: ignoring file /Users/tieleman/Documents/Code/nl-covid19-notification-app-ios/vendor/XcodeGen/.build/arm64-apple-macosx/release/CYaml.build/src/reader.c.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
    ld: warning: ignoring file /Users/tieleman/Documents/Code/nl-covid19-notification-app-ios/vendor/XcodeGen/.build/arm64-apple-macosx/release/CYaml.build/src/scanner.c.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
    ld: warning: ignoring file /Users/tieleman/Documents/Code/nl-covid19-notification-app-ios/vendor/XcodeGen/.build/arm64-apple-macosx/release/CYaml.build/src/writer.c.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
    ld: warning: ignoring file /Users/tieleman/Documents/Code/nl-covid19-notification-app-ios/vendor/XcodeGen/.build/arm64-apple-macosx/release/XcodeProjCExt.build/XCPStringEscape.c.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
    ld: warning: ignoring file /Users/tieleman/Documents/Code/nl-covid19-notification-app-ios/vendor/XcodeGen/.build/arm64-apple-macosx/release/XcodeProjCExt.build/XCPHashing.c.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
    Undefined symbols for architecture x86_64:
      "_XCPComputeMD5", referenced from:
          _$sSS9XcodeProjE3md5SSvgSSSWXEfU_ in String+md5.swift.o
      "_XCPEscapedString", referenced from:
    
    [snip missing symbols]
    
      "_yaml_stream_start_event_initialize", referenced from:
          _$s4Yams7EmitterC4openyyKF in Emitter.swift.o
    ld: symbol(s) not found for architecture x86_64
    <unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)
    [17/18] Linking xcodegen
    make: *** [build_xcodegen] Error 1
    

    Expected behavior

    I'd expect the build to complete so I can run make project.

    Governance

    • [x] I've read the contributing document https://github.com/minvws/.github/blob/master/CONTRIBUTING.md
    • [x] I've read and understand the Code of Conduct https://github.com/minvws/.github/blob/master/CODE_OF_CONDUCT.md
    • [x] I understand that any contributions or suggestions I made may make it into the actual code. I've read the License https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/LICENSE.txt and the contributor license agreement https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/CLA.md
    mirrored-to-azure 
    opened by tieleman 5
  • Sync CoronaCheck releases to GitHub before roll out.

    Sync CoronaCheck releases to GitHub before roll out.

    Currently CoronaCheck version 2.1.1 and 2.1.3 are rolled out through the App Store, but not yet available in this GitHub repo. This undermines the open-source principals. Source code should be made first available on GitHub, before pushing to Apple and rolling out, so that it can be independently checked.

    Ping @roelspruit

    opened by EwoutH 5
  • Invalid “Technical problem” notifications being sent

    Invalid “Technical problem” notifications being sent

    Describe the bug, issue or concern

    I currently am not residing in the Netherlands, and have therefore changed my active region for exposure notifications — making it expected that Coronamelder would currently be inactive.

    Yet every evening, I get two notifications:

    • Technical problem: Coronamelder is not active at the moment. Check your settings.

    • Technical problem: The app wasn't able to check for 24 hours if the people you encountered later turned out to have corona.

    It doesn't seem like I can change anything in the app settings to turn it off — at least not for longer than 12 hours; I would expect it to be... well, expected behavior that it isn't active.

    I'm not sure if there's anything that can be done about this — not sure if it can be checked if another region is active, for example?

    To Reproduce

    Steps to reproduce the behavior:

    1. (Optional?) Activate exposure notifications for an app / country that is not Coronamelder / the Netherlands
    2. Go to the Netherlands, and install + activate the exposure notifications in Coronamelder
    3. Activate the other app again, therefore (implicitly) deactivating Coronamelder
    4. Observe the notifications being sent.

    Expected behavior

    As another active region is checking for exposure notifications, perhaps send a notification once, but not daily? And don't assume it's a technical problem.

    Smartphone (please complete the following information):

    • Device: iPhone 12 Pro
    • OS: iOS 15.1.1
    • Browser stock browser, safari
    • Version 2.5.1 (129420-3cbcad7)

    Governance

    • [x] I've read the contributing document https://github.com/minvws/.github/blob/master/CONTRIBUTING.md
    • [x] I've read and understand the Code of Conduct https://github.com/minvws/.github/blob/master/CODE_OF_CONDUCT.md
    • [x] I understand that any contributions or suggestions I made may make it into the actual code. I've read the License https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/LICENSE.txt and the contributor license agreement https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/CLA.md
    opened by BasThomas 0
  • can someone please repair the links to the architecture- and design- pages of the project?

    can someone please repair the links to the architecture- and design- pages of the project?

    Describe the bug, issue or concern

    A clear and concise description of what the bug, issue or concern is is.

    E.g.

    To Reproduce

    Steps to reproduce the behavior:

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    Expected behavior

    A clear and concise description of what you expected to happen.

    Screenshots

    If applicable, add screenshots to help explain your problem.

    Desktop (please complete the following information):

    • OS: [e.g. iOS]
    • Browser [e.g. chrome, safari]
    • Version [e.g. 22]

    Smartphone (please complete the following information):

    • Device: [e.g. iPhone6]
    • OS: [e.g. iOS8.1]
    • Browser [e.g. stock browser, safari]
    • Version [e.g. 22]

    Additional context

    Add any other context about the problem here.

    Governance

    • [ ] I've read the contributing document https://github.com/minvws/.github/blob/master/CONTRIBUTING.md
    • [ ] I've read and understand the Code of Conduct https://github.com/minvws/.github/blob/master/CODE_OF_CONDUCT.md
    • [ ] I understand that any contributions or suggestions I made may make it into the actual code. I've read the License https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/LICENSE.txt and the contributor license agreement https://github.com/minvws/nl-covid19-notification-app-coordination/blob/master/CLA.md
    opened by mrvchaudron 1
  • Share documentation on test and/or QA approach

    Share documentation on test and/or QA approach

    For test & quality purposes, can you share documentation (e.g. test strategy, plan, risk analysis) so one can possibly investigate known and yet unkown areas of interest?

    opened by nthijssen 1
Owner
Ministerie van Volksgezondheid, Welzijn en Sport
Ministerie van Volksgezondheid, Welzijn en Sport
:globe_with_meridians: Small iOS app to show some COVID-19 health, data, news and tweets

covid19.swift Small iOS app to show some COVID-19 health, data, news and tweets ⚡ Requirements Xcode 12, iOS 14 Credits API: COVID-19 API: News Tweets

null 26 Nov 30, 2022
Open source iOS app to track COVID-19 cases in a beautiful, easy-to-use interface

Covidcheck Covidcheck is an app that allows people to track COVID-19 cases in an easy-to-use interface to increase awareness and preparation. Unfortun

Julian Schiavo 255 Aug 11, 2022
A simple App to Track the status of Covid-19 around the World. Using SwiftUI and GraphQL

CovidUI CovidUI is a simple App to Track the status of Covid-19 around the World. This is a simple App I made to track the spread of Covid-19 for me a

Mathias Quintero 77 Dec 14, 2022
This app keeps you informed about COVID-19 risks.

Covid Update Note: To run the app in your local environment, please input your Covid Act Now API key in the file: "CovidUpdate/Covid Update/Model/Covi

Tina Ho 0 Nov 5, 2021
KovidStatz - A very simple app to display covid stats worldwide or country wise

KovidStatz A very simple app to display covid stats worldwide or country wise. T

Shwait Kumar 0 Jan 17, 2022
🇬🇧 UK COVID-19 Statistics app built using SwiftUI

???? UK COVID-19 Statistics This app was created with the intention of publishing to the AppStore. The primary purpose of this app is to share informa

An Trinh 43 Nov 7, 2022
Covid Update Feed: An app that fetches data from the UK government's API for coronavirus announcements

Covid Update Feed Covid Update Feed is a single screen app that fetches data fro

Duncan Kent 0 Feb 16, 2022
Israel's Ministry of Health's COVID-19 Exposure Prevention App

Hamagen Israel's Ministry of Health's COVID-19 exposure prevention app. Hacking You're awesome. See CONTRIBUTING.md. Components HaMagen is based on re

Israel's Ministry of Health 507 Dec 14, 2022
COVID-19 SwiftUI Demo

COVID-19_SwiftUI_Demo About COVID-19_SwiftUI_Demo is the coronavirus information application using SwiftUI which is first introduced in WWDC19 keynote

Hưng Thái 17 Feb 9, 2022
Covid-19/Pneumonia Detection Application through Chest Radiographs

CoviScan Covid-19/Pneumonia Detection Application through Chest Radiographs Curr

Aryan Shrivastava 0 Dec 18, 2021
iOS14 widget to display/launch your COVID-19 vaccines

Vaccinated Widget to display/launch your recent COVID-19 vaccines. WIP.

Ellen Li 1 Jan 8, 2022
Covidapp - Stop COVID-19 Hrvatska

Stop COVID-19 Hrvatska Description Kako bi usporili širenje bolesti COVID-19 međ

null 0 Feb 12, 2022
Taiwan Social Distancing App - iOS

social-distancing-ios 臺灣社交距離 App 由衛生福利部疾病管制署與台灣人工智慧實驗室共同研發,提供臺灣地區用戶接收 COVID-19 接觸通知,並提醒收到接觸通知的用戶連繫當地衛生局,以減少傳染風險。 ● 保障個人隱私 利用手機藍牙功能來估計社交互動,資料以匿名方式儲存在個人

AILabs.tw 280 Oct 24, 2022
Coronavirus tracker app for iOS & macOS with maps & charts

Features Live data: Shows the most recent data, and updates automatically. Distribution map with two levels of details: Countries: When the user zooms

Mhd Hejazi 1.5k Dec 28, 2022
Corona Virus Tracker & Advices iOS App with SwiftUI

Corona Virus Stats & Advices App with SwiftUI Features Current statistics of global total confirmed, deaths, recovered cases. Statistics of countries

Alfian Losari 358 Dec 27, 2022
Swift iOS app that tests if you are depressed

Depressed? is an app that asks you the nine questions from the PHQ-9 questionnaire to determine if you are depressed. The questionnaire is implemented

Christian Lobach 92 Dec 16, 2022
Glucosio iOS App

Glucosio has moved to Gitlab! Visit our project repos on Gitlab Glucosio for iOS Glucosio for iOS, a user centered free and open source app for Diabet

Glucosio 51 Jul 23, 2022
Intuitive cycling tracker app for iOS built with SwiftUI using Xcode. Features live route tracking, live metrics, storage of past cycling routes and many customization settings.

GoCycling Available on the iOS App Store https://apps.apple.com/app/go-cycling/id1565861313 App Icon About Go Cycling is a cycling tracker app built e

Anthony Hopkins 64 Dec 19, 2022
OpenCovidTrace iOS App – Fully Private Open Source Contact Tracing

OpenCovidTrace iOS App Visit https://opencovidtrace.org to learn more. WARNING: Issue with DP3T SDK DP3T switched to Exposure Notification Framework o

Open Covid Trace 20 Dec 27, 2022