{"id":3202,"url":"https://github.com/swiftyfinch/Rugby","last_synced_at":"2025-08-06T16:32:23.229Z","repository":{"id":37017178,"uuid":"338548369","full_name":"swiftyfinch/Rugby","owner":"swiftyfinch","description":"🏈 Cache CocoaPods for faster rebuild and indexing Xcode project.","archived":false,"fork":false,"pushed_at":"2024-04-11T16:48:52.000Z","size":5644,"stargazers_count":648,"open_issues_count":0,"forks_count":51,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-04-14T16:14:23.472Z","etag":null,"topics":["cache-cocoapods","cache-pods","cocoapods","cocoapods-binary","cocoapods-frameworks","cocoapods-optimisation","cocoapods-performance","compile-time","hacktoberfest","macos","prebuild-pods","precompiled-frameworks","swift","xcode","xcode-indexing","xcode-performance"],"latest_commit_sha":null,"homepage":"https://swiftyfinch.github.io/tags/rugby/","language":"Swift","has_issues":false,"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/swiftyfinch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"custom":["https://boosty.to/swiftyfinch"]}},"created_at":"2021-02-13T10:23:57.000Z","updated_at":"2024-04-17T07:03:34.842Z","dependencies_parsed_at":"2023-02-14T18:31:11.262Z","dependency_job_id":"ef103d31-3a43-436e-ad74-84e2b3849eee","html_url":"https://github.com/swiftyfinch/Rugby","commit_stats":{"total_commits":1129,"total_committers":21,"mean_commits":53.76190476190476,"dds":"0.43489813994685567","last_synced_commit":"804c7d871c7df86404550f72e934358fa3949e24"},"previous_names":[],"tags_count":89,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swiftyfinch%2FRugby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swiftyfinch%2FRugby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swiftyfinch%2FRugby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swiftyfinch%2FRugby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/swiftyfinch","download_url":"https://codeload.github.com/swiftyfinch/Rugby/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228657807,"owners_count":17952703,"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":["cache-cocoapods","cache-pods","cocoapods","cocoapods-binary","cocoapods-frameworks","cocoapods-optimisation","cocoapods-performance","compile-time","hacktoberfest","macos","prebuild-pods","precompiled-frameworks","swift","xcode","xcode-indexing","xcode-performance"],"created_at":"2024-01-05T20:16:34.333Z","updated_at":"2025-08-06T16:32:23.214Z","avatar_url":"https://github.com/swiftyfinch.png","language":"Swift","funding_links":["https://boosty.to/swiftyfinch"],"categories":["Tools","Libs","Utilities","Swift","Applications","Developer Tools"],"sub_categories":["Web View","Utility","Text","Utilities","🛠️ Utilities (79)"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/64660122/140398205-9328806e-897d-483d-a898-c90f66840196.png\" width=600 /\u003e\n  \u003cbr\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Platform-macOS-2679eb\" /\u003e\n  \u003ca href=\"https://swiftpackageindex.com/swiftyfinch/Rugby\"\u003e\u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fswiftyfinch%2FRugby%2Fbadge%3Ftype%3Dswift-versions\" /\u003e\u003c/a\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://swiftpackageindex.com/swiftyfinch/Rugby/main/documentation/rugbyfoundation\"\u003e\u003cimg src=\"https://img.shields.io/badge/Docs-4BA057?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIxLjQiIHk9IjIuMzUiIHdpZHRoPSIxMy4yIiBoZWlnaHQ9IjkuOCIgc3R5bGU9ImZpbGw6ICNkZmRiZjM7IG9wYWNpdHk6IDAuMzMzMzM7Ii8%2BPHBhdGggc3R5bGU9ImZpbGw6ICNmZmY7IiBkPSJNMCwxLjc1YzAsLTAuNCAwLjM1LC0wLjg1IDAuNzUsLTAuODVjMi43LDAgNS4yNSwtMC42IDcuMjUsMS40YzIsLTIgNC4yNSwtMS40IDcuMjUsLTEuNGMwLjQsMCAwLjc1LDAuNCAwLjc1LDAuODV2MTAuNWMwLDAuNCAtMC4zNSwwLjc1IC0wLjc1LDAuNzVjLTIuNSwwIC00LjgsLTAuNiAtNi43NSwxLjNjLTAuMjUsMC4yNSAtMC43NSwwLjI1IC0xLDBjLTEuNzUsLTEuNyAtNC40NSwtMS4zIC02Ljc1LC0xLjNjLTAuNCwwIC0wLjc1LC0wLjM1IC0wLjc1LC0wLjc1em03LjI1LDEwLjI1di03LjI1Yy0wLjA4LC0yLjk1IC0zLjYsLTIuMjUgLTUuNzUsLTIuMjV2OWMxLjk1LDAgMy45NSwtMC4zIDUuNzUsMC41em0xLjUsLTcuMjV2Ny4yNWMxLjc1LC0wLjg1IDMuODUsLTAuNSA1Ljc1LC0wLjV2LTljLTIuMjUsMCAtNS43NSwtMC43IC01Ljc1LDIuMjV6Ii8%2BPC9zdmc%2BCg%3D%3D\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://app.codecov.io/gh/swiftyfinch/Rugby\"\u003e\u003cimg src=\"https://img.shields.io/codecov/c/github/swiftyfinch/rugby/main?label=Coverage\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://tooomm.github.io/github-release-stats/?username=swiftyfinch\u0026repository=Rugby\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/swiftyfinch/Rugby/total?label=Downloads\u0026logo=github\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/withfig/autocomplete/pull/2105\"\u003e\u003cimg src=\"https://img.shields.io/badge/Fig-fff?logo=fig\u0026logoColor=black\" /\u003e\u003c/a\u003e\n  \u003cbr\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Press_★_to_pay_respects-fff?logo=github\u0026logoColor=black\" /\u003e\n  \u003cimg title=\"Views since 30.11.2023 + 6k after migration\" src=\"https://komarev.com/ghpvc/?username=swiftyfinch-rugby\u0026label=Views\u0026format=true\u0026base=6000\"\u003e\n  \u003ca href=\"https://twitter.com/swiftyfinch\"\u003e\u003cimg src=\"https://img.shields.io/badge/SwiftyFinch-blue?logo=twitter\u0026logoColor=white\" /\u003e\u003c/a\u003e\n\u003c/h1\u003e\n\n\u003ch1\u003e\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/64660122/230763146-d467dafb-252c-46ce-93d6-f2309e5aabc8.gif\" width=600\u003e\n\u003c/p\u003e\n\n# Motivation\n\nWhy do we need some optimizations while working on huge projects with [CocoaPods](https://github.com/CocoaPods/CocoaPods)?\\\n`-` Slow and unnecessary indexing of pods targets, which implementation we rarely try to edit;\\\n`-` Redundant rebuild time, probably as a result of problems, related to CocoaPods or Xcode;\\\n`-` Freezing UI during navigating through a project or editing it;\\\n`-` Broken or extremely slow autocompletion;\\\n`-` Noisy laptop turbines, heated aluminum, and infinite spinning pinwheel.\n\nMore in the 📖 [foundation](https://swiftyfinch.github.io/en/2021-03-09-rugby-story/) and [remastering](https://swiftyfinch.github.io/en/2023-04-22-rugby-remastered/) stories.\n\n## Description\n\n🏈 `Rugby` is CLI tool that was developed to solve the above problems:\\\n`+` Cache all pods dependencies and remove their targets from the Pods project;\\\n`+` Rebuild only changed pods or even download them;\\\n`+` Delete any unneeded targets with sources from a project and reduce its size.\n\n## What makes it different?\n\n🕊 Not a project dependency, just an optional step;\\\n🌱 Doesn't change Podfile and Podfile.lock;\\\n✈️ Can run [a sequence of commands from a YAML file](Docs/commands-help/plan.md);\\\n🕹️ Single command usage;\\\n🐳 Ready for [remote cache](Docs/remote-cache.md);\\\n🧣 Cozy log output;\\\n🚀 Swiftish and uses native Xcode build system.\n\nRuby alternatives: [PodBuilder](https://github.com/Subito-it/PodBuilder) | [CocoaPods Binary Cache](https://github.com/grab/cocoapods-binary-cache) | [CocoaPods Binary](https://github.com/leavez/cocoapods-binary)\n\n\u003cbr\u003e\n\n# How to install 📦\n\nFirst of all, if you have the first version `Rugby 1.x`, you need to delete it.\\\nThen call `where rugby` command and be sure that there are no any of paths to rugby.\n\n### First Install\n\n```sh\ncurl -Ls https://swiftyfinch.github.io/rugby/install.sh | bash\n```\n\n### Self-Update\n\nIf you already have Rugby, which version is at least `2.0.0b2`, you can use such a command.\n\n```sh\n\u003e rugby update\n```\n\n### Full Guide\n\nRead more in the guide [how to install](Docs/how-to-install.md) it.\\\nIf you look for the legacy `Rugby 1.x`, visit [this page](https://github.com/swiftyfinch/Rugby/tree/1.23.0#how-to-install-).\n\n## How to use 🏈\n\n\u003cdetails\u003e\u003csummary\u003ePreconditions\u003c/summary\u003e\n\u003cp\u003e\n\n1. If you use Objective-C in your project, be sure that you import modules correctly.\\\n   Use `@import Something` instead of `#import \"Something.h\"`.\\\n   Because Rugby will include built frameworks in your project;\n2. Before using Rugby you should be sure that your project source code is finalized.\\\n   🔸 For example: if you use `SwiftGen`, run it before calling Rugby.\\\n   Otherwise, your source code will be modified during building with Rugby. Then the hashes of binaries will not be suited.\\\n   If you encounter a problem, try to use [`rugby build pre`](Docs/commands-help/build/pre.md) to prebuild your project and finalize source code;\n3. Be sure that all your pods (including development) are ready to build standalone.\\\n   Otherwise, you can get a state when one of them can't be reused correctly without the source of its dependencies.\\\n   As a temporary workaround, you can exclude some pods like `rugby -e BadPod`.\\\n   🔸 For example: if some of your pods use incorrect headers.\n\n\u003chr\u003e\n\u003c/p\u003e\n\u003c/details\u003e\n\nThen run this command in your project directory after each `pod install`.\\\nIt will build all targets by default:\n```sh\n\u003e rugby\n```\n\nDeintegrate it with the [rollback](Docs/commands-help/rollback.md) command:\n```sh\n\u003e rugby rollback\n```\n\nAlso, you can write a custom [plan](Docs/commands-help/plan.md) (sequence of commands).\\\nUse 🏈 [RugbyPlanner](https://github.com/swiftyfinch/RugbyPlanner) for visualizing changes in your project without applying them.\\\nFor advanced usage, please read the documentation below.\n\n## 📚 Documentation\n\n📦 [How to Install](Docs/how-to-install.md)\\\n📖 [Commands Help](Docs/commands-help/README.md)\\\n🚏 [Migration Guide](Docs/migration-guide.md)\\\n🐳 [Remote Cache](Docs/remote-cache.md)\n\n\u003cbr\u003e\n\n## 🤝 Contribution\n\nFeel free [to open a pull request](https://github.com/swiftyfinch/rugby/contribute) or [a discussion](https://github.com/swiftyfinch/Rugby/discussions).\n\n| Known Issues 🐞 |\n| :--- |\n| [#394](https://github.com/swiftyfinch/Rugby/discussions/394): Unable to run tests via Xcode (via `make test` they run perfectly) |\n| [#270](https://github.com/cpisciotta/xcbeautify/issues/270): Missing public `OutputType` |\n\n## 📮 Support\n\nIf you want to support this project, you can do some of these:\\\n`1)` \u003cins\u003e\u003cb\u003ePress\u003c/b\u003e\u003c/ins\u003e ⭐️. It's a nice mark which means that Rugby is useful;\\\n`2)` \u003cins\u003e\u003cb\u003eShare\u003c/b\u003e\u003c/ins\u003e the project 🌍 somewhere with somebody;\\\n`3)` \u003cins\u003e\u003cb\u003eLeave feedback\u003c/b\u003e\u003c/ins\u003e in the discussions 💬 section.\n\nLet's Roll-oll 🏈\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswiftyfinch%2FRugby","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswiftyfinch%2FRugby","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswiftyfinch%2FRugby/lists"}