現有的iOS項目裏集成RN的支持的大致框架, iOS應用集成RN的SDK,運行時加載預先打包好的jsBundle
。node
在現有iOS工程集成React Native組件的主要內容有:react
RCRootView
RNProject
。RNProject
中建立/ios
文件夾。並將現有工程拷貝到/ios
文件夾下。在React Native 工程文件夾RNProject
根目錄建立package.json
文件,文件的內容以下:ios
{
"name": "MyReactNativeApp",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "yarn react-native start"
}
}
複製代碼
打開終端,進入對應React Native工程目錄, 安裝下react
和 react-native
核心依賴git
npm install react react-native
複製代碼
安裝完成後,會在當前工程目錄建立一個新的/node_modules
文件夾, 這個文件裏存儲着當前工程所需的全部JavaScript依賴庫。github
最後,將node_modules/
添加到iOS 工程的.gitignore
文件中。web
這階段目錄結構以下:objective-c
CocoaPods
是iOS
開發的一個包管理工具. 請自行安裝~。npm
進入React Native工程的ios目錄,編輯Podfile
文件(按照官網步驟可能會報錯,由於react的版本不一樣,配置不一樣),內容以下👇🏻 參考連接json
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
platform :ios, '10.0'
target 'RnDiffApp' do
config = use_native_modules!
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => false
)
target 'RnDiffAppTests' do
inherit! :complete
# Pods for testing
end
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
use_flipper!()
post_install do |installer|
react_native_post_install(installer)
end
end
複製代碼
編輯完成後,執行pod install
命令。react-native
index.js
文件首先在React Native工程的根目錄建立index.js
文件,index.js
是React Native應用程序的起點,通常來講是必須的。
打開index.js
文件,將下面代碼拷貝到其中。
import React from 'react';
import {AppRegistry, StyleSheet, Text, View, Image} from 'react-native';
class RNTest extends React.Component {
render() {
return (
<View style={styles.container}> <Text style={styles.title}>Hello</Text> <Image style={styles.avatar} source={{uri: 'http:\/\/patpatwebstatic.s3.us-west-2.amazonaws.com\/origin\/other\/cms\/position\/60ab65d1b20a2.jpg'}} /> </View>
);
}
}
const styles = StyleSheet.create({
container: {
display: 'flex',
alignItems: 'center',
marginTop: 60
},
title: {
fontSize: 20,
textAlign: 'center',
color: '#333'
},
avatar: {
width: 300,
height: 300,
marginTop: 20
}
});
// Module name
AppRegistry.registerComponent('RNTest', () => RNTest);
複製代碼
RCTRootView
加載顯示index.js的內容首先,在iOS
文件中引入RCTRootView
頭文件
#import <React/RCTRootView.h>
複製代碼
建立一個點擊事件,執行testRNButtonAction
方法。
- (void)testRNButtonAction
{
NSLog(@"RNTest Button Pressed");
NSURL *jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.bundle?platform=ios"];
RCTRootView *rootView =
[[RCTRootView alloc] initWithBundleURL: jsCodeLocation
moduleName: @"RNTest"
initialProperties:@{}
launchOptions: nil];
UIViewController *vc = [[UIViewController alloc] init];
vc.view = rootView;
[self presentViewController:vc animated:YES completion:nil];
}
複製代碼
Apple已阻止隱式明碼通信 HTTP資源加載。 所以,須要在iOS工程的info.plist文件中作一下配置。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>localhost</key>
<dict>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
複製代碼
要運行app工程,首先要啓動React Native的開發服務器。 在React Native工程的根目錄運行:
npm start
複製代碼
啓動成功以下:
若是報找不到yarn
命令的錯誤,則須要安裝一下yarn, 在終端輸入命令:
npm install --global yarn
複製代碼
react native服務啓動後,直接在Xcode中運行你的iOS工程,點擊對應的按鈕執行testRNButtonAction
方法,成功加載React Native的界面。
另外,你還能夠經過命令行的方式運行你的工程:
npx react-native run-ios
複製代碼
找不到對應React Native依賴庫問題: 如:No podspec found for FBReactNativeSpec
in ../node_modules/react-native/Libraries/FBReactNativeSpec
node 相關問題解決: blog.csdn.net/xinghuowuzh…