// // main.m // iOS-python-test // #import #import #include #include "SDL/SDL_main.h" #include void export_orientation(); int main(int argc, char *argv[]) { int ret = 0; NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; // Change the executing path to YourApp chdir("YourApp"); // Special environment to prefer .pyo, and don't write bytecode if .py are found // because the process will not have write attribute on the device. putenv("PYTHONOPTIMIZE=2"); putenv("PYTHONDONTWRITEBYTECODE=1"); putenv("PYTHONNOUSERSITE=1"); putenv("PYTHONPATH=."); //putenv("PYTHONVERBOSE=1"); // Kivy environment to prefer some implementation on ios platform putenv("KIVY_BUILD=ios"); putenv("KIVY_NO_CONFIG=1"); putenv("KIVY_NO_FILELOG=1"); putenv("KIVY_NO_CONSOLELOG=1"); putenv("KIVY_WINDOW=sdl"); putenv("KIVY_IMAGE=imageio"); putenv("KIVY_AUDIO=sdl"); // Export orientation preferences for Kivy export_orientation(); NSString * resourcePath = [[NSBundle mainBundle] resourcePath]; NSLog(@"PythonHome is: %s", (char *)[resourcePath UTF8String]); Py_SetPythonHome((char *)[resourcePath UTF8String]); NSLog(@"Initializing python"); Py_Initialize(); PySys_SetArgv(argc, argv); // If other modules are using thread, we need to initialize them before. PyEval_InitThreads(); // Search and start main.py const char * prog = [ [[NSBundle mainBundle] pathForResource:@"YourApp/main" ofType:@"pyo"] cStringUsingEncoding: NSUTF8StringEncoding]; NSLog(@"Running main.pyo: %s", prog); FILE* fd = fopen(prog, "r"); if ( fd == NULL ) { ret = 1; NSLog(@"Unable to open main.pyo, abort."); } else { ret = PyRun_SimpleFileEx(fd, prog, 1); if (ret != 0) NSLog(@"Application quit abnormally!"); } Py_Finalize(); NSLog(@"Leaving"); [pool release]; // Look like the app still runn even when we leaved here. exit(ret); return ret; } // This method read available orientations from the Info.plist, and share them // in an environment variable. Kivy will automatically set the orientation // according to this environment value, if exist. void export_orientation() { NSDictionary *info = [[NSBundle mainBundle] infoDictionary]; NSArray *orientations = [info objectForKey:@"UISupportedInterfaceOrientations"]; NSString *result = [[NSString alloc] initWithString:@"KIVY_ORIENTATION="]; for (int i = 0; i < [orientations count]; i++) { NSString *item = [orientations objectAtIndex:i]; item = [item substringFromIndex:22]; if (i > 0) result = [result stringByAppendingString:@" "]; result = [result stringByAppendingString:item]; } putenv([result UTF8String]); //NSLog(@"Available orientation: %@", result); }