From b7a797b0684da45e7fea0a8252be5e35336aa793 Mon Sep 17 00:00:00 2001 From: Chris Hamons Date: Wed, 8 Jun 2016 18:19:16 -0400 Subject: [PATCH] [XM] Dynamically look up NSExtensionMain to unbreak pre-10.10 XM apps (#154) * [XM] Dynamically look up NSExtensionMain to unbreak pre-10.10 XM apps - So having a simple reference to NSExtensionMain is enough for /usr/lib/libextension.dylib to get added as a reference to libxammac.dylib - If you have a reference to /usr/lib/libextension.dylib then any XM app (including our tests) bomb out on startup. This is suboptimal. - So dlopen/dysm our way to victory. * Fix spacing --- runtime/launcher.m | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/runtime/launcher.m b/runtime/launcher.m index 1955a85955..4902057cc0 100644 --- a/runtime/launcher.m +++ b/runtime/launcher.m @@ -581,7 +581,19 @@ int xamarin_main (int argc, char **argv, bool is_extension) *ptr = NULL; if (is_extension) { - rv = NSExtensionMain (new_argc, new_argv); + void * libExtensionHandle = dlopen ("/usr/lib/libextension.dylib", RTLD_LAZY); + if (libExtensionHandle == nil) + exit_with_message ("Unable to load libextension.dylib", data.basename, false); + + typedef int (*extension_main)(int argc, char * argv[]); + + extension_main extensionMain = (extension_main) dlsym (libExtensionHandle, "NSExtensionMain"); + + if (extensionMain == nil) + exit_with_message ("Unable to load NSExtensionMain", data.basename, false); + + rv = (*extensionMain) (new_argc, new_argv); + dlclose (libExtensionHandle); } else { rv = mono_main (new_argc, new_argv); }