2024-11-14 11:15:18 +01:00
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
|
#import <UIKit/UIKit.h>
|
|
|
|
|
|
2026-08-03 10:34:27 -04:00
|
|
|
// Utils.m is compiled as plain Objective-C (C linkage), but Tweak.xm/JSI.mm are Objective-C++.
|
|
|
|
|
// Without extern "C", the C++ TU expects a mangled `showErrorAlert(NSString*, NSString*)` symbol
|
|
|
|
|
// that Utils.m never emits, breaking the link (confirmed by an actual Theos build on CI).
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif
|
|
|
|
|
|
2024-11-14 11:15:18 +01:00
|
|
|
NSURL *getPyoncordDirectory(void);
|
|
|
|
|
UIColor *hexToUIColor(NSString *hex);
|
2026-08-03 09:46:46 -04:00
|
|
|
void showErrorAlert(NSString *title, NSString *message);
|
|
|
|
|
|
fix: replace speculative Bridgeless hook with RainTweak's verified approach
The RCTInstance/-_loadScriptFromSource: + fake-RCTSource hook from the
previous commit was a plausible guess from RN's public source, but
codeberg.org/raincord/RainTweak - an actively-shipping loader for a sibling
Revenge/Bunny fork - proves both the Bridgeless diagnosis correct (its %ctor
refuses to run below Discord v332, i.e. pre-Bridgeless) and shows a cleaner,
verified mechanism: hook RCTHost/-instance:didInitializeRuntime:, let
Discord's own bundle load untouched via %orig, then evaluate Revenge's
scripts directly against the live JSI runtime instead of faking another
bundle load.
- Add Headers/JSI.h + Sources/JSI.mm (ported from RainTweak's JSI.mm):
evaluates NSData as JS or Hermes bytecode directly against a
facebook::jsi::Runtime.
- Add Headers/RCTHost.h declaring the hook target's signature (RN ships no
public header for this internal class).
- Vendor Headers/jsi/{jsi.h,jsi-inl.h,instrumentation.h} - Meta's MIT-licensed
JSI headers, which Theos doesn't provide; RainTweak vendors the same files.
- Rewrite Tweak.x -> Tweak.xm (needs C++ for jsi::Runtime&): runRevengeInjection
now takes a plain data/async execute callback, driven by either the new
RCTHost+JSI hook or the legacy RCTCxxBridge hook (kept as a no-cost
fallback), guarded by a didInject flag so only one path actually injects.
- Makefile: build .xm/.mm sources, add -std=c++17 CCFLAGS matching RainTweak.
Still unverified against a real device, but the mechanism itself is no longer
a guess - it's the one running in a comparable, currently-shipping mod.
2026-08-03 10:10:32 -04:00
|
|
|
/** Detects the Hermes bytecode magic header ("Herm"), as opposed to plain-text JS. */
|
2026-08-03 10:34:27 -04:00
|
|
|
BOOL isHermesBytecode(NSData *data);
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|