-
-
Save mfikes/e6b776a37812d1fd430a to your computer and use it in GitHub Desktop.
current ad
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * The examples provided by Facebook are for non-commercial testing and | |
| * evaluation purposes only. | |
| * | |
| * Facebook reserves all rights not expressly granted. | |
| * | |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | |
| * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL | |
| * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |
| * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
| */ | |
| #import "AppDelegate.h" | |
| #import "RCTRootView.h" | |
| #import "ABYServer.h" | |
| #import "ABYContextManager.h" | |
| #import "BTHContextExecutor.h" | |
| @interface AppDelegate() | |
| @property (strong, nonatomic) ABYServer* replServer; | |
| @property (strong, nonatomic) ABYContextManager* contextManager; | |
| @end | |
| @implementation AppDelegate | |
| - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions | |
| { | |
| NSURL *jsCodeLocation; | |
| /** | |
| * Loading JavaScript code - uncomment the one you want. | |
| * | |
| * OPTION 1 | |
| * Load from development server. Start the server from the repository root: | |
| * | |
| * $ npm start | |
| * | |
| * To run on device, change `localhost` to the IP address of your computer | |
| * (you can get this by typing `ifconfig` into the terminal and selecting the | |
| * `inet` value under `en0:`) and make sure your computer and iOS device are | |
| * on the same Wi-Fi network. | |
| */ | |
| jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/Examples/TicTacToe/TicTacToeApp.includeRequire.runModule.bundle"]; | |
| /** | |
| * OPTION 2 | |
| * Load from pre-bundled file on disk. To re-generate the static bundle, `cd` | |
| * to your Xcode project folder in the terminal, and run | |
| * | |
| * $ curl 'http://localhost:8081/Examples/TicTacToe/TicTacToeApp.includeRequire.runModule.bundle' -o main.jsbundle | |
| * | |
| * then add the `main.jsbundle` file to your project and uncomment this line: | |
| */ | |
| // jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; | |
| // Set up the compiler output directory | |
| NSURL* compilerOutputDirectory = [[self privateDocumentsDirectory] URLByAppendingPathComponent:@"cljs-out"]; | |
| [self createDirectoriesUpTo:compilerOutputDirectory]; | |
| // Set up our context | |
| self.contextManager = [[ABYContextManager alloc] initWithContext:[[JSContext alloc] init] | |
| compilerOutputDirectory:compilerOutputDirectory]; | |
| [self.contextManager setUpAmblyImportScript]; | |
| // Inject our context into the BTHContextExecutor (it sets the static variable) | |
| [BTHContextExecutor setContext:self.contextManager.context]; | |
| // Set React Native to intstantiate our BTHContextExecutor, doing this by slipping the executorClass | |
| // assignement between alloc and initWithBundleURL:moduleProvider:launchOptions: | |
| RCTBridge *bridge = [RCTBridge alloc]; | |
| bridge.executorClass = [BTHContextExecutor class]; | |
| bridge = [bridge initWithBundleURL:jsCodeLocation | |
| moduleProvider:nil | |
| launchOptions:launchOptions]; | |
| // Set up a root view using the bridge defined above | |
| RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge | |
| moduleName:@"TicTacToeApp"]; | |
| self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; | |
| UIViewController *rootViewController = [[UIViewController alloc] init]; | |
| rootViewController.view = rootView; | |
| self.window.rootViewController = rootViewController; | |
| [self.window makeKeyAndVisible]; | |
| // Now that React Native has been initialized, fire up our REPL server | |
| self.replServer = [[ABYServer alloc] initWithContext:self.contextManager.context | |
| compilerOutputDirectory:compilerOutputDirectory]; | |
| BOOL successful = [self.replServer startListening]; | |
| if (!successful) { | |
| NSLog(@"Failed to start REPL server."); | |
| } | |
| return YES; | |
| } | |
| - (NSURL *)privateDocumentsDirectory | |
| { | |
| NSURL *libraryDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject]; | |
| return [libraryDirectory URLByAppendingPathComponent:@"Private Documents"]; | |
| } | |
| - (void)createDirectoriesUpTo:(NSURL*)directory | |
| { | |
| if (![[NSFileManager defaultManager] fileExistsAtPath:[directory path]]) { | |
| NSError *error = nil; | |
| if (![[NSFileManager defaultManager] createDirectoryAtPath:[directory path] | |
| withIntermediateDirectories:YES | |
| attributes:nil | |
| error:&error]) { | |
| NSLog(@"Can't create directory %@ [%@]", [directory path], error); | |
| abort(); | |
| } | |
| } | |
| } | |
| @end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment