核心概念
如果你正准备从头开始制作一个新的应用,那么React Native会是个非常好的选择。但如果你只想给现有的原生应用中添加一两个视图或是业务流程,React Native也同样不在话下。只需简单几步,你就可以给原有应用加上新的基于React Native的特性、画面和视图等。
把React Native组件植入到iOS应用中有如下几个主要步骤:
1.首先当然要了解你要植入的React Native组件。
2.创建一个Podfile,在其中以subspec的形式填写所有你要植入的React Native的组件。
3.创建js文件,编写React Native组件的js代码。
4.添加一个事件处理函数,用于创建一个RCTRootView。这个RCTRootView正是用来承载你的React Native组件的,而且它必须对应你在index.ios.js中使用AppRegistry注册的模块名字。
5.启动React Native的Packager服务,运行应用。
6.根据需要添加更多React Native的组件。
7.调试。
8.准备部署发布 (比如可以利用react-native-xcode.sh脚本)。
9.发布应用。
开发环境准备
基础环境
首先按照开发环境搭建教程来安装React Native在iOS平台上所需的一切依赖软件(比如npm)。
CocoaPods
CocoaPods是针对iOS和Mac开发的包管理工具。我们用它来把React Native框架的代码下载下来并添加到你当前的项目中
React Native的植入过程同时需要React和React Native两个node依赖包。
我们把具体的依赖包记录在package.json(Sublime Textc创建)文件中。如果项目根目录中没有这个文件,那就自己创建一个。
对于一个典型的React Native项目来说,一般package.json和index.ios.js等文件会放在项目的根目录下。而iOS相关的原生代码会放在一个名为ios/的子目录中,这里也同时放着你的Xcode项目文件(.xcodeproj)。
下面是一个最简单的package.json的内容示例。
示例中的version字段没有太大意义(除非你要把你的项目发布到npm仓库)。scripts中是用于启动packager服务的命令。dependencies中的react和react-native的版本取决于你的具体需求。一般来说我们推荐使用最新版本。你可以使用npm info react和npm info react-native来查看当前的最新版本。另外,react-native对react的版本有严格要求,高于或低于某个范围都不可以。本文无法在这里列出所有react native和对应的react版本要求,只能提醒读者先尝试执行npm install,然后注意观察安装过程中的报错信息,例如require react@某.某.某版本, but none was installed,然后根据这样的提示,执行npm i -S react@某.某.某版本。
{
"name": "ExerciseOne",
"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.44.0"
}
}
使用npm(node包管理器,Node package manager)来安装React和React Native模块。这些模块会被安装到项目根目录下的node_modules/目录中。 在包含有package.json文件的目录(一般也就是项目根目录)中运行下列命令来安装:
$ npm install
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,等等。
在React和React Native模块成功安装到node_modules目录之后,你就可以开始创建Podfile以便选择所需的组件安装到应用中。
创建Podfile的最简单的方式就是在iOS原生代码所在的目录中使用CocoaPods的init命令:
## 在iOS原生代码所在的目录中(也就是`.xcodeproj`文件所在的目录)执行:$ pod init
Podfile会创建在执行命令的目录中。你需要调整其内容以满足你的植入需求。调整后的Podfile的内容看起来类似下面这样:
platform :ios,'8.0'
target'ExerciseOne'do
pod'AFNetworking','3.1.0'
pod'YTKNetwork','2.0.3'
pod'MJExtension'
pod'Reachability'
pod'MBProgressHUD'
pod'BabyBluetooth','~> 0.7.0'
# 'node_modules'目录一般位于根目录中
#但是如果你的结构不同,那你就要根据实际路径修改下面的`:path`
pod'React',:path =>'../node_modules/react-native', :subspecs => [
'Core',
'RCTText',
'RCTActionSheet',
'RCTImage',
'RCTNetwork',
'RCTWebSocket',#这个模块是用于调试功能的
#在这里继续添加你所需要的模块
]
#如果你的RN版本>= 0.42.0,请加入下面这行
pod"Yoga", :path =>"../node_modules/react-native/ReactCommon/yoga"
end
Pod安装
创建好了Podfile后,就可以开始安装React Native的pod包了。
$ pod install
ps:在按照官网的书写模式后 我执行pod install 后出现报错: (格式和路径都没有问题 .......)
后来才看出来自己是直接在iOS工程里集成的根目录的问题 之后将path路径两位小数点改成一位就没问题 执行pod install成功.
现在我们已经准备好了所有依赖,可以开始着手修改原生代码来把React Native真正植入到应用中了。在我们的2048示例中,首先尝试添加一个显示有"High Score"(得分排行榜)的React Native页面。
React Native组件:创建一个index.ios.js文件
首先创建一个空的index.ios.js文件。一般来说我们把它放置在项目根目录下。
index.ios.js是React Native应用在iOS上的入口文件。而且它是不可或缺的!它可以是个很简单的文件,简单到可以只包含一行require/import导入语句。本教程中为了简单示范,把全部的代码都写到了index.ios.js里(当然实际开发中我们并不推荐这样做)。
# 在项目根目录执行以下命令创建文件:$ touch index.ios.js
添加你自己的React Native代码:
RCTRootView集成:
新建一个UIViewController中执行:
NSURL*jsCodeLocation = [NSURLURLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=ture"];
NSDictionary*dic =@{@"scores":@[@{@"name":@"Alex",@"value":@"42"},@{@"name":@"Joel",@"value":@"10"}]};
RCTRootView*rootView = [[RCTRootViewalloc]initWithBundleURL:jsCodeLocationmoduleName:@"ExerciseOne"initialProperties:diclaunchOptions:nil];
self.view= rootView;
测试运行: 由于请求是http的 修改info.plist:
运行Packager $ npm start 执行成功如图:
运行应用
如果你使用的是Xcode,那么照常编译和运行应用即可。如果你没有使用Xcode(但是你仍然必须安装Xcode),则可以在命令行中使用以下命令来运行应用:
在项目的根目录中执行: $ react-native run-ios
运行成功如下图: