美文网首页RNreact-native开发
OC中嵌入ReactNative(注意点!!)

OC中嵌入ReactNative(注意点!!)

作者: 取名困难综合症患者 | 来源:发表于2016-09-09 17:14 被阅读619次

PS: 详细教程请移步[朱_源浩]React Native 集成到原生项目

第一步:创建OC项目

1.打开xcode,新建一个名为ReactNativeForOC(注意:名字中最好不要带符号)的OC项目。(swift下午试了,头文件无法导入不知道为什么)

第二步:集成React Native

1.1. 在xcodeproj目录下创建一个ReactComponent文件夹(不需要导入到项目中)。
2.1. 创建一个package.json文件, 用于初始化react-native。

{
  // 项目名称
  "name": "ReactNativeForOC",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start"
  },
  //rn的版本信息
  "dependencies": {
    "react": "15.3.1",
    "react-native": "^0.32.1"
  }
}

2.2. 创建 index.ios.js(js文件入口)

注意:js中class名和组件注册时的名字要同OC项目名相对应

2.3. 安装React Native依赖包

注意:一定要在ReactComponent目录下运行命令行!!!而不是在项目名称文件夹下,我掉坑了一回!

第三步

3.1. Cocoapods集成React Native

target 'ReactNativeForOC' do
    #注意路径是否正确,这种方法安装应该是比较快的,1、2分钟左右
pod 'React', :path => ‘./ReactComponent/node_modules/react-native', :subspecs => [
'Core',
'ART',
'RCTActionSheet',
'RCTAdSupport',
'RCTGeolocation',
'RCTImage',
'RCTNetwork',
'RCTPushNotification',
'RCTSettings',
'RCTText',
'RCTVibration',
'RCTWebSocket',
'RCTLinkingIOS',
]
end

第四步 在需要使用RN的文件中导入<RCTRootView.h>

4.1. 向对应ViewController 添加RCTRootView

- (void)viewDidLoad {
    [super viewDidLoad];
    /**
     *  注意:如果这里的URL用的是localHost的话,在plist中要加
     <key>NSAppTransportSecurity</key>
     <dict>
     <key>NSExceptionDomains</key>
     <dict>
     <key>localhost</key>
     <dict>
     <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
     <true/>
     </dict>
     </dict>
     </dict>
     */
    NSString * strUrl = @"http://localHost:8081/index.ios.bundle?platform=ios&dev=true";
    NSURL * jsCodeLocation = [NSURL URLWithString:strUrl];
    
    /**
     参数一:加载页面的地址可以理解为(热更新链接)
     参数二:项目名称
     :returns:
     */
    RCTRootView * rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                         moduleName:@"ReactNativeForOC"
                                                  initialProperties:nil
                                                      launchOptions:nil];
    rootView.frame = CGRectMake(0, 64, self.view.frame.size.width, 200);
    [self.view addSubview:rootView];
}

最后

注意:在运行项目前先用命令行cd 到ReactComponent文件夹目录下,然后命令行启动服务(如果你报'Command 'start' unrecognized'错误的话说明cd的文件目录不对)
react-native start

启动成功会出现下面的画面:


1.pic.jpg

集成后的效果


Simulator Screen Shot 2016年9月9日 下午5.20.46.png

github: ReactNative

相关文章

网友评论

  • 寒心恨雪:按照你的4.1来的,但是 我这一直报错。xcode断言错误,RCTAssert(self.bundleURL, @"bundleURL must be non-nil when not implementing loadSourceForBridge");
    错误的地方在*** Assertion failure in -[RCTBatchedBridge loadSource:onProgress:](), /Users/fantasy/Desktop/iPadDemo/ReactComponent/node_modules/react-native/React/Base/RCTBatchedBridge.m:196
    求大神指导
    取名困难综合症患者:可能是你cocopods 里面的react集成问题,我也不是大神,当初调这个花了小半天时间的

本文标题:OC中嵌入ReactNative(注意点!!)

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