{"id":32588138,"url":"https://github.com/arthurdapaz/voir","last_synced_at":"2025-10-29T23:55:07.957Z","repository":{"id":192352804,"uuid":"683521987","full_name":"arthurdapaz/Voir","owner":"arthurdapaz","description":"Easy MVVM Architecture for Swift UIKit","archived":false,"fork":false,"pushed_at":"2023-09-16T19:07:47.000Z","size":1126,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2023-12-16T06:49:40.433Z","etag":null,"topics":["architecture","boilerplate","builder-pattern","clean-architecture","clean-code","design-pattern","ios","mvvm","swift","template"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arthurdapaz.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":"2023-08-26T20:51:00.000Z","updated_at":"2023-09-13T03:36:24.000Z","dependencies_parsed_at":"2023-09-04T11:38:08.360Z","dependency_job_id":null,"html_url":"https://github.com/arthurdapaz/Voir","commit_stats":null,"previous_names":["arthurdapaz/voir"],"tags_count":1,"template":null,"template_full_name":null,"purl":"pkg:github/arthurdapaz/Voir","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdapaz%2FVoir","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdapaz%2FVoir/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdapaz%2FVoir/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdapaz%2FVoir/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arthurdapaz","download_url":"https://codeload.github.com/arthurdapaz/Voir/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdapaz%2FVoir/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281719939,"owners_count":26549881,"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","status":"online","status_checked_at":"2025-10-29T02:00:06.901Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["architecture","boilerplate","builder-pattern","clean-architecture","clean-code","design-pattern","ios","mvvm","swift","template"],"created_at":"2025-10-29T23:54:45.147Z","updated_at":"2025-10-29T23:55:07.946Z","avatar_url":"https://github.com/arthurdapaz.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg align=\"right\" src=\"/Support/VoirDemo/VoirDemo/Application/Resources/Assets.xcassets/voir.imageset/voir-image-transparent.png\" width=30%\u003e\n\n# Voir\n\n**Voir** is a tiny Swift framework designed to offer a fully functional and easy-to-use MVVM architecture for iOS app development, tailored for the braves who are still relying on UIKit.\n\nThe name **“Voir”** originates from the French word meaning **“to see”**, reflecting its objective of enhancing the visibility and clarity of your app's architecture.\n\nThis project was initiated to support a presentation at a conference that centers around delivering insightful topics to the tech community. The central theme of my talk is:\n\n```swift\nElegant Development: poetry and beauty in Swift code.\n```\n\u003cbr/\u003e\n\u003cp align=\"left\"\u003e\n\n| Pronunciation **/vwaʁ/** | Purpose |\n|-|-|\n| \u003cimg src=\"https://github.com/arthurdapaz/Voir/assets/2267843/3cf67bd1-b594-4e1b-8275-e445bdb975bd\"\u003e | Modern iOS app development requires a robust architecture that can handle complexity, maintainability, and separation of concerns. **Voir** aims to simplify this process by offering a clear and structured way to implement the MVVM (Model-View-ViewModel) architecture. MVVM is a popular architectural pattern that helps developers organize their codebase, improve testability, and enhance collaboration between team members. |\n| Listen Voir 👆 | [\u003cimg align=\"right\" src=\"https://github.com/arthurdapaz/Voir/actions/workflows/swift.yml/badge.svg\"\u003e](https://github.com/arthurdapaz/Voir/actions/workflows/swift.yml) |\n\n\u003c/p\u003e\n\n## Features\n\n- **MVVM Architecture**: Voir provides a solid foundation for implementing the MVVM architecture in your iOS apps. It separates concerns by dividing the application logic into three main components: Model, View, and ViewModel.\n\n- **Reusable Components**: The package introduces reusable components such as `VoirComponent` and `VoirModel`, making it easier to structure your app's UI and business logic.\n\n- **Lifecycle Observations**: Voir provides built-in lifecycle observation mechanism that automatically notify its components. This feature aids in efficiently managing resource allocation and deallocation. This aspect of Voir almost eliminates the need for touching a UIViewController again, as the `VoirController` efficiently relays all of its lifecycle events to both `VoirComponent` and `VoirModel`.\n\n- **Builder Patterns**: The framework includes builder patterns (`VoirBuilder` and `ConstraintsBuilder`) that simplify the process of constructing complex UI hierarchies and defining layout constraints. Together, these patterns provide a beautiful domain-specific language (DSL) that not only enhances your code's aesthetics but also makes it completely understandable and easy to maintain when designing, positioning, and configuring UI elements. `Voir Builer` is also a separated target inside the package and can be used without outside the MVVM architecture.\n\n- **View Controller Helper**: With the `viewController` property extension on `UIView`, you can easily find the parent UIViewController of any view, aiding in navigation and communication within your app.\n\n## Usage\n\n1. To integrate Voir into your project, simply include the framework as a Swift package.\n2. There is also a `.xctemplate` to easily create a Voir MVVM Scene. Check the recording below 👇 \n\nhttps://github.com/arthurdapaz/Voir/assets/2267843/0e2d3080-c8e7-4d8b-842d-b5b3e396fa84\n\n## Template Installer\n\n*TemplateInstaller* is a small Swift command-line interface tool whose sole purpose is to copy the `Support/Voir Scene.xctemplate` to the necessary destination, enabling the template to appear in Xcode's `File \u003e New` selection window.\n\n**1)** On your terminal, inside the cloned project folder, just run:\n\n```bash\nswift run\n```\n\n**or 2)** Prefer the manual labor?\n\n```bash\nXCPATH=\"~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/\"\nmkdir -p \"$XCPATH\"\ncp \"Support/Voir Scene.xctemplate\" \"$XCPATH\"\n```\n\nFor more detailed usage instructions and examples, refer to the `DemoApp` inside `Support/` folder in the repository.\n\n## DemoApp\n\nCheckout **DemoApp.xcproject** at `Support/VoirDemo` folder. It has a small demonstration on how you can take advantage of every feature Voir can offer.\n\n## Architecture Overview\n\n![voir-flowchart-animated](https://github.com/arthurdapaz/Voir/assets/2267843/04b2046d-6958-4e00-9cd7-0e6c5d2a4787)\n\nAre you on **dark mode**? \u003csup\u003eTap 👆 to see full white background.\u003c/sup\u003e\n\n## Contributing\n\nContributions to Voir are welcome! If you find a bug, want to request a feature, or would like to improve the code, please submit an issue or pull request.\n\n## License\n\nVoir is unlicensed. You are free to use and modify. See LICENSE for more details.\n\nVoir is currently developed and maintained by [Arthur da Paz](https://github.com/arthurdapaz).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthurdapaz%2Fvoir","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farthurdapaz%2Fvoir","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthurdapaz%2Fvoir/lists"}