ios 项目 集成 React native RN

项目已经迭代了很多版本,目前想在里面集成React native。以下是操作步骤,由于一些坑已经趟过,直接按照解决后的顺序下的步骤。本文集成的RN版本是  0.51.0

集成篇

步骤1:设置项目目录结构

首先创建一个空目录用于存放React Native项目,然后在其中创建一个/ios子目录,把你现有的iOS项目拷贝到/ios子目录中。

步骤2:安装JavaScript依赖包

在项目根目录下创建一个名为package.json的空文本文件,然后填入以下内容:

{  "name": "MyReactNativeApp", 

    "version": "0.0.1", 

    "private": true, 

    "scripts":  {   

        "start": "node node_modules/react-native/local-cli/cli.js start"

      },          

     "dependencies": { 

          "react": "16.0.0-alpha.6", 

             "react-native": “0.51.0” 

    }

}

执行命令   npm install

步骤3:安装CocoaPods(如果已经安装就不需要安装了)

CocoaPods是针对iOS和Mac开发的包管理工具。我们用它来把React Native框架的代码下载下来并添加到你当前的项目中。 

配置CocoaPods的依赖#React Native框架整体是作为node模块安装到项目中的。下一步我们需要在CocoaPods的Podfile中指定我们所需要使用的组件。在你开始把React Native集成到你的应用中之前,首先要决定具体整合的是React Native框架中的哪些部分。而这就是subspec要做的工作。在创建Podfile文件的时候,需要指定具体安装哪些React Native的依赖库。所指定的每一个库就称为一个subspec。可用的subspec都列在node_modules/react-native/React.podspec中,基本都是按其功能命名的。一般来说你首先需要添加Core,这一subspec包含了必须的AppRegistry、StyleSheet、View以及其他的一些React Native核心库。如果你想使用React Native的Text库(即组件),那就需要添加RCTText的subspec。同理,Image需要加入RCTImage,等等。

我们需要在Podfile文件中指定所需的subspec。创建Podfile的最简单的方式就是在/ios子目录中使用CocoaPods的init命令:

创建 Podfile 文件, 命令: pod init

Podfile会创建在执行命令的目录中。你需要调整其内容以满足你的集成需求。调整后的Podfile的内容看起来类似下面这样:

platform :ios, '8.0'

target ‘xxxxx’ do

    pod 'SDWebImage', '~> 3.8.2'

    pod 'AFNetworking', '~> 3.0.1'

    pod 'MJRefresh' pod 'yoga', :path => '../node_modules/react-    native/ReactCommon/yoga'

    pod 'React', :path => '../node_modules/react-native', :subspecs => [

            'Core',

             'CxxBridge', # 如果RN版本 >= 0.45则加入此行

             'DevSupport',# 如果RN版本 >= 0.43,则需要加入此行才能开启开发者菜单

            'RCTText',

            'RCTNetwork',

            'RCTWebSocket', # 这个模块是用于调试功能的 # 在这里继续添加你所需要的RN模块

    ]

pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'

pod 'GLog', :podspec => '../node_modules/react-native/third-party-podspecs/GLog.podspec' pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

end

创建好了Podfile后,就可以开始安装React Native的pod包了。

执行命令:  pod install

如果未出现xcworkspace 文件,那么更新cocoapods 版本,重新install。

install时有几个库特别慢,这里参考 RN中文网 

注意:自己弄的时候,boost的库版本(取决于你rn的版本)和上面链接里面给出的版本不一致。建议自己根据版本号在 boost官网 下载下来,下载下来后请copy到      ~/.rncache

另外需要做几个配置:

1、配置自己的TARGEETS,Build Setting->Linking->Other Linker Flags,添加$(inherited)

2、配置pod PROJECT,Build Setting->Valid Architectures  为 armv7 arm64

3、配置自己的TARGEETS,Build Setting->Search Paths->User Header Search Path  为$(PODS_ROOT),并选择为 recursive

4、配置自己的TARGEETS,Build Setting->Build Active Architecture Only 的debug 改为yes

注:编译后生成的三方库的.a文件的位置在

/Users/自己mac的用户名/Library/Developer/Xcode/DerivedData/xxxxx-dpnlhuluxbuuuggyyhxbpkzutkvl/Build/Products/Debug-iphoneos/

做到此,那么工程已经全部集成进来了


RN运行篇

1、编辑生成个index.js文件,放到主目录下

其中  0.49.0 版本以前 index.ios.js 。 内容为

import React from 'react';

import { AppRegistry, StyleSheet, Text, View } from 'react-native';

class RNHighScores extends React.Component

{

    render() {

        return (

            <View stayle={styles.container}>

                   <Text style={styles.highScoresTitle}>     

                        测试1

                    </Text>

                    <Text style={styles.scores}>

                            测试2

                    </Text>

            </View>

        );

     }

}

const styles = StyleSheet.create({

    container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#FFFFFF', },

    highScoresTitle: { fontSize: 20, textAlign: 'center', margin: 10, },

    scores: { textAlign: 'center', color: '#333333', marginBottom: 5, },

});

AppRegistry.registerComponent('MyReactNativeApp', () => RNHighScores);

2、项目中增加跳转,主要是写个点击事件。执行方法内容为

NSURL *jsCodeLocation;   

jsCodeLocation = [NSURL URLWithString:@"http://127.0.0.1:8081/index.bundle?platform=ios"];

RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation                                                        moduleName:@"MyReactNativeApp"     initialProperties:nil  launchOptions:nil];     UIViewController *vc = [[UIViewController alloc] init]; 

 vc.view = rootView;    [self.navigationController pushViewController:vc animated:YES];

3、打开工程运行,点击按钮,发现报错了  “react-native No bundle URL present”

别慌,因为没bundle,bundle 是干啥的呢?这个是rn的资源文件,所有的js 文件会在这个里面的。

分三种情况:

    1、开发模式,一般是命令行进入主目录,然后执行  npm start ,此时bundle可以下载(服务器就是本机)

    2、release 模式,会将bundle打包到项目里。(使用curl命令生成 main.jsbundle

curl http://localhost:8081/index.ios.bundle -o main.jsbundle

)

注释: 你可以用 react-native-xcode.sh 来帮助部署,路径 node_modules/react-native/scripts/  

    3、已经发布的包更行,会出发下在,然后替换打到项目里的 bundle

我们开发阶段,采用第一种。

运行项目,恭喜你,已经集成成功了。

页面的具体开发,需要您不断探索了。

希望以上对你有帮助。  以上部分内容参考  RN中文网

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343