rebase from upstream
This commit is contained in:
parent
0ddeccfcfe
commit
0effa1ae25
9 changed files with 139 additions and 117 deletions
80
README.md
80
README.md
|
|
@ -1,40 +1,78 @@
|
||||||
# BunnyTweak
|
<p align="center">
|
||||||
|
<picture>
|
||||||
|
<source
|
||||||
|
width="512px"
|
||||||
|
media="(prefers-color-scheme: dark)"
|
||||||
|
srcset="assets/wordmark/wordmark+slogan-dark.svg"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
width="512px"
|
||||||
|
src="assets/wordmark/wordmark+slogan-light.svg"
|
||||||
|
>
|
||||||
|
</picture>
|
||||||
|
<br>
|
||||||
|
<a href="https://revenge-mod.github.io/">
|
||||||
|
<picture>
|
||||||
|
<source height="32px" media="(prefers-color-scheme: dark)" srcset="assets/logo/logo-dark.svg" />
|
||||||
|
<img height="32px" src="assets/logo/logo-light.svg" />
|
||||||
|
</picture>
|
||||||
|
</a>
|
||||||
|
<a href="https://discord.com/invite/ddcQf3s2Uq">
|
||||||
|
<picture>
|
||||||
|
<source height="32px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||||
|
<img height="32px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||||
|
</picture>
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/revenge-mod">
|
||||||
|
<picture>
|
||||||
|
<source height="32px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
|
||||||
|
<img height="32px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
|
||||||
|
</picture>
|
||||||
|
</a>
|
||||||
|
|
||||||
Tweak to inject [Bunny](https://github.com/pyoncord/Bunny) into Discord. Forked [VendettaTweak](https://github.com/vendetta-mod/VendettaTweak), modified to match with [BunnyXposed](https://github.com/pyoncord/BunnyXposed) behavior. There are still slight differences between these two, and this tweak may be missing some loader features.
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
# 💊 RevengeTweak
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
Tweak to inject [Revenge](https://github.com/revenge-mod/Revenge) into Discord. Forked [BunnyTweak](https://github.com/pyoncord/BunnyTweak), modified to match with [RevengeXposed](https://github.com/revenge-mod/Revenge-xposed) behavior. There are still slight differences between these two, and this tweak may be missing some loader features.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> As of right now this tweak does not encompass some functionalities when running in a jailed environment with a distribution certificate that has a different App ID \
|
> As of right now this tweak does not encompass some functionalities when running in a jailed environment with a wildcard certificate \
|
||||||
> If you value these features sign the application with a local dev certificate:
|
> If you value these features sign the application with a local dev certificate:
|
||||||
>
|
> - setAlternateAppIcon does not work, thus breaking dynamic app icons
|
||||||
> - setAlternateAppIcon does not work, thus breaking dynamic app icons (unlikely to be able to be fixed unless iOS behavior changes)
|
> - sharing files to the application/selecting items via the Files app does not work
|
||||||
> - sharing files to the application/selecting items via the Files app does not work (this might be more of a keychain/app group issue)
|
|
||||||
|
|
||||||
## Installation
|
## 🔽 Installation
|
||||||
|
|
||||||
Builds can be found in the [Releases](https://github.com/pyoncord/BunnyTweak/releases/latest) tab.
|
Builds can be found in the [Releases](https://github.com/revenge-mod/revenge-tweak/releases/latest) tab.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Decrypted IPAs are sourced from the [Enmity](https://github.com/enmity-mod/) community. These are also used throughout Enmity related projects such as [enmity-mod/tweak](https://github.com/enmity-mod/tweak/) and [acquitelol/rosiecord](https://github.com/acquitelol/rosiecord).\
|
> Raw decrypted IPAs which are used to provide prepatched IPAs are sourced from the [Enmity](https://github.com/enmity-mod/) community. These raw decrypted IPAs are also used throughout Enmity related projects such as [enmity-mod/tweak](https://github.com/enmity-mod/tweak/) and [acquitelol/rosiecord](https://github.com/acquitelol/rosiecord).\
|
||||||
> All credits are attributed to the owner(s).
|
> All credits are attributed to the owner(s) of the raw IPAs.
|
||||||
|
|
||||||
### Jailbroken
|
### Jailbroken
|
||||||
|
|
||||||
1. Install Bunny by downloading the appropriate Debian package (or by building your own, see [Building BunnyTweak locally](#building-bunnytweak-locally)) and adding it to your package manager. Use the file ending in `arm.deb` for rootful jailbreaks, and the file ending in `arm64.deb` for rootless jailbreaks.
|
1. Install the Orion runtime via your preferred package manager, by adding `https://repo.chariz.com/` to your sources, then finding `Orion Runtime`.
|
||||||
|
1. Install Revenge by downloading the appropriate Debian package (or by building your own, see [Building RevengeTweak locally](#building-revengetweak-locally)) and adding it to your package manager. Use the file ending in `arm.deb` for rootful jailbreaks, and the file ending in `arm64.deb` for rootless jailbreaks.
|
||||||
|
|
||||||
### Jailed
|
### Jailed
|
||||||
|
|
||||||
<a href="https://tinyurl.com/24zjszuf"><img src="https://i.imgur.com/dsbDLK9.png" width="230"></a>
|
<a href="https://tinyurl.com/2jyk87mz"><img src="https://i.imgur.com/dsbDLK9.png" width="230"></a>
|
||||||
<a href="https://tinyurl.com/yh455zk6"><img src="https://i.imgur.com/46qhEAv.png" width="230"></a>
|
<a href="https://tinyurl.com/yjn8fpp3"><img src="https://i.imgur.com/46qhEAv.png" width="230"></a>
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> TrollStore may display an encryption warning, which you can disregard.
|
> TrollStore may display an encryption warning, which you can disregard.
|
||||||
|
|
||||||
1. Download and install [Bunny.ipa](https://github.com/pyoncord/BunnyTweak/releases/latest/download/Bunny.ipa) using your preferred sideloading method.
|
1. Download and install [Revenge.ipa](https://github.com/revenge-mod/revenge-tweak/releases/latest/download/Revenge.ipa) using your preferred sideloading method.
|
||||||
|
|
||||||
## Building BunnyTweak locally
|
## 🛠️ Building RevengeTweak locally
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> These steps assume you use macOS.
|
> These steps assume you use MacOS.
|
||||||
|
|
||||||
1. Install Xcode from the App Store. If you've previously installed the `Command Line Utilities` package, you will need to run `sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer` to make sure you're using the Xcode tools instead.
|
1. Install Xcode from the App Store. If you've previously installed the `Command Line Utilities` package, you will need to run `sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer` to make sure you're using the Xcode tools instead.
|
||||||
|
|
||||||
|
|
@ -42,7 +80,7 @@ Builds can be found in the [Releases](https://github.com/pyoncord/BunnyTweak/rel
|
||||||
|
|
||||||
2. Install the required dependencies. You can do this by running `brew install make ldid` in your terminal. If you do not have brew installed, follow the instructions [here](https://brew.sh/).
|
2. Install the required dependencies. You can do this by running `brew install make ldid` in your terminal. If you do not have brew installed, follow the instructions [here](https://brew.sh/).
|
||||||
|
|
||||||
3. Setup your path accordingly. We recommend you run the following before running the next commands, as well as any time you want to build BunnyTweak.
|
3. Setup your path accordingly. We recommend you run the following before running the next commands, as well as any time you want to build RevengeTweak.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export PATH="$(brew --prefix make)/libexec/gnubin:$PATH"
|
export PATH="$(brew --prefix make)/libexec/gnubin:$PATH"
|
||||||
|
|
@ -58,17 +96,17 @@ bash -c "$(curl -fsSL https://raw.githubusercontent.com/theos/theos/master/bin/i
|
||||||
|
|
||||||
If you've already installed theos, you can run `$THEOS/bin/update-theos` to make sure it's up to date.
|
If you've already installed theos, you can run `$THEOS/bin/update-theos` to make sure it's up to date.
|
||||||
|
|
||||||
5. Clone this repository with `git clone git@github.com:pyoncord/BunnyTweak.git` and `cd` into it. Replace the URL with your fork if you've forked this repository.
|
5. Clone this repository with `git clone git@github.com:revenge-mod/RevengeTweak.git` and `cd` into it. Replace the URL with your fork if you've forked this repository.
|
||||||
|
|
||||||
6. To build BunnyTweak, you can run `rm -rf packages && make clean && make package FINALPACKAGE=1 && make package FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=rootless`. The first command will remove any previous packages, the second will clean the project, the third will build the rootful package (which is denoted by the `arm.deb` ending), and the fourth will build the rootless package (which is denoted by the `arm64.deb` ending).
|
6. To build RevengeTweak, you can run `rm -rf packages && make clean && make package FINALPACKAGE=1 && make package FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=rootless`. The first command will remove any previous packages, the second will clean the project, the third will build the rootful package (which is denoted by the `arm.deb` ending), and the fourth will build the rootless package (which is denoted by the `arm64.deb` ending).
|
||||||
|
|
||||||
The first time you run this, it might take a bit longer, but subsequent builds should be much faster.
|
The first time you run this, it might take a bit longer, but subsequent builds should be much faster.
|
||||||
|
|
||||||
The resulting `.deb` files will be in the `packages` folder. As a reminder, `*arm.deb` is for rootful jailbreaks and sideloading, and `*arm64.deb` is for rootless jailbreaks.
|
The resulting `.deb` files will be in the `packages` folder. As a reminder, `*arm.deb` is for rootful jailbreaks and sideloading, and `*arm64.deb` is for rootless jailbreaks.
|
||||||
|
|
||||||
## Contributing
|
## 📙 Contributing
|
||||||
|
|
||||||
If you want to contribute, you will basically need to follow the steps for [Building BunnyTweak locally](#building-bunnytweak-locally), as well as run `make spm` for the Swift LSP to work.
|
If you want to contribute, you will basically need to follow the steps for [Building RevengeTweak locally](#building-revengetweak-locally), as well as run `make spm` for the Swift LSP to work.
|
||||||
|
|
||||||
<!-- @vladdy was here, battling all these steps so you don't have to. Have fun! :3 -->
|
<!-- @vladdy was here, battling all these steps so you don't have to. Have fun! :3 -->
|
||||||
<!-- @castdrian also was here simplifying these steps immensely -->
|
<!-- @castdrian also was here simplifying these steps immensely -->
|
||||||
|
|
|
||||||
|
|
@ -7,20 +7,20 @@
|
||||||
+ (instancetype)defaultConfig {
|
+ (instancetype)defaultConfig {
|
||||||
LoaderConfig *config = [[LoaderConfig alloc] init];
|
LoaderConfig *config = [[LoaderConfig alloc] init];
|
||||||
config.customLoadUrlEnabled = NO;
|
config.customLoadUrlEnabled = NO;
|
||||||
config.customLoadUrl = [NSURL URLWithString:@"http://localhost:4040/bunny.js"];
|
config.customLoadUrl = [NSURL URLWithString:@"http://localhost:4040/revenge.js"];
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (instancetype)getLoaderConfig {
|
+ (instancetype)getLoaderConfig {
|
||||||
BunnyLog(@"Getting loader config");
|
BunnyLog(@"Getting loader config");
|
||||||
|
|
||||||
NSURL *loaderConfigUrl = [getPyoncordDirectory() URLByAppendingPathComponent:@"loader.json"];
|
NSURL *loaderConfigUrl = [getPyoncordDirectory() URLByAppendingPathComponent:@"loader.json"];
|
||||||
|
|
||||||
if ([[NSFileManager defaultManager] fileExistsAtPath:loaderConfigUrl.path]) {
|
if ([[NSFileManager defaultManager] fileExistsAtPath:loaderConfigUrl.path]) {
|
||||||
NSError *error = nil;
|
NSError *error = nil;
|
||||||
NSData *data = [NSData dataWithContentsOfURL:loaderConfigUrl];
|
NSData *data = [NSData dataWithContentsOfURL:loaderConfigUrl];
|
||||||
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
|
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
|
||||||
|
|
||||||
if (json && !error) {
|
if (json && !error) {
|
||||||
LoaderConfig *config = [[LoaderConfig alloc] init];
|
LoaderConfig *config = [[LoaderConfig alloc] init];
|
||||||
NSDictionary *customLoadUrl = json[@"customLoadUrl"];
|
NSDictionary *customLoadUrl = json[@"customLoadUrl"];
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BunnyLog(@"Couldn't get loader config");
|
BunnyLog(@"Couldn't get loader config");
|
||||||
return [LoaderConfig defaultConfig];
|
return [LoaderConfig defaultConfig];
|
||||||
}
|
}
|
||||||
|
|
@ -47,9 +47,9 @@
|
||||||
@"url": self.customLoadUrl.absoluteString
|
@"url": self.customLoadUrl.absoluteString
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
NSData *data = [NSJSONSerialization dataWithJSONObject:json options:0 error:nil];
|
NSData *data = [NSJSONSerialization dataWithJSONObject:json options:0 error:nil];
|
||||||
return [data writeToURL:loaderConfigUrl atomically:YES];
|
return [data writeToURL:loaderConfigUrl atomically:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,13 @@ static LoaderConfig *loaderConfig;
|
||||||
%hook NSFileManager
|
%hook NSFileManager
|
||||||
|
|
||||||
- (NSURL *)containerURLForSecurityApplicationGroupIdentifier:(NSString *)groupIdentifier {
|
- (NSURL *)containerURLForSecurityApplicationGroupIdentifier:(NSString *)groupIdentifier {
|
||||||
BunnyLog(@"containerURLForSecurityApplicationGroupIdentifier called! %@",
|
BunnyLog(@"containerURLForSecurityApplicationGroupIdentifier called! %@",
|
||||||
groupIdentifier ?: @"nil");
|
groupIdentifier ?: @"nil");
|
||||||
|
|
||||||
if (isJailbroken) {
|
if (isJailbroken) {
|
||||||
return %orig(groupIdentifier);
|
return %orig(groupIdentifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
NSArray *paths = [self URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
|
NSArray *paths = [self URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
|
||||||
NSURL *lastPath = [paths lastObject];
|
NSURL *lastPath = [paths lastObject];
|
||||||
return [lastPath URLByAppendingPathComponent:@"AppGroup"];
|
return [lastPath URLByAppendingPathComponent:@"AppGroup"];
|
||||||
|
|
@ -55,7 +55,7 @@ static LoaderConfig *loaderConfig;
|
||||||
%orig(patchData, source, YES);
|
%orig(patchData, source, YES);
|
||||||
|
|
||||||
__block NSData *bundle = [NSData dataWithContentsOfURL:[pyoncordDirectory URLByAppendingPathComponent:@"bundle.js"]];
|
__block NSData *bundle = [NSData dataWithContentsOfURL:[pyoncordDirectory URLByAppendingPathComponent:@"bundle.js"]];
|
||||||
|
|
||||||
dispatch_group_t group = dispatch_group_create();
|
dispatch_group_t group = dispatch_group_create();
|
||||||
dispatch_group_enter(group);
|
dispatch_group_enter(group);
|
||||||
|
|
||||||
|
|
@ -64,16 +64,16 @@ static LoaderConfig *loaderConfig;
|
||||||
bundleUrl = loaderConfig.customLoadUrl;
|
bundleUrl = loaderConfig.customLoadUrl;
|
||||||
BunnyLog(@"Using custom load URL: %@", bundleUrl.absoluteString);
|
BunnyLog(@"Using custom load URL: %@", bundleUrl.absoluteString);
|
||||||
} else {
|
} else {
|
||||||
bundleUrl = [NSURL URLWithString:@"https://raw.githubusercontent.com/bunny-mod/builds/main/bunny.min.js"];
|
bundleUrl = [NSURL URLWithString:@"https://github.com/revenge-mod/revenge-bundle/releases/latest/download/revenge.min.js"];
|
||||||
BunnyLog(@"Using default bundle URL: %@", bundleUrl.absoluteString);
|
BunnyLog(@"Using default bundle URL: %@", bundleUrl.absoluteString);
|
||||||
}
|
}
|
||||||
|
|
||||||
NSMutableURLRequest *bundleRequest = [NSMutableURLRequest requestWithURL:bundleUrl
|
NSMutableURLRequest *bundleRequest = [NSMutableURLRequest requestWithURL:bundleUrl
|
||||||
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
|
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
|
||||||
timeoutInterval:3.0];
|
timeoutInterval:3.0];
|
||||||
|
|
||||||
NSString *bundleEtag = [NSString stringWithContentsOfURL:[pyoncordDirectory URLByAppendingPathComponent:@"etag.txt"]
|
NSString *bundleEtag = [NSString stringWithContentsOfURL:[pyoncordDirectory URLByAppendingPathComponent:@"etag.txt"]
|
||||||
encoding:NSUTF8StringEncoding
|
encoding:NSUTF8StringEncoding
|
||||||
error:nil];
|
error:nil];
|
||||||
if (bundleEtag && bundle) {
|
if (bundleEtag && bundle) {
|
||||||
[bundleRequest setValue:bundleEtag forHTTPHeaderField:@"If-None-Match"];
|
[bundleRequest setValue:bundleEtag forHTTPHeaderField:@"If-None-Match"];
|
||||||
|
|
@ -86,12 +86,12 @@ static LoaderConfig *loaderConfig;
|
||||||
if (httpResponse.statusCode == 200) {
|
if (httpResponse.statusCode == 200) {
|
||||||
bundle = data;
|
bundle = data;
|
||||||
[bundle writeToURL:[pyoncordDirectory URLByAppendingPathComponent:@"bundle.js"] atomically:YES];
|
[bundle writeToURL:[pyoncordDirectory URLByAppendingPathComponent:@"bundle.js"] atomically:YES];
|
||||||
|
|
||||||
NSString *etag = [httpResponse.allHeaderFields objectForKey:@"Etag"];
|
NSString *etag = [httpResponse.allHeaderFields objectForKey:@"Etag"];
|
||||||
if (etag) {
|
if (etag) {
|
||||||
[etag writeToURL:[pyoncordDirectory URLByAppendingPathComponent:@"etag.txt"]
|
[etag writeToURL:[pyoncordDirectory URLByAppendingPathComponent:@"etag.txt"]
|
||||||
atomically:YES
|
atomically:YES
|
||||||
encoding:NSUTF8StringEncoding
|
encoding:NSUTF8StringEncoding
|
||||||
error:nil];
|
error:nil];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -152,25 +152,25 @@ static LoaderConfig *loaderConfig;
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%ctor {
|
%ctor {
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
source = [NSURL URLWithString:@"bunny"];
|
source = [NSURL URLWithString:@"bunny"];
|
||||||
|
|
||||||
NSString *install_prefix = @"/var/jb";
|
NSString *install_prefix = @"/var/jb";
|
||||||
isJailbroken = [[NSFileManager defaultManager] fileExistsAtPath:install_prefix];
|
isJailbroken = [[NSFileManager defaultManager] fileExistsAtPath:install_prefix];
|
||||||
|
|
||||||
NSString *bundlePath = [NSString stringWithFormat:@"%@/Library/Application Support/BunnyResources.bundle", install_prefix];
|
NSString *bundlePath = [NSString stringWithFormat:@"%@/Library/Application Support/BunnyResources.bundle", install_prefix];
|
||||||
BunnyLog(@"Is jailbroken: %d", isJailbroken);
|
BunnyLog(@"Is jailbroken: %d", isJailbroken);
|
||||||
BunnyLog(@"Bundle path for jailbroken: %@", bundlePath);
|
BunnyLog(@"Bundle path for jailbroken: %@", bundlePath);
|
||||||
|
|
||||||
NSString *jailedPath = [[NSBundle mainBundle].bundleURL.path stringByAppendingPathComponent:@"BunnyResources.bundle"];
|
NSString *jailedPath = [[NSBundle mainBundle].bundleURL.path stringByAppendingPathComponent:@"BunnyResources.bundle"];
|
||||||
BunnyLog(@"Bundle path for jailed: %@", jailedPath);
|
BunnyLog(@"Bundle path for jailed: %@", jailedPath);
|
||||||
|
|
||||||
bunnyPatchesBundlePath = isJailbroken ? bundlePath : jailedPath;
|
bunnyPatchesBundlePath = isJailbroken ? bundlePath : jailedPath;
|
||||||
BunnyLog(@"Selected bundle path: %@", bunnyPatchesBundlePath);
|
BunnyLog(@"Selected bundle path: %@", bunnyPatchesBundlePath);
|
||||||
|
|
||||||
BOOL bundleExists = [[NSFileManager defaultManager] fileExistsAtPath:bunnyPatchesBundlePath];
|
BOOL bundleExists = [[NSFileManager defaultManager] fileExistsAtPath:bunnyPatchesBundlePath];
|
||||||
BunnyLog(@"Bundle exists at path: %d", bundleExists);
|
BunnyLog(@"Bundle exists at path: %d", bundleExists);
|
||||||
|
|
||||||
NSError *error = nil;
|
NSError *error = nil;
|
||||||
NSArray *bundleContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:bunnyPatchesBundlePath error:&error];
|
NSArray *bundleContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:bunnyPatchesBundlePath error:&error];
|
||||||
if (error) {
|
if (error) {
|
||||||
|
|
@ -178,10 +178,10 @@ static LoaderConfig *loaderConfig;
|
||||||
} else {
|
} else {
|
||||||
BunnyLog(@"Bundle contents: %@", bundleContents);
|
BunnyLog(@"Bundle contents: %@", bundleContents);
|
||||||
}
|
}
|
||||||
|
|
||||||
pyoncordDirectory = getPyoncordDirectory();
|
pyoncordDirectory = getPyoncordDirectory();
|
||||||
loaderConfig = [[LoaderConfig alloc] init];
|
loaderConfig = [[LoaderConfig alloc] init];
|
||||||
|
|
||||||
%init;
|
%init;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,76 +1,40 @@
|
||||||
{
|
{
|
||||||
"name": "Pyoncord App Repo",
|
"name": "Revenge App Repo",
|
||||||
"identifier": "io.github.pyoncord.repo",
|
"identifier": "io.github.revenge-mod.repo",
|
||||||
"iconURL": "https://pyoncord.github.io/assets/icon-altstore.png",
|
"iconURL": "https://avatars.githubusercontent.com/u/159218871?s=200&v=4",
|
||||||
"apps": [
|
"apps": [
|
||||||
{
|
{
|
||||||
"name": "Bunny",
|
"name": "Revenge",
|
||||||
"bundleIdentifier": "com.hammerandchisel.discord",
|
"bundleIdentifier": "com.hammerandchisel.discord",
|
||||||
"developerName": "Pylix",
|
"developerName": "Cristiandis",
|
||||||
"iconURL": "https://pyoncord.github.io/assets/icon-altstore.png",
|
"iconURL": "https://avatars.githubusercontent.com/u/159218871?s=200&v=4",
|
||||||
"localizedDescription": "A client mod for Discord",
|
"localizedDescription": "A client mod for Discord",
|
||||||
"subtitle": "A client mod for Discord",
|
"subtitle": "A client mod for Discord",
|
||||||
"tintColor": "7289da",
|
"tintColor": "7289da",
|
||||||
"versions": [
|
"versions": [
|
||||||
{
|
{
|
||||||
"version": "247.2",
|
"version": "250.0",
|
||||||
"date": "2024-09-20",
|
"date": "2024-10-20",
|
||||||
"size": 96426195,
|
"size": 101218873,
|
||||||
"downloadURL": "https://github.com/pyoncord/BunnyTweak/releases/download/v247.2/Bunny.ipa"
|
"downloadURL": "https://github.com/revenge-mod/revenge-tweak/releases/download/v250.0/Revenge.ipa"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "247.0",
|
"version": "250.0",
|
||||||
"date": "2024-09-18",
|
"date": "2024-10-17",
|
||||||
"size": 96629525,
|
"size": 101218840,
|
||||||
"downloadURL": "https://github.com/pyoncord/BunnyTweak/releases/download/v247.0/Bunny.ipa"
|
"downloadURL": "https://github.com/revenge-mod/revenge-tweak/releases/download/v250.0/Revenge.ipa"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "246.0",
|
||||||
|
"date": "2024-09-15",
|
||||||
|
"size": 102811465,
|
||||||
|
"downloadURL": "https://github.com/revenge-mod/RevengeTweak/releases/download/v246.0/Revenge.ipa"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "246.0",
|
"version": "246.0",
|
||||||
"date": "2024-09-14",
|
"date": "2024-09-14",
|
||||||
"size": 103195545,
|
"size": 103194076,
|
||||||
"downloadURL": "https://github.com/pyoncord/BunnyTweak/releases/download/v246.0/Bunny.ipa"
|
"downloadURL": "https://github.com/revenge-mod/RevengeTweak/releases/download/v246.0/Revenge.ipa"
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "237.0",
|
|
||||||
"date": "2024-07-13",
|
|
||||||
"size": 114323285,
|
|
||||||
"downloadURL": "https://github.com/pyoncord/BunnyTweak/releases/download/v237.0/Bunny.ipa"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "235.0",
|
|
||||||
"date": "2024-06-27",
|
|
||||||
"size": 112173273,
|
|
||||||
"downloadURL": "https://github.com/pyoncord/BunnyTweak/releases/download/v235.0/Bunny.ipa"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "234.0",
|
|
||||||
"date": "2024-06-24",
|
|
||||||
"size": 111671815,
|
|
||||||
"downloadURL": "https://github.com/pyoncord/BunnyTweak/releases/download/v234.0/Bunny.ipa"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "230.0",
|
|
||||||
"date": "2024-05-18",
|
|
||||||
"size": 102457139,
|
|
||||||
"downloadURL": "https://github.com/pyoncord/BunnyTweak/releases/download/v230.0/Bunny.ipa"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "229.0",
|
|
||||||
"date": "2024-05-16",
|
|
||||||
"size": 103776118,
|
|
||||||
"downloadURL": "https://github.com/pyoncord/BunnyTweak/releases/download/v229.0/Bunny.ipa"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "226.1",
|
|
||||||
"date": "2024-04-30",
|
|
||||||
"size": 102705408,
|
|
||||||
"downloadURL": "https://github.com/pyoncord/BunnyTweak/releases/download/v226.1/Pyoncord.ipa"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "223.0",
|
|
||||||
"date": "2024-04-08",
|
|
||||||
"size": 106082919,
|
|
||||||
"downloadURL": "https://github.com/pyoncord/BunnyTweak/releases/download/v223.0/Pyoncord.ipa"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"appPermissions": {}
|
"appPermissions": {}
|
||||||
|
|
|
||||||
4
assets/logo/logo-dark.svg
Normal file
4
assets/logo/logo-dark.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
<svg width="320" height="320" viewBox="0 0 320 320" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.26979 99H294.723L312.234 215.273C312.723 222.597 310.021 229.993 304.839 235.184L265.514 274.935C260.741 279.717 254.27 283.273 247.514 283.273H182.785C168.723 283.273 152.981 270.126 152.981 256.073V255.61C152.981 250.056 156.895 244.851 160.088 240.605L160.088 240.605L160.288 240.339L75.9944 236.224C73.9944 236.135 69.0077 236.055 62.9899 235.984C43.5233 235.762 27.1144 221.37 24.4033 202.09L8.74994 103.006C8.84706 101.648 9.02178 100.311 9.26979 99ZM84.5458 137.592L139.983 152.446C139.994 152.788 140 153.132 140 153.477C140 170.045 126.568 183.477 110 183.477C93.4314 183.477 79.9999 170.045 79.9999 153.477C79.9999 147.643 81.665 142.198 84.5458 137.592ZM180.019 152.4L235.429 137.553C238.325 142.168 240 147.627 240 153.477C240 170.045 226.568 183.477 210 183.477C193.431 183.477 180 170.045 180 153.477C180 153.116 180.006 152.757 180.019 152.4Z" fill="white"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M288.328 82.0258C288.569 83.4188 289.198 84.7073 290.018 85.8593C292.71 89.6425 294.372 94.0776 294.688 98.766L295.899 106.809C296.628 111.647 292.881 116 287.988 116H17.6382C13.7018 116 10.3504 113.136 9.73617 109.248L8.89299 103.911C8.79798 103.31 8.76815 102.697 8.82742 102.091C10.4271 85.7347 23.3039 72.6711 39.7278 70.9082L87.1856 63.328C89.9772 62.8821 92.7967 63.9426 94.6025 66.1175L105.915 79.7431C107.719 81.9152 110.533 82.9759 113.322 82.5343L203.656 68.2267C205.851 67.8792 207.802 66.6347 209.042 64.7913L222.878 44.2296C224.116 42.3892 226.063 41.1457 228.253 40.7958L247.639 37.6994C265.683 35.7705 282.181 48.0371 285.523 65.8683L288.328 82.0258Z" fill="white"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
4
assets/logo/logo-light.svg
Normal file
4
assets/logo/logo-light.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
<svg width="320" height="320" viewBox="0 0 320 320" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.26979 99H294.723L312.234 215.273C312.723 222.597 310.021 229.993 304.839 235.184L265.514 274.935C260.741 279.717 254.27 283.273 247.514 283.273H182.785C168.723 283.273 152.981 270.126 152.981 256.073V255.61C152.981 250.056 156.895 244.851 160.088 240.605L160.088 240.605L160.288 240.339L75.9944 236.224C73.9944 236.135 69.0077 236.055 62.9899 235.984C43.5233 235.762 27.1144 221.37 24.4033 202.09L8.74994 103.006C8.84706 101.648 9.02178 100.311 9.26979 99ZM84.5458 137.592L139.983 152.446C139.994 152.788 140 153.132 140 153.477C140 170.045 126.568 183.477 110 183.477C93.4314 183.477 79.9999 170.045 79.9999 153.477C79.9999 147.643 81.665 142.198 84.5458 137.592ZM180.019 152.4L235.429 137.553C238.325 142.168 240 147.627 240 153.477C240 170.045 226.568 183.477 210 183.477C193.431 183.477 180 170.045 180 153.477C180 153.116 180.006 152.757 180.019 152.4Z" fill="black"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M288.328 82.0258C288.569 83.4188 289.198 84.7073 290.018 85.8593C292.71 89.6425 294.372 94.0776 294.688 98.766L295.899 106.809C296.628 111.647 292.881 116 287.988 116H17.6382C13.7018 116 10.3504 113.136 9.73617 109.248L8.89299 103.911C8.79798 103.31 8.76815 102.697 8.82742 102.091C10.4271 85.7347 23.3039 72.6711 39.7278 70.9082L87.1856 63.328C89.9772 62.8821 92.7967 63.9426 94.6025 66.1175L105.915 79.7431C107.719 81.9152 110.533 82.9759 113.322 82.5343L203.656 68.2267C205.851 67.8792 207.802 66.6347 209.042 64.7913L222.878 44.2296C224.116 42.3892 226.063 41.1457 228.253 40.7958L247.639 37.6994C265.683 35.7705 282.181 48.0371 285.523 65.8683L288.328 82.0258Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
6
assets/wordmark/wordmark+slogan-dark.svg
Normal file
6
assets/wordmark/wordmark+slogan-dark.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 19 KiB |
6
assets/wordmark/wordmark+slogan-light.svg
Normal file
6
assets/wordmark/wordmark+slogan-light.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 19 KiB |
16
control
16
control
|
|
@ -1,11 +1,11 @@
|
||||||
Package: app.pyoncord
|
Package: io.github.revenge-mod.app
|
||||||
Name: Bunny
|
Name: Revenge
|
||||||
Version: 0.4.0
|
Version: 2.0.0
|
||||||
Architecture: iphoneos-arm
|
Architecture: iphoneos-arm
|
||||||
Description: A client modification for Discord's mobile app.
|
Description: A mod for Discord's mobile apps.
|
||||||
Maintainer: Pylix
|
Maintainer: Cristiandis
|
||||||
Author: Pylix, Adrian Castro, FieryFlames
|
Author: Pylix, Adrian Castro, FieryFlames, Cristiandis
|
||||||
Icon: https://avatars.githubusercontent.com/u/132727175
|
Icon: https://avatars.githubusercontent.com/u/159218871
|
||||||
Section: Tweaks
|
Section: Tweaks
|
||||||
Depends: mobilesubstrate (>= 0.9.5000)
|
Depends: mobilesubstrate (>= 0.9.5000)
|
||||||
Conflicts: app.enmity, mod.vendetta
|
Conflicts: app.enmity, mod.vendetta, app.bunny
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue