--- Python-2.7.1/Python/dynload_shlib.c.orig	2011-12-05 00:00:00.000000000 +0100
+++ Python-2.7.1/Python/dynload_shlib.c	2011-12-05 00:02:51.000000000 +0100
@@ -84,6 +84,15 @@
     PyOS_snprintf(funcname, sizeof(funcname),
                   LEAD_UNDERSCORE "init%.200s", shortname);
 
+	/* On IOS, dlopen crash as soon as we try to open one of our library.
+	 * Instead, we have done a redirection of linking to convert our .so into a
+	 * .a.  Then the main executable is linked with theses symbol. So, instead
+	 * of trying to dlopen, directly do the dlsym.
+	 * -- Mathieu
+	 */
+    return (dl_funcptr) dlsym(RTLD_MAIN_ONLY, funcname);
+
+#if 0
     if (fp != NULL) {
         int i;
         struct stat statb;
@@ -140,4 +149,5 @@
         handles[nhandles++].handle = handle;
     p = (dl_funcptr) dlsym(handle, funcname);
     return p;
+#endif
 }

--- Python-2.7.1/Python/dynload_shlib.c.orig	2011-12-05 00:00:00.000000000 +0100
+++ Python-2.7.1/Python/dynload_shlib.c	2011-12-05 00:02:51.000000000 +0100
@@ -84,6 +84,15 @@
     PyOS_snprintf(funcname, sizeof(funcname),
                   LEAD_UNDERSCORE "init%.200s", shortname);
 
+	/* On IOS, dlopen crash as soon as we try to open one of our library.
+	 * Instead, we have done a redirection of linking to convert our .so into a
+	 * .a.  Then the main executable is linked with theses symbol. So, instead
+	 * of trying to dlopen, directly do the dlsym.
+	 * -- Mathieu
+	 */
+    return (dl_funcptr) dlsym(RTLD_SELF, funcname);
+
+#if 0
     if (fp != NULL) {
         int i;
         struct stat statb;
@@ -140,4 +149,5 @@
         handles[nhandles++].handle = handle;
     p = (dl_funcptr) dlsym(handle, funcname);
     return p;
+#endif
 }

Update python loader to load from frameworks as well as main exe (i.e. we have kivy embedded in a framework)
Update python loader to load from frameworks as well as main exe (i.e. we have kivy embedded in a framework)
