React Native async load bundled file
This file contains 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
/** | |
* Copyright (c) 2015-present, Facebook, Inc. | |
* All rights reserved. | |
* | |
* This source code is licensed under the BSD-style license found in the | |
* LICENSE file in the root directory of this source tree. An additional grant | |
* of patent rights can be found in the PATENTS file in the same directory. | |
*/ | |
#import "AppDelegate.h" | |
#import "RCTRootView.h" | |
@implementation AppDelegate | |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions | |
{ | |
NSURL *jsCodeLocation; | |
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); | |
NSString *documentsDirectory = [paths objectAtIndex:0]; | |
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"index.ios.bundle"]; | |
/** | |
* 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/Movies/MoviesApp.ios.bundle?platform=ios&dev=true"]; | |
/** | |
* OPTION 2 | |
* Load from pre-bundled file on disk. To re-generate the static bundle | |
* from the root of your project directory, run | |
* | |
* $ react-native bundle --minify | |
* | |
* see http://facebook.github.io/react-native/docs/runningondevice.html | |
*/ | |
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ | |
NSURL *url = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"]; | |
NSData *urlData = [NSData dataWithContentsOfURL:url]; | |
if ( urlData ) | |
{ | |
//saving is done on main thread | |
dispatch_async(dispatch_get_main_queue(), ^{ | |
[urlData writeToFile:filePath atomically:YES]; | |
}); | |
} | |
}); | |
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:filePath]; | |
if (fileExists) { | |
jsCodeLocation = [[NSURL alloc] initFileURLWithPath:filePath]; | |
} else { | |
jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; | |
} | |
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation | |
moduleName:@"AwesomeProject" | |
initialProperties:nil | |
launchOptions:launchOptions]; | |
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; | |
UIViewController *rootViewController = [[UIViewController alloc] init]; | |
rootViewController.view = rootView; | |
self.window.rootViewController = rootViewController; | |
[self.window makeKeyAndVisible]; | |
return YES; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment