## Settings 1. Create a project in XCode with the default settings + *iOS* > *Application* > **Single View Application** + Language: *Swift* 2. Under project **General** settings, add *ReactKit* to **Linked Framework and Libraries** + *+* > *Add Other...* and choose */path/to/react-native/ReactKit/ReactKit.xcodeproj* 3. Now *ReactKit* would have been imported. Link it by choosing it from the list. + *+* > **lib.ReactKit.a** 4. Under project **Build Settings**, + **Linking** > **Other Linker Flags** : Add `-all_load` + **Search Paths** > **Header Search Paths**: + Add `/path/to/react-native` + Enable `recursive` + **Swift Compiler - Code Generation** > **Objective-C Bridging Header** + Set to `ProjectName/ProjectName-Bridging-Header.h` + We will create this file in later part 5. Under project **Info** settings, + Remove property **Main storyboard file base name** 6. Delete file **Main.storyboard** from XCode and Confirm *Remove Reference* ## Code ### `AppDelegate.swift` Use this as the function body for `didFinishLaunchingWithOptions` replacing 1. `.js` - Your JS entry point where you'll register the Application. 2. `` - The name you use in `` in `AppRegistry.registerComponent` to register the application. ```swift // initialize the rootView to fetch JS from the dev server let rootView = RCTRootView() rootView.scriptURL = NSURL(string: "http://localhost:8081/.includeRequire.runModule.bundle") rootView.moduleName = "" // Initialize a Controller to use view as React View let rootViewController = ViewController() rootViewController.view = rootView // Set window to use rootViewController self.window = UIWindow(frame: UIScreen.mainScreen().bounds) self.window?.rootViewController = rootViewController self.window?.makeKeyAndVisible() return true ``` ### `ViewController.swift` Add this override to ViewController if you don't want the top time-bar of ios to be visible in your Application. ```swift override func prefersStatusBarHidden() -> Bool { return true } ``` ### `ProjectName-Briding-Header.h` This file imports react-native(Obj-C) classes to be used in your swift application. Create a header file named `ProjectName-Bridging-Header.h` (in the same directory as *AppDelegate.swift*) and paste the contents generated by the following script ```sh find /path/to/react-native/ReactKit -name "*.h" | awk -F'/' '{print "#import \""$NF"\""}' ``` ### `.js` The bare minimum stuff ```js var React = require('react-native'); var App = module.exports = React.createClass({ render() { /* ... */ }); React.AppRegistry.registerComponent('', () => App); ``` ## Getting started ### Settings + `APPDIR = Directory which contains '.js'` + `NODE_MODULES_DIR = usually '$APPDIR/node_modules'` if you use other libraries in your app ### Starting the App 1. `cd /path/to/react-native` 2. `./packager/packager.sh --root $APPDIR --root $NODE_MODULES_DIR` + Note: DONOT use `$NODE_MODULES_DIR` if you don't have any node_modules 3. Build the App from XCode and everything should work just fine.