Why do we need some optimizations while working on huge projects with 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 build system;
-
Freezing UI during navigation through a project or editing it;
-
Broken or extremely slow autocompletion;
-
Noisy laptop turbines, heated aluminum, and infinite spinning pinwheel.
More in the ๐ foundation and remastering stories.
๐ 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.
๐ Not a project dependency, just an optional step;
๐ Doesn't change Podfile and Podfile.lock;
๐ถ Single command usage;
๐งฃ Cozy log output;
๐ Swiftish and uses native Xcode build system.
Ruby alternatives: PodBuilder | CocoaPods Binary Cache | CocoaPods Binary
This version of Rugby hasn't opened source yet. I'm going to open it this summer.
There are still a lot of preparation steps to do.
But you can download a binary, read the guide ๐ฆฎ how to install it.
If you look for the legacy Rugby 1.x
, which source is opened, visit this page.
Preconditions
- Before using Rugby you should be sure that your project source code is finalized.
๐ธ For example: if you useSwiftGen
, 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; - 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 likerugby -e BadPod
.
๐ธ For example: if some of your pods use incorrect headers.
Then run in your project directory after each pod install
. This command will build all targets by default:
> rugby
Deintegrate it with the rollback command:
> rugby rollback
Also, you can write a custom plan (sequence of commands).
For advanced usage, please read the documentation below.
๐ฆ How to Install
๐ Commands Help
๐ Migration Guide
๐ณ Remote Cache
- Refactoring
- Tests
- GitHub Actions
- Open Source
Feel free to open a pull request / an issue or a discussion.
If you want to support this project, you can do some of these:
1)
Press โญ๏ธ. It's a nice mark that Rugby is useful;
2)
Share the project ๐ somewhere with somebody;
3)
Leave feedback in the discussions ๐ฌ section.
Let's Roll-oll ๐