Skip to content

Instantly share code, notes, and snippets.

@zhuowei
Created June 10, 2021 04:33
Show Gist options
  • Save zhuowei/acf4257d1b79c000affcb5954c2dc7f1 to your computer and use it in GitHub Desktop.
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);
}
@zhuowei
Copy link
Author

zhuowei commented Jun 12, 2021

@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

@notnotjake
Copy link

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

@alex99r
Copy link

alex99r commented Jun 12, 2021

when you turn SIP on it restores the default version? Thx!

@Hanly-Wijaya
Copy link

@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
Copy link

@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!

It worked! Thank you!!

@alex99r
Copy link

alex99r commented Jun 15, 2021

any idea how to get SharePlay for FaceTime for intel-macs

@bootlegseahorse
Copy link

bootlegseahorse commented Aug 30, 2023

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment