# Motivation Why do we need some optimizations while working on huge projects with [CocoaPods](https://github.com/CocoaPods/CocoaPods)?\ `-` Slow and unnecessary indexing of pods targets, which implementation we rarely try to edit;\ `-` Redundant rebuild time, probably as a result of problems, related to CocoaPods or Xcode;\ `-` Freezing UI during navigating through a project or editing it;\ `-` Broken or extremely slow autocompletion;\ `-` Noisy laptop turbines, heated aluminum, and infinite spinning pinwheel. More 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. ## Description 🏈 `Rugby` is CLI tool that was developed to solve the above problems:\ `+` Cache all pods dependencies and remove their targets from the Pods project;\ `+` Rebuild only changed pods or even download them;\ `+` Delete any unneeded targets with sources from a project and reduce its size. ## What makes it different? 🕊 Not a project dependency, just an optional step;\ 🌱 Doesn't change Podfile and Podfile.lock;\ âœˆī¸ Can run [a sequence of commands from a YAML file](Docs/commands-help/plan.md);\ đŸ•šī¸ Single command usage;\ đŸŗ Ready for [remote cache](Docs/remote-cache.md);\ đŸ§Ŗ Cozy log output;\ 🚀 Swiftish and uses native Xcode build system. Ruby 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)
# How to install đŸ“Ļ First of all, if you have the first version `Rugby 1.x`, you need to delete it.\ Then call `where rugby` command and be sure that there are no any of paths to rugby. ### First Install ```sh curl -Ls https://swiftyfinch.github.io/rugby/install.sh | bash ``` ### Self-Update If you already have Rugby, which version is at least `2.0.0b2`, you can use such a command. ```sh > rugby update ``` ### Full Guide Read more in the guide [how to install](Docs/how-to-install.md) it.\ If you look for the legacy `Rugby 1.x`, visit [this page](https://github.com/swiftyfinch/Rugby/tree/1.23.0#how-to-install-). ## How to use 🏈
Preconditions

1. If you use Objective-C in your project, be sure that you import modules correctly.\ Use `@import Something` instead of `#import "Something.h"`.\ Because Rugby will include built frameworks in your project; 2. Before using Rugby you should be sure that your project source code is finalized.\ 🔸 For example: if you use `SwiftGen`, run it before calling Rugby.\ Otherwise, your source code will be modified during building with Rugby. Then the hashes of binaries will not be suited.\ 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; 3. Be sure that all your pods (including development) are ready to build standalone.\ Otherwise, you can get a state when one of them can't be reused correctly without the source of its dependencies.\ As a temporary workaround, you can exclude some pods like `rugby -e BadPod`.\ 🔸 For example: if some of your pods use incorrect headers.


Then run this command in your project directory after each `pod install`.\ It will build all targets by default: ```sh > rugby ``` Deintegrate it with the [rollback](Docs/commands-help/rollback.md) command: ```sh > rugby rollback ``` Also, you can write a custom [plan](Docs/commands-help/plan.md) (sequence of commands).\ Use 🏈 [RugbyPlanner](https://github.com/swiftyfinch/RugbyPlanner) for visualizing changes in your project without applying them.\ For advanced usage, please read the documentation below. ## 📚 Documentation đŸ“Ļ [How to Install](Docs/how-to-install.md)\ 📖 [Commands Help](Docs/commands-help/README.md)\ 🚏 [Migration Guide](Docs/migration-guide.md)\ đŸŗ [Remote Cache](Docs/remote-cache.md)
## 🤝 Contribution Feel free [to open a pull request](https://github.com/swiftyfinch/rugby/contribute) or [a discussion](https://github.com/swiftyfinch/Rugby/discussions). | Known Issues 🐞 | | :--- | | [#394](https://github.com/swiftyfinch/Rugby/discussions/394): Unable to run tests via Xcode (via `make test` they run perfectly) | | [#270](https://github.com/cpisciotta/xcbeautify/issues/270): Missing public `OutputType` | ## 📮 Support If you want to support this project, you can do some of these:\ `1)` Press â­ī¸. It's a nice mark which means that Rugby is useful;\ `2)` Share the project 🌍 somewhere with somebody;\ `3)` Leave feedback in the discussions đŸ’Ŧ section. Let's Roll-oll 🏈