iOS 現(xiàn)有項(xiàng)目集成React-Native

配置開(kāi)發(fā)環(huán)境

參照官網(wǎng) 搭建RN環(huán)境

集成進(jìn)現(xiàn)有iOS項(xiàng)目

1.設(shè)置項(xiàng)目結(jié)構(gòu)

首先創(chuàng)建一個(gè)空文件夾作為項(xiàng)目根目錄听想,
然后在其中創(chuàng)建iOS文件夾腥刹,把原工程夾里面的內(nèi)容拷貝到iOS文件夾

2.安裝JavaScript依賴包

在項(xiàng)目根目錄下創(chuàng)建名為package.json的空文件,然后填入以下內(nèi)容:

{
  "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",
    "react-native": "0.51.0-rc.3"
  }
}

打開(kāi)終端汉买,進(jìn)入到項(xiàng)目的根目錄中(即包含有package.json文件的目錄)衔峰,在終端鍵入如下命令來(lái)安裝React和React Native模塊:

$ npm install

3.配置CocoaPods

安裝CocoaPods教程請(qǐng)自行百度
使用終端進(jìn)入iOS目錄執(zhí)行以下命令,創(chuàng)建Podfile文件:

$ pod init

按照如下內(nèi)容編輯Podfile:

source 'https://github.com/CocoaPods/Specs.git'

# Swift應(yīng)用必須的添加以下兩行
platform :ios, '8.0'
use_frameworks!

# target的名字一般與你的項(xiàng)目名字相同
target 'YourProjectName' do

  # 'node_modules'目錄一般位于根目錄中
  # 但是如果你的結(jié)構(gòu)不同蛙粘,那你就要根據(jù)實(shí)際路徑修改下面的`:path`
  pod 'React', :path => '../node_modules/react-native', :subspecs => [
    'Core',
    'CxxBridge', # 如果RN版本 >= 0.45則加入此行
    'DevSupport', # 如果RN版本 >= 0.43垫卤,則需要加入此行才能開(kāi)啟開(kāi)發(fā)者菜單
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # 這個(gè)模塊是用于調(diào)試功能的
    # 在這里繼續(xù)添加你所需要的RN模塊
  ]
  # 如果你的RN版本 >= 0.42.0,請(qǐng)加入下面這行
  pod "yoga", :path => "../node_modules/react-native/ReactCommon/yoga"

   # 如果RN版本 >= 0.45則加入下面三個(gè)第三方編譯依賴
  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

接下來(lái)執(zhí)行:

$ pod install

等待安裝結(jié)束

注:如果你看到類似"The swift-2048 [Debug] target overrides the FRAMEWORK_SEARCH_PATHS build setting defined in Pods/Target Support Files/Pods-swift-2048/Pods-swift-2048.debug.xcconfig. This can lead to problems with the CocoaPods installation"的警告出牧,請(qǐng)查看Xcode的Build Settings中的Framework Search Paths選項(xiàng)穴肘,確保其中的Debug和Release都只包含$(inherited)。

安裝成功后舔痕,通過(guò)工程里面的workspace打開(kāi)工程评抚,編譯豹缀,此時(shí)可能會(huì)報(bào)錯(cuò),提示找不到fishkook.h文件慨代,此時(shí)只需將報(bào)錯(cuò)部分邢笙,也就是 #import <fishhook/fishhook> 改為 #import <React/fishhook> 她肯,再次編譯即可編譯成功

4.簡(jiǎn)單Demo

在項(xiàng)目的根目錄創(chuàng)建名為index.js文件挡毅,鍵入如下代碼:

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

class RNHighScores extends React.Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.highScoresTitle}>
          Hello World!
        </Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#FFFFFF',
  },
});

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

接下來(lái),在iOS工程中新建一個(gè)ViewController作為根控制器(這里命名為CustomRootVC)赦役,取消從storyboard中加載視圖丈积,在info.plist中添加白名單筐骇,以便允許程序訪問(wèn)http鏈接:

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

接著,在Appdelegate中鍵入如下代碼:

import UIKit
import React

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        window = UIWindow(frame: UIScreen.main.bounds)
        
        let jsCodeLocation = URL(string: "http://localhost:8081/index.bundle?platform=ios")
        let rootView = RCTRootView(
            bundleURL: jsCodeLocation,
            moduleName: "MyReactNativeApp",
            initialProperties: nil,
            launchOptions: nil
        )
        let rootVC = CustomRootVC()
        rootVC.view = rootView
        
        window?.rootViewController = rootVC
        window?.makeKeyAndVisible()
        
        return true
    }
}

到此為止江滨,一個(gè)簡(jiǎn)單的ReactNativeDemo就寫好了铛纬,但是想要運(yùn)行起來(lái)還需要做一件事,就是開(kāi)啟本地server唬滑。打開(kāi)終端告唆,進(jìn)入到node_modules文件夾所在目錄,也就是項(xiàng)目的根目錄晶密,執(zhí)行如下命令:

$ npm start

出現(xiàn)如下圖所示擒悬,則說(shuō)明服務(wù)啟動(dòng)成功:



接下來(lái),回到xcode稻艰,運(yùn)行項(xiàng)目


運(yùn)行時(shí)界面
運(yùn)行成功界面

聲明:以上內(nèi)容部分摘自ReactNative中文網(wǎng)懂牧,轉(zhuǎn)載請(qǐng)注明出處!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尊勿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子元扔,更是在濱河造成了極大的恐慌,老刑警劉巖途事,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尸变,死亡現(xiàn)場(chǎng)離奇詭異减俏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)骑晶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門桶蛔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)仔雷,“玉大人舔示,你說(shuō)我怎么就攤上這事∈玻” “怎么了俺祠?”我有些...
    開(kāi)封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵蜘渣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蔫缸,道長(zhǎng),這世上最難降的妖魔是什么拾碌? 我笑而不...
    開(kāi)封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任倦沧,我火速辦了婚禮,結(jié)果婚禮上窖认,老公的妹妹穿的比我還像新娘告希。我一直安慰自己,他們只是感情好喝噪,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布酝惧。 她就那樣靜靜地躺著,像睡著了一般巫财。 火紅的嫁衣襯著肌膚如雪哩陕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天闽瓢,我揣著相機(jī)與錄音扣讼,去河邊找鬼缨叫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛艰山,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播曙搬,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼纵装,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼据某!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起癣籽,我...
    開(kāi)封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤筷狼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后塑顺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扬绪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年勒奇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巧骚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片格二。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顶猜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滔吠,到底是詐尸還是另有隱情挠日,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布冬骚,位于F島的核電站懂算,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喜德。R本人自食惡果不足惜垮媒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贱呐。 院中可真熱鬧入桂,春花似錦、人聲如沸抗愁。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)金矛。三九已至,卻和暖如春驶俊,著一層夾襖步出監(jiān)牢的瞬間免姿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工故俐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留紊婉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓刚陡,卻偏偏與公主長(zhǎng)得像株汉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蝙云,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • CocoaPods 是什么勃刨? CocoaPods 是一個(gè)負(fù)責(zé)管理 iOS 項(xiàng)目中第三方開(kāi)源庫(kù)的工具。CocoaPo...
    朝洋閱讀 25,633評(píng)論 3 51
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言斑匪,發(fā)作 oo-boon-too 的音锋勺。了解發(fā)音是有意...
    螢火蟲(chóng)de夢(mèng)閱讀 99,156評(píng)論 9 467
  • 001+思:今天晚上做的項(xiàng)目,粗略記錄一下贮勃,至少有八個(gè)大問(wèn)題悬包。做完整個(gè)項(xiàng)目布近,暫時(shí)還有一個(gè)問(wèn)題丝格,輸入無(wú)法成功插入到數(shù)...
    瑾蘭閱讀 221評(píng)論 0 1
  • 1.在這聽(tīng)你吹牛逼,我還不如去意淫预伺。 2.悲喜曼尊,得失,都是生活瞒御。 3.有些人一遇到刺激渾身的刺就炸起來(lái)了,來(lái)了個(gè)萬(wàn)...
    閑悠閱讀 172評(píng)論 0 0
  • 方法一:使用終端配置: 參考鏈接:blogyang.com/archives/488 方法二:手動(dòng)配置: 提前創(chuàng)建...
    丁鍋鍋閱讀 3,853評(píng)論 0 0