ios 原生接入RN

以下創(chuàng)建過(guò)程的前提,電腦已經(jīng)安裝cocoaPods拆檬,已經(jīng)配置好react native環(huán)境,以下終端命令我都是在項(xiàng)目根目錄下進(jìn)行妥凳。

第一步竟贯,Xcode傳建一個(gè)原生項(xiàng)目。

第二步逝钥,添加RN需要的配置文件

在項(xiàng)目的根目錄下創(chuàng)建一個(gè)package.json文件
touch package.json
把以下內(nèi)容復(fù)制進(jìn)去:

{
  "name" : "RNDemo",
  "version" : "0.0.1",
  "private" : true,
  "scripts" : {
    "start" : "node node_modules/react-native/local-cli/cli.js start",
    "test" : "jest"
  },
  "dependencies" : {
    "react" : "16.0.0-alpha.6",
    "react-native" : "0.44.3"
  }
}

react和react-native的版本根據(jù)自己的需要進(jìn)行設(shè)定屑那,但要注意二者版本匹配。然后艘款,在項(xiàng)目根目錄下執(zhí)行:
npm install

第三步持际,添加cocoaPods需要的配置文件

在項(xiàng)目的根目錄下創(chuàng)建一個(gè)Podfile文件
vim Podfile
把以下內(nèi)容復(fù)制進(jìn)去:

platform :ios, '8.0'
target “RNDemo” do
  # 'node_modules'目錄一般位于根目錄中
  # 但是如果你的結(jié)構(gòu)不同,那你就要根據(jù)實(shí)際路徑修改下面的`:path`
  pod ‘Yoga’, :path => './node_modules/react-native/ReactCommon/yoga’
  pod 'React', :path => './node_modules/react-native', :subspecs => [
    'Core',
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # 這個(gè)模塊是用于調(diào)試功能的
    # 在這里繼續(xù)添加你所需要的模塊
  ]
end

依賴(lài)的庫(kù)名是React, 根據(jù)項(xiàng)目的需要添加不同的subspecs進(jìn)來(lái)哗咆。如要使用Text那么加進(jìn)來(lái)RCTText, Image就加RCTImage等等蜘欲。可用的subspecs列表可以查閱
node_modules/react-native/React.podspec文件晌柬。然后執(zhí)行:
pod install

注意執(zhí)行pod install 時(shí)可能會(huì)發(fā)生以下錯(cuò)誤

1姥份、路徑錯(cuò)誤

[!] No podspec found for `React` in`./ReactComponent/node_modules/react-native`

[!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes in your editor of choice.

解決辦法是查看path中路徑是否正確呜叫,修改成卻路徑即可。

2殿衰、路徑指定正確后朱庆,可能會(huì)提示下面這個(gè)錯(cuò)誤:

屏幕快照 2017-09-25 13.34.05.png

如果copy我的Podfile文件里的全部?jī)?nèi)容,不會(huì)出現(xiàn)此問(wèn)題闷祥,此問(wèn)題是由于Yoga的路徑問(wèn)題娱颊。

屏幕快照 2017-09-25 13.37.19.png

第四步,創(chuàng)建index.ios.js

在項(xiàng)目根目錄下:
touch index.ios.js

'use strict'

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

export default class NativeAPP extends Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>
          Welcome to React Native!
        </Text>
        <Text style={styles.instructions}>
          To get started, edit index.ios.js
        </Text>
        <Text style={styles.instructions}>
          Press Cmd+R to reload,{'\n'}
          Cmd+D or shake for dev menu
        </Text>
      </View>
    );
  }
}

const 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('NativeAPP', () => NativeAPP);

第五步凯砍,用Xcode打開(kāi)app

1箱硕、配置下info.plist文件配置HTTP請(qǐng)求白名單,在iOS 9以上的系統(tǒng)中悟衩,需要配置白名單剧罩,否則應(yīng)用無(wú)法通過(guò)http協(xié)議連接到localhost主機(jī)。 如果不這樣做座泳,在嘗試通過(guò)http連接到服務(wù)器時(shí)惠昔,會(huì)遭遇這個(gè)錯(cuò)誤 - Could not connect to development server. 添加

<key>NSAppTransportSecurity</key> 
<dict> 
  <key>NSExceptionDomains</key>
   <dict> 
      <key>localhost</key> 
        <dict> 
          <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
          <true/>
        </dict>
     </dict>
 </dict>

不配置報(bào)錯(cuò)信息:

屏幕快照 2017-09-25 14.54.25.png

2、運(yùn)行工程之前我們需要先將service服務(wù)運(yùn)行起來(lái)挑势,執(zhí)行
npm start

3镇防、代碼里引入頭文件:
#import "RCTRootView.h"

按鈕點(diǎn)擊事件:

NSURL *jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios"];
    RCTRootView *rootView = [[RCTRootView alloc]
                             initWithBundleURL : jsCodeLocation
                             moduleName : @"NativeAPP"
                             initialProperties: nil
                             launchOptions : nil];
    UIViewController *vc = [[UIViewController alloc] init];
    vc.view = rootView;
    [self presentViewController:vc animated:YES completion:nil];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市潮饱,隨后出現(xiàn)的幾起案子来氧,更是在濱河造成了極大的恐慌,老刑警劉巖香拉,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啦扬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡凫碌,警方通過(guò)查閱死者的電腦和手機(jī)扑毡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)证鸥,“玉大人僚楞,你說(shuō)我怎么就攤上這事⊥鞑悖” “怎么了泉褐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鸟蜡。 經(jīng)常有香客問(wèn)我膜赃,道長(zhǎng),這世上最難降的妖魔是什么揉忘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任跳座,我火速辦了婚禮端铛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疲眷。我一直安慰自己禾蚕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布狂丝。 她就那樣靜靜地躺著换淆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪几颜。 梳的紋絲不亂的頭發(fā)上倍试,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音蛋哭,去河邊找鬼县习。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谆趾,可吹牛的內(nèi)容都是我干的躁愿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼棺妓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼攘已!你這毒婦竟也來(lái)了炮赦?” 一聲冷哼從身側(cè)響起怜跑,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吠勘,沒(méi)想到半個(gè)月后性芬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剧防,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年植锉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峭拘。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俊庇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸡挠,到底是詐尸還是另有隱情辉饱,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布拣展,位于F島的核電站彭沼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏备埃。R本人自食惡果不足惜姓惑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一已骇、第九天 我趴在偏房一處隱蔽的房頂上張望涎才。 院中可真熱鬧,春花似錦、人聲如沸碘橘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)佑钾。三九已至,卻和暖如春烂翰,著一層夾襖步出監(jiān)牢的瞬間夯缺,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工甘耿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留踊兜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓佳恬,卻偏偏與公主長(zhǎng)得像捏境,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毁葱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理垫言,服務(wù)發(fā)現(xiàn),斷路器倾剿,智...
    卡卡羅2017閱讀 134,661評(píng)論 18 139
  • 核心概念 如果你正準(zhǔn)備從頭開(kāi)始制作一個(gè)新的應(yīng)用筷频,那么React Native會(huì)是個(gè)非常好的選擇。但如果你只想給現(xiàn)有...
    made_China閱讀 1,389評(píng)論 1 2
  • 或許,每個(gè)人的心中都有些看似平凡芹缔,實(shí)而不凡的人坯癣。 -------小引 重回記憶的隧...
    初勛閱讀 466評(píng)論 5 4
  • Python 實(shí)戰(zhàn)-第 1 周-練習(xí)項(xiàng)目02-爬取商品信息 成果展示 代碼 貼代碼如下。同時(shí)放在 GitHub 庫(kù)...
    蘇尚君閱讀 874評(píng)論 0 0