美文网首页iOS-Developer-OC
iOS原生项目中集成React Native

iOS原生项目中集成React Native

作者: 海浪萌物 | 来源:发表于2018-05-09 10:47 被阅读121次

最近研究在原生项目中集成React Native,在网上找了不少资料,也踏了不少坑,网上资料太多直接复制过来的,每个人的环境也不一样,所以别人可以的你不一定可以,在这做一下记录!

公司项目集成了cocoapods,所以采用的是cocoapods集成,在此记录一下步骤;

一、添加package.json文件

在项目根目录下创建一个package.json,里面添加内容:

{
    "name": "credit",
    "version": "0.0.1",
    "private": true,
    "scripts": {
        "start": "node node_modules/react-native/local-cli/cli.js start",
        "test": "jest"
    },
    "dependencies": {
        "react": "~15.4.1",
        "react-native": "0.42.0"
    },
    "devDependencies": {
        "babel-jest": "20.0.3",
        "babel-preset-react-native": "2.1.0",
        "jest": "20.0.4",
        "react-test-renderer": "~15.4.1"
    },
    "jest": {
        "preset": "react-native"
    }
}

里面的name的value改成项目的scheme值,

二、安装react-native模块

在终端cd到项目目录,然后执行

npm instal

三、创建 index.ios.js(js文件入口),里面内容添加

'use strict';

var React = require('react-native');
var {
  AppRegistry,
  StyleSheet,
  Text,
  View,
} = React;

var credit = React.createClass({
  render: function() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>
          Welcome to React Native!
        </Text>
        <Text style={styles.instructions}>
          To get started, edit index.android.js
        </Text>
        <Text style={styles.instructions}>
          Shake or press menu button for dev menu
        </Text>
      </View>
    );
  }
});

var styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

AppRegistry.registerComponent('credit', () => credit);

里面的credit更改成项目名!

四、集成react-native框架

在podfile里面写入:

pod 'React', :path => './node_modules/react-native', :subspecs => [
 'Core',
 'RCTActionSheet',
 'RCTGeolocation',
 'RCTImage',
 'RCTNetwork',
 'RCTPushNotification',
 'RCTSettings',
 'RCTText',
 'RCTVibration',
 'RCTWebSocket'
# needed for debugging
# Add any other subspecs you want to use in your project
]

相当于把需要的框架从本地集成到项目中
然后pod install
至此为止,React Native已经集成完毕,再就是使用了

五、招一个入口,写下下面代码!

    NSURL *jsCodeLocation;
    jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];
    RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                        moduleName:@"credit"
                                                 initialProperties:nil
                                                     launchOptions:nil];
    UIViewController *navVC = [[UIViewController alloc]init];
    navVC.view.backgroundColor = [UIColor yellowColor];
    navVC.view = rootView;
    [self.navigationController pushViewController:navVC animated:YES];

假如你用真机调试那么就将localhost改成你的电脑ip地址

五、了解js的都知道,js调试需要在本地开启服务,所以RN调试时候也需要在本地开启一个服务,开启方式是:
cd 到项目根目录,然后npm run start
出现:


image.png

就说明开启成功了,开启关键就是package.json里面的内容,内容如果有问题的话会导致开启不成功。

然后运行app,调出RN页面,当终端出现


image.png

说明正在加载RN页面,加载结束就会显示出来!
至此,RN集成完毕

运行的时候日志里面会一直出现

nw_connection_get_connected_socket 248 Connection has no connected handler

这个日志,下面的方法解决:
Edit scheme---> run-->Aruments --> Environment Variables -->Add -> Name: "OS_ACTIVITY_MODE", Value:"disable"
然后重新运行app,就不会有日志了

相关文章

网友评论

  • _Jason___:楼主有个地方写错了哦,应该是“npm install” 而不是 “npm instal”,少了个 ‘l’ :joy:

本文标题:iOS原生项目中集成React Native

本文链接:https://www.haomeiwen.com/subject/vhtnrftx.html