{"id":28404995,"url":"https://github.com/crisfeim/apply-bruno-roscha-modularization-article","last_synced_at":"2025-10-04T02:32:04.875Z","repository":{"id":292573484,"uuid":"980565960","full_name":"crisfeim/apply-bruno-roscha-modularization-article","owner":"crisfeim","description":"👨‍🏫 Applying the principles exposed on the modularizaton article by Bruno Rocha","archived":false,"fork":false,"pushed_at":"2025-05-26T10:37:08.000Z","size":265,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-02T06:08:22.707Z","etag":null,"topics":["modular-architecture","modularization","study","xcframeworks"],"latest_commit_sha":null,"homepage":"https://www.runway.team/blog/how-to-improve-ios-build-times-with-modularization","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crisfeim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null}},"created_at":"2025-05-09T10:41:18.000Z","updated_at":"2025-05-26T10:37:11.000Z","dependencies_parsed_at":"2025-06-03T06:51:42.947Z","dependency_job_id":null,"html_url":"https://github.com/crisfeim/apply-bruno-roscha-modularization-article","commit_stats":null,"previous_names":["crisfeim/study-bruno-roscha-modularization","crisfeim/apply-bruno-roscha-modularization-article"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/crisfeim/apply-bruno-roscha-modularization-article","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crisfeim%2Fapply-bruno-roscha-modularization-article","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crisfeim%2Fapply-bruno-roscha-modularization-article/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crisfeim%2Fapply-bruno-roscha-modularization-article/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crisfeim%2Fapply-bruno-roscha-modularization-article/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crisfeim","download_url":"https://codeload.github.com/crisfeim/apply-bruno-roscha-modularization-article/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crisfeim%2Fapply-bruno-roscha-modularization-article/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261504917,"owners_count":23168926,"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":["modular-architecture","modularization","study","xcframeworks"],"created_at":"2025-06-01T21:10:10.595Z","updated_at":"2025-10-04T02:32:04.425Z","avatar_url":"https://github.com/crisfeim.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"Practice project for integrating and learning the principles exposed on the [modularization article by Bruno Rocha](https://www.runway.team/blog/how-to-improve-ios-build-times-with-modularization)\n\nThe second commit contains the implementation of the dependency graph showcased at the beginning of the article:\n\n![](modular-archi-1.png)\n\nAs described by the article, this scales badly as on each change of the HTTPClient, a recompile is needed for all the modules that use it.\n\nInstead:\n\n- We made those modules depend on a protocol\n- We create a separate module for the concrete implementation\n- The main module imports everything, assembles the modules and injects the concrete implementation.\n\nA protocol isn't likely to change much during our dev (susceptible to change mostly at the beginning but rarely later)\n\nIf the HTTPClient implementation module changes, any module that depends on the HTTPClientProtocol will not be recompiled, thus, keeping compiling times fast.\n\nThe dependencies become horizontal, here's an updated dependency diagram:\n\n![](HorizontalDependencies.png)\n\nThird commit partially implements this (for simplicity I only HTTPClient a protocol)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrisfeim%2Fapply-bruno-roscha-modularization-article","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrisfeim%2Fapply-bruno-roscha-modularization-article","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrisfeim%2Fapply-bruno-roscha-modularization-article/lists"}