Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/swiftyfinch/Rugby

🏈 Cache CocoaPods for faster rebuild and indexing Xcode project.
https://github.com/swiftyfinch/Rugby

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

Last synced: 25 days ago
JSON representation

🏈 Cache CocoaPods for faster rebuild and indexing Xcode project.

Lists

README

        


















# 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)


# đŸŽ¯ Roadmap

- [x] 👨đŸģ‍🔧 Increase Code Coverage up to `50%` [#236](https://github.com/swiftyfinch/Rugby/issues/236)

## 🤝 Contribution

Feel free [to open a pull request](https://github.com/swiftyfinch/rugby/contribute) / 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 which means that Rugby is useful;\
`2)` Share the project 🌍 somewhere with somebody;\
`3)` Leave feedback in the discussions đŸ’Ŧ section.

Let's Roll-oll 🏈