Skip to content

Commit

Permalink
Fix the crashes occurring on Quantumult X versions 1.2.0 and 1.3.0.
Browse files Browse the repository at this point in the history
  • Loading branch information
SongXiaoXi committed Apr 4, 2023
1 parent bd8fcd9 commit 15dcd77
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 6 deletions.
46 changes: 41 additions & 5 deletions Tweak.x
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#include <stdio.h>
#import <mach-o/ldsyms.h>
#import <Network/Network.h>
#include <dlfcn.h>
#include "fishhook.h"

Expand All @@ -10,6 +9,12 @@ struct os_system_version_s {
unsigned int patch;
};

struct _CAFrameRateRange {
float minimum;
float maximum;
float preferred;
};

static const char SystemVersion_plist[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
"<plist version=\"1.0\">\n"
Expand Down Expand Up @@ -47,6 +52,20 @@ extern int os_system_version_get_current_version(struct os_system_version_s * _N

%group iOS14

%hook CADisplayLink

%new
- (void)setPreferredFrameRateRange:(struct _CAFrameRateRange)range {
self.preferredFramesPerSecond = 60;
}

%new
- (struct _CAFrameRateRange)preferedFrameRateRange {
return (struct _CAFrameRateRange){60, 60, 60};
}

%end

%hook UITableView

%new
Expand All @@ -60,6 +79,18 @@ extern int os_system_version_get_current_version(struct os_system_version_s * _N

%end

%hook _UIDeferredMenuElement

%new
+ (instancetype)elementWithUncachedProvider:(void(^)(void (^completion)(NSArray *elements)))elementProvider {
if (@available(iOS 14, *)) {
return [self elementWithProvider:elementProvider];
}
return nil;
}

%end

%end

%group iOS14_5
Expand Down Expand Up @@ -116,6 +147,10 @@ static void nw_protocol_udp_finalize_output_frames(void *arg0, void *arg1) {
*(uint64_t *)(ptr + 0x88) = orig;
}

static struct _CAFrameRateRange _CAFrameRateRangeMake(float minimum, float maximum, float preferred) {
return (struct _CAFrameRateRange){minimum, maximum, preferred};
}

%ctor {

if (@available(iOS 15, macOS 12, *)) {
Expand All @@ -126,10 +161,11 @@ static void nw_protocol_udp_finalize_output_frames(void *arg0, void *arg1) {
if (main_start) {
rebind_symbols_image(main_start,
(uint64_t)main_start - 0x100000000,
(struct rebinding[2]){
(struct rebinding[3]){
{"nw_parameters_create_quic", (void *) nw_parameters_create_quic_connection, NULL},
{"nw_quic_add_tls_application_protocol", nw_quic_add_tls_application_protocol, NULL}
}, 2);
{"nw_quic_add_tls_application_protocol", nw_quic_add_tls_application_protocol, NULL},
{"CAFrameRateRangeMake", _CAFrameRateRangeMake, NULL}
}, 3);
}

if (@available(iOS 13, *)) {
Expand All @@ -149,7 +185,7 @@ static void nw_protocol_udp_finalize_output_frames(void *arg0, void *arg1) {
} else {
%init(iOS14_5);
}
%init(iOS14);
%init(iOS14, _UIDeferredMenuElement = objc_getClass("UIDeferredMenuElement"));
}
%init(Availability);
}
2 changes: 1 addition & 1 deletion control
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: com.sxx.quantumultx-patches
Name: Quantumult X DoQ (iOS 14)
Version: 1.1
Version: 1.2
Architecture: iphoneos-arm
Description: Enable Quantumult X quic (DoQ) for iOS 14.
Maintainer: SXX
Expand Down

0 comments on commit 15dcd77

Please sign in to comment.