// // Copyright 2020 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // ios_main.mm: Alternative entry point for iOS executables that initializes UIKit before calling // the default entry point. #import #include static int original_argc; static char **original_argv; extern "C" int main(int argc, char **argv); @interface AngleUtilAppDelegate : UIResponder @property(nullable, nonatomic, strong) UIWindow *window; @end @implementation AngleUtilAppDelegate @synthesize window; - (void)runMain { exit(main(original_argc, original_argv)); } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.rootViewController = [[UIViewController alloc] initWithNibName:nil bundle:nil]; [self.window makeKeyAndVisible]; // We need to return from this function before the app finishes launching, so call main in a // timer callback afterward. [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(runMain) userInfo:nil repeats:NO]; return YES; } @end extern "C" int ios_main(int argc, char **argv) { original_argc = argc; original_argv = argv; return UIApplicationMain(argc, argv, nullptr, NSStringFromClass([AngleUtilAppDelegate class])); }