From fcc4d1a23b863c6519c67e57423c5ac1ea1be6b9 Mon Sep 17 00:00:00 2001 From: John Wu Date: Tue, 31 Mar 2015 22:49:52 +0800 Subject: [PATCH 1/5] Guide for use React Native in existing iOS app See #483 --- docs/EmbededApp.md | 113 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 docs/EmbededApp.md diff --git a/docs/EmbededApp.md b/docs/EmbededApp.md new file mode 100644 index 00000000000000..fcf3c938e63d34 --- /dev/null +++ b/docs/EmbededApp.md @@ -0,0 +1,113 @@ +--- +id: embeded-app +title: Use React Native in Existing iOS App +layout: docs +category: Guides +permalink: docs/embeded-app.html +next: activityindicatorios +--- + +## Install React Native Using Cocoapods + +[Cocoapods](http://cocoapods.org/) is a package management tool for iOS/Mac development. We need to use it to download React Native. If you haven't install Cocoapods yet, checkout [this tutorial](http://guides.cocoapods.org/using/getting-started.html). + +When you are ready to work with Cocoapods, add the following line to `Podfile`. If you don't have one, then create it under the root directory of your project. + + pod 'React' + pod 'React/RCTText' + # Add any subspecs you want to use in your project + +Remember to install all subspecs you need. The `` element cannot be used without `pod 'React/RCTText'`. + +Then install pods via shell + + $ pod install --verbose + +The installation process also requires [Node.js](http://nodejs.org). + +## Create Your React Native App + +First, enter React Native's pod root directory and create **index.ios.js** inside a directory `ReactComponent`. + + $ cd Pods/React + $ mkdir ReactComponent + $ touch index.ios.js + +Copy & paste following starter code for **index.ios.js**. + + var React = require('react-native'); + + var { + Text + } = React; + + class SimpleApp extends React.Component { + render() { + return This is a simple application. + } + } + + AppRegistry.registerComponent('SimpleApp', () => SimpleApp); + +`SimpleApp` will be your **module name**, which will be used later on. + +## Add Container View To Your App + +You should now add container view for React Native component. It can be any **UIView** in your app. + +![Container view example](http://7qn8cx.com1.z0.glb.clouddn.com/c37deb761ce048225989ece06cf3d185061c511d-74d3e6b285e1b5cd93153c39fca63c63838b8dbf.png?imageView2/2/h/400/w/400/q/85) + +However, let's subclass **UIView** for the sake of clean code. Let's name it **ReactView**. Open up **Yourproject.xcworkspace** and create a new class **ReactView** (You can name it whatever you like :)). + + // ReactView.h + + #import + @interface ReactView : UIView + @end + + +Don't forget to add an outlet for it. + + // ViewController.m + + @interface ViewController () + @property (weak, nonatomic) IBOutlet ReactView *reactView; + @end + +Here I disabled **AutoLayout** for simplicity. In real production world, you should turn on AutoLayout and setup constraints by yourself. + +## Add RCTRootView To Container View + +Ready for the most interesting part? Now we shall create the **RCTRootView**, where your React Native app lives in. + +In **ReactView.m**, we need to first initiate **RCTRootView** with the URI of your **index.ios.bundle**. **index.ios.bundle** will be created by packager and served by React Native server, which will be discussed later on. + + NSString *urlString = @"http://localhost:8081/index.ios.bundle"; + NSURL *jsCodeLocation = [NSURL URLWithString:urlString]; + RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation + moduleName: @"SimpleApp" + launchOptions:nil]; +Then add it as a subview of the **ReactView**. + + [self addSubview:rootView]; + rootView.frame = self.bounds; + +## Start Development Server + +In root directory, we need to start React Native development server. + + $ ./Pods/React/packager/packager.sh --root ./ReactComponents + +`--root` indicates the root of your React Native apps. Here we just have one **index.ios.js**. React Native development server will use packager to create a **index.ios.bundle**. Which can be access via `http://localhost:8081/index.ios.bundle`. + +## Compile And Run + +Now compile and run your app. You shall now see your React Native app running inside of the **ReactView**. + +![Example](http://7qn8cx.com1.z0.glb.clouddn.com/0c4e7b977f1db688b60f1579a581f30dd1abc85f-86bebe4092e82c395e322fefcc8f7727b0820ac7.png?imageView2/2/h/400/w/400/q/85) + +## Conclusion + +So under the hood, when **RCTRootView** is initialized, it will try to download, parse and run the bundle file from React Native development server. All you need to do is to implement your own container view, add **RCTRootView** as its subclass. And then serve the bundle using React Native development server. Then, bravo! + +You can checkout full source code of sample application [here](https://github.com/tjwudi/EmbededReactNativeExample). From 9c8fdafecc1f061dd35124f93fc63fe3c2da1f4b Mon Sep 17 00:00:00 2001 From: John Wu Date: Tue, 31 Mar 2015 22:51:34 +0800 Subject: [PATCH 2/5] Update next doc path --- docs/Testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Testing.md b/docs/Testing.md index ada4913145a735..fc6a4955ad8e50 100644 --- a/docs/Testing.md +++ b/docs/Testing.md @@ -4,7 +4,7 @@ title: Testing layout: docs category: Guides permalink: docs/testing.html -next: activityindicatorios +next: embeded-app --- ## Running Tests and Contributing From b873fd6e31038cb826d3356f7d4c2ae9be5cc473 Mon Sep 17 00:00:00 2001 From: John Wu Date: Tue, 31 Mar 2015 23:01:14 +0800 Subject: [PATCH 3/5] Update EmbededApp.md Use ``` instead of indentation for code blocks --- docs/EmbededApp.md | 120 ++++++++++++++++++++++++++++----------------- 1 file changed, 74 insertions(+), 46 deletions(-) diff --git a/docs/EmbededApp.md b/docs/EmbededApp.md index fcf3c938e63d34..4cc57786af5546 100644 --- a/docs/EmbededApp.md +++ b/docs/EmbededApp.md @@ -13,42 +13,60 @@ next: activityindicatorios When you are ready to work with Cocoapods, add the following line to `Podfile`. If you don't have one, then create it under the root directory of your project. - pod 'React' - pod 'React/RCTText' - # Add any subspecs you want to use in your project +``` +pod 'React' +pod 'React/RCTText' +# Add any subspecs you want to use in your project +``` Remember to install all subspecs you need. The `` element cannot be used without `pod 'React/RCTText'`. - + Then install pods via shell - $ pod install --verbose - +``` +$ pod install --verbose +``` + The installation process also requires [Node.js](http://nodejs.org). ## Create Your React Native App First, enter React Native's pod root directory and create **index.ios.js** inside a directory `ReactComponent`. - $ cd Pods/React - $ mkdir ReactComponent - $ touch index.ios.js - +``` +$ cd Pods/React +$ mkdir ReactComponent +$ touch index.ios.js +``` + Copy & paste following starter code for **index.ios.js**. - var React = require('react-native'); - - var { - Text - } = React; - - class SimpleApp extends React.Component { - render() { - return This is a simple application. - } - } - - AppRegistry.registerComponent('SimpleApp', () => SimpleApp); - +``` +var React = require('react-native'); + +var { + Text, + View +} = React; + +var styles = React.StyleSheet.create({ + container: { + flex: 1, + backgroundColor: 'red' + } +}); + +class SimpleApp extends React.Component { + render() { + return + This is a simple application. + ; + } +} + +React.AppRegistry.registerComponent('SimpleApp', () => SimpleApp); +``` + `SimpleApp` will be your **module name**, which will be used later on. ## Add Container View To Your App @@ -59,21 +77,24 @@ You should now add container view for React Native component. It can be any **UI However, let's subclass **UIView** for the sake of clean code. Let's name it **ReactView**. Open up **Yourproject.xcworkspace** and create a new class **ReactView** (You can name it whatever you like :)). - // ReactView.h - - #import - @interface ReactView : UIView - @end +``` +// ReactView.h +#import +@interface ReactView : UIView +@end +``` Don't forget to add an outlet for it. - - // ViewController.m - - @interface ViewController () - @property (weak, nonatomic) IBOutlet ReactView *reactView; - @end - + +``` +// ViewController.m + +@interface ViewController () +@property (weak, nonatomic) IBOutlet ReactView *reactView; +@end +``` + Here I disabled **AutoLayout** for simplicity. In real production world, you should turn on AutoLayout and setup constraints by yourself. ## Add RCTRootView To Container View @@ -82,22 +103,29 @@ Ready for the most interesting part? Now we shall create the **RCTRootView**, wh In **ReactView.m**, we need to first initiate **RCTRootView** with the URI of your **index.ios.bundle**. **index.ios.bundle** will be created by packager and served by React Native server, which will be discussed later on. - NSString *urlString = @"http://localhost:8081/index.ios.bundle"; - NSURL *jsCodeLocation = [NSURL URLWithString:urlString]; - RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation - moduleName: @"SimpleApp" - launchOptions:nil]; +``` +NSString *urlString = @"http://localhost:8081/index.ios.bundle"; +NSURL *jsCodeLocation = [NSURL URLWithString:urlString]; +RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation + moduleName: @"SimpleApp" + launchOptions:nil]; +``` + Then add it as a subview of the **ReactView**. - [self addSubview:rootView]; - rootView.frame = self.bounds; - +``` +[self addSubview:rootView]; +rootView.frame = self.bounds; +``` + ## Start Development Server In root directory, we need to start React Native development server. - $ ./Pods/React/packager/packager.sh --root ./ReactComponents - +``` +$ ./Pods/React/packager/packager.sh --root ./ReactComponents +``` + `--root` indicates the root of your React Native apps. Here we just have one **index.ios.js**. React Native development server will use packager to create a **index.ios.bundle**. Which can be access via `http://localhost:8081/index.ios.bundle`. ## Compile And Run From 4040295750340e618bdefe3869331c8a73d2c49a Mon Sep 17 00:00:00 2001 From: John Wu Date: Tue, 31 Mar 2015 23:20:26 +0800 Subject: [PATCH 4/5] typo fixed --- docs/{EmbededApp.md => EmbeddedApp.md} | 2 +- docs/Testing.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/{EmbededApp.md => EmbeddedApp.md} (99%) diff --git a/docs/EmbededApp.md b/docs/EmbeddedApp.md similarity index 99% rename from docs/EmbededApp.md rename to docs/EmbeddedApp.md index 4cc57786af5546..31abb75a4cee20 100644 --- a/docs/EmbededApp.md +++ b/docs/EmbeddedApp.md @@ -1,5 +1,5 @@ --- -id: embeded-app +id: embedded-app title: Use React Native in Existing iOS App layout: docs category: Guides diff --git a/docs/Testing.md b/docs/Testing.md index fc6a4955ad8e50..93fb71904cddaa 100644 --- a/docs/Testing.md +++ b/docs/Testing.md @@ -4,7 +4,7 @@ title: Testing layout: docs category: Guides permalink: docs/testing.html -next: embeded-app +next: embedded-app --- ## Running Tests and Contributing From 35bea5fddc6ec77d05810a7ce88f3db0ebe5a689 Mon Sep 17 00:00:00 2001 From: John Wu Date: Tue, 31 Mar 2015 23:24:37 +0800 Subject: [PATCH 5/5] Local image resources for docs --- docs/EmbeddedApp.md | 4 ++-- .../img/EmbeddedAppContainerViewExample.png | Bin 0 -> 12670 bytes .../src/react-native/img/EmbeddedAppExample.png | Bin 0 -> 14679 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 website/src/react-native/img/EmbeddedAppContainerViewExample.png create mode 100644 website/src/react-native/img/EmbeddedAppExample.png diff --git a/docs/EmbeddedApp.md b/docs/EmbeddedApp.md index 31abb75a4cee20..8f79b7e79b5ebf 100644 --- a/docs/EmbeddedApp.md +++ b/docs/EmbeddedApp.md @@ -73,7 +73,7 @@ React.AppRegistry.registerComponent('SimpleApp', () => SimpleApp); You should now add container view for React Native component. It can be any **UIView** in your app. -![Container view example](http://7qn8cx.com1.z0.glb.clouddn.com/c37deb761ce048225989ece06cf3d185061c511d-74d3e6b285e1b5cd93153c39fca63c63838b8dbf.png?imageView2/2/h/400/w/400/q/85) +![Container view example](/react-native/img/EmbeddedAppContainerViewExample.png) However, let's subclass **UIView** for the sake of clean code. Let's name it **ReactView**. Open up **Yourproject.xcworkspace** and create a new class **ReactView** (You can name it whatever you like :)). @@ -132,7 +132,7 @@ $ ./Pods/React/packager/packager.sh --root ./ReactComponents Now compile and run your app. You shall now see your React Native app running inside of the **ReactView**. -![Example](http://7qn8cx.com1.z0.glb.clouddn.com/0c4e7b977f1db688b60f1579a581f30dd1abc85f-86bebe4092e82c395e322fefcc8f7727b0820ac7.png?imageView2/2/h/400/w/400/q/85) +![Example](/react-native/img/EmbeddedAppExample.png) ## Conclusion diff --git a/website/src/react-native/img/EmbeddedAppContainerViewExample.png b/website/src/react-native/img/EmbeddedAppContainerViewExample.png new file mode 100644 index 0000000000000000000000000000000000000000..6130dfb1e10a4501d8ada3b7b7c3c3d1d21e3dea GIT binary patch literal 12670 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 literal 0 HcmV?d00001