{"id":13693854,"url":"https://github.com/CrunchyBagel/TracePrivately","last_synced_at":"2025-05-03T00:32:09.719Z","repository":{"id":204611212,"uuid":"256347842","full_name":"CrunchyBagel/TracePrivately","owner":"CrunchyBagel","description":"A privacy-focused app using Apple's soon-to-be-released contact tracing framework.","archived":false,"fork":false,"pushed_at":"2020-05-24T06:08:34.000Z","size":5534,"stargazers_count":350,"open_issues_count":23,"forks_count":27,"subscribers_count":26,"default_branch":"master","last_synced_at":"2024-11-12T20:46:16.444Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CrunchyBagel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-04-16T22:53:58.000Z","updated_at":"2024-09-10T15:00:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"72c482f3-927d-4ea3-b780-6d6b1f7f116a","html_url":"https://github.com/CrunchyBagel/TracePrivately","commit_stats":null,"previous_names":["crunchybagel/traceprivately"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrunchyBagel%2FTracePrivately","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrunchyBagel%2FTracePrivately/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrunchyBagel%2FTracePrivately/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrunchyBagel%2FTracePrivately/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CrunchyBagel","download_url":"https://codeload.github.com/CrunchyBagel/TracePrivately/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252126659,"owners_count":21698964,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T17:01:19.200Z","updated_at":"2025-05-03T00:32:04.709Z","avatar_url":"https://github.com/CrunchyBagel.png","language":"Swift","funding_links":[],"categories":["Health"],"sub_categories":["Contact Tracing Reference"],"readme":"# TracePrivately\nA functioning app using Apple's contact tracing framework, as documented here:\n\nhttps://www.apple.com/covid19/contacttracing\n\n**7 May 2020:** App is now updated for iOS 13.5 beta 2 changes. The framework now has a more defined structure for how the server should work, so we'll likely be making some additional changes to further integrate with protocol buffers.\n\n*Note: To run the app the Apple framework, a special entitlement is required, only available to authorized organizations. [More Info](https://github.com/CrunchyBagel/TracePrivately/issues/57)*\n\nThis app will be evolving quickly as I'm trying to publish new functionality as quickly as possible.\n\n## Objectives\n\n* Create a fully-functioning prototype that governments can use as an almost-turnkey solution that they can rebrand as necessary and use\n* Implement correct security and privacy principles to maximise uptake of said government apps\n* Remain open source for independent verification\n* Properly use the Apple / Google contact tracing specification\n* Accessible to as many users as possible:\n    * Localized to many langauges\n    * Adopt correct accessibility principles and functions\n    * Support older devices\n* Be easily configurable to suit needs of different jurisdictions:\n    * Different privacy statements\n    * Different data gathered for positive diagnoses\n    * Different server/authorization needs\n    * Different thresholds to define a contact (attenuation and duration)\n* Create a functioning server prototype that can be used as a basis for more robust solutions that fit into governments' existing architecture.\n\n## How Can You Help?\n\nThere are a number of ways you can help. You can:\n\n* We need non-English translations: https://github.com/CrunchyBagel/TracePrivately/issues/30\n* We need an Android implementation: https://github.com/CrunchyBagel/TracePrivately/issues/32\n* We need testing (download, install, try the app - submit any issues you find). Pull requests with unit tests also welcome.\n* Suggestions, ideas, thoughts about any aspect of the app.\n\n## Instructions\n\n### Key Server\n\nThe mobile app communicates with a server to retrieve infected keys. API specification: https://github.com/CrunchyBagel/TracePrivately/blob/master/KeyServer/KeyServer.yaml\n\nCurrent server options:\n\n1. *PHP*: This project contains a reference implementation in PHP: https://github.com/CrunchyBagel/TracePrivately/tree/master/KeyServer\n2. *Ruby*: https://github.com/tatey/trace_privately by @tatey.\n    * Includes a 1-click setup process for quick deployment\n3. *Vapor (Swift)*: https://github.com/kevinrmblr/traceprivately-server\n4. *Go*: https://github.com/dstotijn/ct-diag-server\n5. Create your own, either according to the above OpenAPI specification or by creating your own adapter implementing `KeyServerAdapter`.\n\n### iOS App\n\n1. Configure `KeyServer.plist` to point to your server\n    * The endpoints are constructed by joining `BaseUrl` with each corresponding endpoint value.\n    * Authentication is optional. Remove the `Authenticaftion` key to disable. Otherwise, the types available are:\n      * `receipt`: Submit the App Store receipt data to the `auth` endpoint. This data isn't available in development\n      * `deviceCheck`: Submit the info from `DeviceCheck` to the `auth` endpoint. This is only available from iOS 11.\n2. Configure `ExposureNotifications.plist` to control how exposures are scored.\n    * This is based on weighting of attenuation, duration, days since exposed and risk level.\n    * Defaults in app are based on Apple's example in their documentation.\n    * Refer to Apple's documentation for more info: https://www.apple.com/covid19/contacttracing\n3. Configure `SubmitConfig.plist` if you want the user to submit additional information with a positive diagnosis.\n    * This system is extensible and localizable.\n    * You will need to configure your server to save and use this data accordingly.\n    * For example, your workflow for approving new infected keys may involve reviewing this data before approving the submission.\n4. Build and run in Xcode\n\n### Workflow\n\nIf you're using the sample PHP implementation, it goes something like:\n\n1. App: Enable tracing in the app\n2. App: Submit that you're infected\n3. Server: Approve submission using the `./tools/pending.php` and `./tools/approve.php` scripts.\n\nThose keys are now in the infected list so they can be matched against.\n\n## Localizations\n\nIf you can help translate the app, please help our crowd-sourced effort here:\n\nhttps://traceprivately.oneskyapp.com/collaboration/project?id=170066\n\nCurrently available in:\nEnglish, French, Spanish (ES, MX), Portuguese (PT, BR), German, Chinese (Simplified and Traditional), Croatian, Serbian, Japanese, Estonian, Latvian, Dutch, Italian, Ukrainian, Hindi, Arabic, Catalan, Hebrew.\n\n## Screenshots\n\n* Updated Demo Video (21-Apr-20): https://youtu.be/EAT3p-v2y9k\n* Original Demo Video (17-Apr-20): https://youtu.be/rVaz8VQLoaE\n\n![Screenshots](https://github.com/CrunchyBagel/TracePrivately/blob/master/screenshots/screenshots.png?raw=true)\n\nThis screenshot shows how you can use the start/stop tracing shortcuts with automations. User is still manually prompted to start tracing, but this will initiate it automatically when you leave home:\n\n![Siri Shortcuts](https://github.com/CrunchyBagel/TracePrivately/blob/master/screenshots/shortcuts.png?raw=true)\n\n## Other\n\n* Please submit suggestions and pull requests so this can function as best as possible.\n* Refer to the `KeyServer` directory for information about the server-side aspect of contact tracing.\n* Android? If you would like to build a clone of this iOS app in Android we can include or link to it from this repo.\n\n## License\n\nRefer to the `LICENSE` file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCrunchyBagel%2FTracePrivately","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FCrunchyBagel%2FTracePrivately","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCrunchyBagel%2FTracePrivately/lists"}