-
-
Save zhuowei/acf4257d1b79c000affcb5954c2dc7f1 to your computer and use it in GitHub Desktop.
@import Darwin; | |
@import ObjectiveC; | |
@import CloudKit; | |
extern bool GEOConfigGetBOOL(int feature, void* something); | |
// Hooks feature flags in a resigned Maps.app to return true. | |
// Usage: | |
// clang -shared -fmodules -o libmaps_inject.dylib maps_inject.m \ | |
// "$(xcrun | |
// --show-sdk-path)/System/Library/PrivateFrameworks/GeoServices.framework/GeoServices.tbd" | |
// cp -a /System/Applications/Maps.app ./ | |
// codesign --remove Maps.app/Contents/MacOS/Maps | |
// DYLD_INSERT_LIBRARIES=./libmaps_inject.dylib Maps.app/Contents/MacOS/Maps | |
#define DYLD_INTERPOSE(_replacement, _replacee) \ | |
__attribute__((used)) static struct { \ | |
const void* replacement; \ | |
const void* replacee; \ | |
} _interpose_##_replacee __attribute__((section("__DATA,__interpose"))) = { \ | |
(const void*)(unsigned long)&_replacement, (const void*)(unsigned long)&_replacee} | |
bool wdb_GEOConfigGetBOOL(int feature, void* something) { | |
if (feature == 5) { | |
NSLog(@"config get VectorKitDebugConfig_AllowNonSupportedDeviceAdvancedMap"); | |
return true; | |
} | |
NSLog(@"config get bool %d", feature); | |
return GEOConfigGetBOOL(feature, something); | |
} | |
DYLD_INTERPOSE(wdb_GEOConfigGetBOOL, GEOConfigGetBOOL); | |
// Our resigned Maps app doesn't have iCloud access, so disable iCloud. | |
// (Not necessary if you're running with SIP off and injecting into the real | |
// Maps app) | |
id wdb_CKContainer_initWithContainerID_hook() { return nil; } | |
id wdb_CKContainer_initWithContainerID_options_hook() { return nil; } | |
__attribute__((constructor)) void wdb_hook_init() { | |
Class ckContainerClass = [CKContainer class]; | |
Method method1 = class_getInstanceMethod(ckContainerClass, @selector(initWithContainerID:)); | |
method_setImplementation(method1, (IMP)&wdb_CKContainer_initWithContainerID_hook); | |
Method method2 = class_getInstanceMethod(ckContainerClass, @selector(initWithContainerID: | |
options:)); | |
method_setImplementation(method2, (IMP)&wdb_CKContainer_initWithContainerID_options_hook); | |
} |
Hey, I keep getting this error. Do you know what to do? Thanks.
hanlywijaya@Hanlys-iMac Desktop % clang -shared -fmodules -o libmaps_inject.dylib maps_inject.m \
Undefined symbols for architecture x86_64:
"_GEOConfigGetBOOL", referenced from:
_wdb_GEOConfigGetBOOL in maps_inject-545e35.o
__interpose_GEOConfigGetBOOL in maps_inject-545e35.o
(maybe you meant: _wdb_GEOConfigGetBOOL)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Hey @Hanly-Wijaya! Sorry you're having trouble. Unfortunately I don't really know enough to understand fully what that error could mean, but here's one thought:
Did you install a fresh copy of MacOS Monterey or migrate from an existing account? I'd try to start from a fresh install of Monterey and see if it works.
@Hanly-Wijaya are you using the Xcode 13.0 beta? You'll need it.
(I would post a pre-patched Maps.app, but don't want to get into trouble with copyright)
Here's a precompiled dylib if you can't get Xcode working: https://drive.google.com/file/d/1M2pRFCwHrzlqvfLSCaSH6sVlF6aXw6SQ/view?usp=sharing
These instructions create a new Maps.app on the Desktop which is patched. The author of the gist mentioned that it was possible to instead patch the stock Maps.app in /Applications, instead of making a second one on the Desktop. Given that I have SIP disabled, how would I go about patching the stock Maps.app instead?
Also, the patched Maps.app on the Desktop, which this process creates, quits on open when double clicked to open. To launch it, I must re-run the final Terminal command. Is there a way to have the final Maps.app launch without crashing with just a double-click, without using Terminal to launch each time?
2 Options: You can patch the System Maps app in /Applications or you can automate the final command with an Automator Application, a Shortcut or any number of other automation tools for Mac. This automation option is preferable for anyone who doesn't want to turn off SIP.
Patch the System Map App:
System Integrity Protection (SIP) must be turned off.
Assuming you've done steps 1 & 2 from the previous instructions to compile, run the following commands:
4. cd /
5. cd Applications
6. codesign --remove Maps.app/Contents/MacOS/Maps
7. DYLD_INSERT_LIBRARIES=../Users/YOUR_USER/Desktop/libmaps_inject.dylib Maps.app/Contents/MacOS/Maps
where YOUR_USER is replaced by your user name, such as ../Users/Jake/Desktop
I have not tried this as I don't have SIP turned off, but it should work
when you turn SIP on it restores the default version? Thx!
@Hanly-Wijaya are you using the Xcode 13.0 beta? You'll need it.
(I would post a pre-patched Maps.app, but don't want to get into trouble with copyright)
Here's a precompiled dylib if you can't get Xcode working: https://drive.google.com/file/d/1M2pRFCwHrzlqvfLSCaSH6sVlF6aXw6SQ/view?usp=sharing
Yup, I used Xcode 13 beta. I'll try the file you linked! Hope it goes well!
@Hanly-Wijaya are you using the Xcode 13.0 beta? You'll need it.
(I would post a pre-patched Maps.app, but don't want to get into trouble with copyright)
Here's a precompiled dylib if you can't get Xcode working: https://drive.google.com/file/d/1M2pRFCwHrzlqvfLSCaSH6sVlF6aXw6SQ/view?usp=sharingYup, I used Xcode 13 beta. I'll try the file you linked! Hope it goes well!
It worked! Thank you!!
any idea how to get SharePlay for FaceTime for intel-macs
Thank you for the solution.
On Ventura: 3D globe view is still fully functional, but 3D city maps seem to crash every time you zoom in to a city with that feature, i.e. San Francisco, Paris, London etc. Hopefully there is still a fix for this.
Hey, did you get any errors and how did you fix the errors if you got them? thanks.