{"id":13625301,"url":"https://github.com/protonpass/ios-pass","last_synced_at":"2025-04-12T19:52:25.155Z","repository":{"id":176826908,"uuid":"656096666","full_name":"protonpass/ios-pass","owner":"protonpass","description":"iOS client for Proton Pass","archived":false,"fork":false,"pushed_at":"2025-04-10T19:14:43.000Z","size":155535,"stargazers_count":215,"open_issues_count":0,"forks_count":27,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-12T19:52:11.312Z","etag":null,"topics":["end-to-end-encryption","ios-app","password-manager","proton"],"latest_commit_sha":null,"homepage":"https://apps.apple.com/us/app/proton-pass-password-manager/id6443490629","language":"Swift","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/protonpass.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-20T08:52:20.000Z","updated_at":"2025-04-10T19:14:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"d89594ce-d0f8-4772-8e7a-eb57dd5709b5","html_url":"https://github.com/protonpass/ios-pass","commit_stats":{"total_commits":4203,"total_committers":17,"mean_commits":"247.23529411764707","dds":0.2859862003330954,"last_synced_commit":"ebb93cf05d8ce25c66f782eacc39696fa77b86e0"},"previous_names":["protonpass/ios-pass"],"tags_count":43,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protonpass%2Fios-pass","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protonpass%2Fios-pass/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protonpass%2Fios-pass/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protonpass%2Fios-pass/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/protonpass","download_url":"https://codeload.github.com/protonpass/ios-pass/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248625506,"owners_count":21135513,"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":["end-to-end-encryption","ios-app","password-manager","proton"],"created_at":"2024-08-01T21:01:53.695Z","updated_at":"2025-04-12T19:52:25.115Z","avatar_url":"https://github.com/protonpass.png","language":"Swift","funding_links":[],"categories":["Swift"],"sub_categories":[],"readme":"# Proton Pass\nThis repository contains the source code for the Proton Pass iOS application. \n\n* [Installation](#installation)\n* [Technical Choices](#technical-choices)\n    * [UI](#ui)\n    * [Dependency manager](#dependency-manager)\n    * [Modularization](#modularization)\n* [Debug](#debug)\n    * [Debug network traffic](#debug-network-traffic)\n    * [Debug Sentry activities](#debug-sentry-activities)\n* [Tools](#tools)\n\t* [Dependency injection](#dependency-injection) \n\t* [SwiftLint](#swiftlint)\n\t* [SwiftFormat](#swiftformat)\n    * [Sourcery](#sourcery)\n* [Changelog](#changelog)\n* [Contributing](#contributing)\n* [License](#license)\n\n# Installation\n\nThe app targets iOS 16 and above. Make sure you have Xcode 15+ installed, check out the repo and open `ProtonPass.xcodeproj` to run the project.\n\n# Technical Choices\n\n## UI\n\n- All the views are written in SwiftUI\n- Navigation between views are done using UIKit:\n  - `UINavigationController` when running on iPhones\n  - `UISplitViewController` when running on iPads\n\n## Dependency manager\nCocoaPods \u0026 Swift Package Manager\n\n## Modularization\nThe project is modularized into targets:\n\n- iOS: the main app target\n- AutoFill: the AutoFill extension\n\nAnd local Swift packages:\n\n- Entities: models\n- Client: network layer, database operations, repositories...\n- Core: coordinator, domain parser, password/passphrase generator, 2FA token generator, useful extensions...\n- DesignSystem: UI utilities (custom views, view modifiers, icons, colors...)\n- Macro: macro\n- UseCases: use cases, interface for Rust library\n\n# Debug\n\n## Debug network traffic\nYou can print to the console information related to requests (HTTP method, path, headers, \u0026 parameters) and responses (HTTP method, status code, url, headers \u0026 result) by activating `me.proton.pass.NetworkDebug` environment variable in the scheme configuration. This is disabled by default.\n\n## Debug Sentry activities\nYou can print to the console Sentry activities by activating `me.proton.pass.SentryDebug` environment variable in the scheme configuration. This is disabled by default.\n\n# Tools\n\n## Dependency injection\n\nThe main DI tool used is [Factory](https://github.com/hmlongco/Factory). It is very light but yet very powerful.\n\n## SwiftLint\n\nThis is the main linter for the project.\nTo install run the following [Homebrew](https://brew.sh/) command:\n\n```bash\nbrew install swiftlint\n```\n\nIf you don't have this tool installed please refer to the following link to set it up: [SwiftLint](https://github.com/realm/SwiftLint)\nThe configuration for this tool can be found in the `.swiftlint.yml` file.\n\n\n## SwiftFormat\n\nThis is the main code reformatting tool for the project.\nTo install run the following [Homebrew](https://brew.sh/) command:\n\n```bash\nbrew install swiftformat\n```\n\nIf you don't have this tool installed please refer to the following link to set it up: [SwiftFormat](https://github.com/nicklockwood/SwiftFormat)\nThe configuration for this tool can be found in the `.swiftformat` file\n\n## Sourcery\n\nThis is a tool to easily generate mocks for unit testing. \nTo install it run the following [Homebrew](https://brew.sh/) command:\n\n```bash\nbrew install sourcery\n```\n\nIf you don't have this tool installed please refer to the following link to set it up: [Sourcery](https://github.com/krzysztofzablocki/Sourcery)\nThe configuration for this tool can be found in the `.sourcery.yml` file.\nAt the moment the configuration only take into account iOSTests but it could be extended to take into account dependencies in the near futur.\n\n**To Generate the mocks** please follow these instructions:\n- First you need to annotate your protocol like following:\n```swift\n// sourcery: AutoMockable\nprotocol Test {\n // implementation of protocol\n}\n``` \n\n- Then run the following CLI command \n\n```bash\nsourcery\n```\n\nYou should now see the new mocks appear in the `Generated` subfolder of iOSTests target\n\n# Changelog\nFor a detailed list of changes in each version of the project, please refer to the [CHANGELOG](CHANGELOG.md) file.\n\n\n# Contributing\n\nWe value and welcome contributions from the community to help make this project better.\n\nPlease note that while we encourage contributions, we have a specific process in place for handling pull requests (PR) and merging changes. To ensure a smooth workflow, we manage contributions internally on our GitLab repository rather than directly on GitHub.\n\nHere's how you can contribute:\n\n1. **Fork the Repository**: Start by forking this repository to your own GitHub account.\n\n2. **Make Your Changes**: Create a new branch from `main` in your forked repository and make the necessary changes.\n\n3. **Test Your Changes**: Ensure that all tests, swiftlint check and swiftformat check are passing.\n\nTo do a swiftlint check, run this command:\n\n```bash\n\u003e swiftlint\n```\n\nTo do a swiftformat check, run this command:\n\n```bash\n\u003e swiftformat --lint .\n```\n\nTo let swiftformat format your code, run this command:\n\n```bash\n\u003e swiftformat .\n```\n\n4. **Submit a PR**: Once your changes are ready for review, you can submit a PR on this repository. Our team will review your PR, provide feedback, and collaborate with you if any adjustments are needed.\n\n5. **Collaborate**: Feel free to engage in discussions and address any feedback or questions related to your PR. Collaboration is key to delivering high-quality contributions.\n\n6. **Finalization**: Once the PR is approved and meets our criteria, it will be merged into our internal Gitlab repository. Subsequently, your PR will be closed, and your changes will be incorporated when we periodically synchronize updates to GitHub.\n\n\n# License\nThe code and data files in this distribution are licensed under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See \u003chttps://www.gnu.org/licenses/\u003e for a copy of this license.\n\nSee [LICENSE](LICENSE) file\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprotonpass%2Fios-pass","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprotonpass%2Fios-pass","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprotonpass%2Fios-pass/lists"}