Skip to content

๐Ÿˆ Cache CocoaPods for faster rebuild and indexing Xcode project.

License

Notifications You must be signed in to change notification settings

swiftyfinch/Rugby

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation


Motivation

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.

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;
๐Ÿ‘ถ Single command usage;
๐Ÿงฃ Cozy log output;
๐Ÿš€ Swiftish and uses native Xcode build system.

Ruby alternatives: PodBuilder | CocoaPods Binary Cache | CocoaPods Binary


How to install ๐Ÿ“ฆ

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.

How to use ๐Ÿˆ

Preconditions

  1. 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;
  2. 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 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.

๐Ÿ“š Documentation

๐Ÿ“ฆ How to Install
๐Ÿ“– Commands Help
๐Ÿš Migration Guide
๐Ÿณ Remote Cache


๐ŸŽฏ Roadmap

  • Refactoring
  • Tests
  • GitHub Actions
  • Open Source

๐Ÿค Contribution

Feel free to open a pull request / an issue or a discussion.

๐Ÿ“ฎ Support

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 ๐Ÿˆ