1. 程式人生 > >最新iOS原生專案整合React-Native

最新iOS原生專案整合React-Native

       大樓不是一天所建成,是時間慢慢積累起來滴,原先用原生寫的專案,沒辦法將專案中所有的程式碼都換成RN,而且我也不認為全換成RN就是好的,所以準備先將專案中的一些頁面改成RN開發。由於我們並沒有使用Cocoapods,因為Cocoapods管理第三方依賴的時候會自動建立一些目錄,不便整個團隊的管理。本篇文章記錄了在已經建立好的原生專案上整合react-native的過程。

前提:電腦已經安裝過React-Native相關環境。

一、建立工程

我在桌面建立了一個工程,命名RNTest。

下面我使用Xcode建立一個新的專案作為我們原生的ios專案:

開啟Xcode -> Create a new Xcode project -> Single View Application ->RNtest


 建立工程

二、新增package.json檔案

在RNTest目錄下建立一個package.json。


package.json

三、安裝react-native模組

在終端cd到專案目錄,然後執行 npm install。


四. 建立 index.ios.js(js檔案入口)

在RNtest資料夾裡建立index.ios.js檔案,作為js檔案入口。


五、手動整合react-native框架

1.新增react-native工程檔案

由於專案沒有使用Cocoapods進行第三方依賴包管理,所有我們需要手動將react-native工程包新增到我們的原生ios工程中。開啟RNtest/node_modules/react-native目錄,找到相關的專案包,將React相關的工程包手動新增到專案中:

由於要拉的東西比較多也比較雜,首先先拉React.xcodeproj檔案。(路徑如圖)


在整合node_modules/react-native/Libraries下的檔案


2.新增相關frameworks檔案

接下來要將相關的frameworks檔案新增到工程中,RNtest -> TARGETS -> RNtest -> Build Phases -> Link Binary Width Libraries


最後別忘了加上libstdc++.tbd。

3.在Edit Scheme的Build中新增React

向Edit Scheme的Build中新增React,並拖拽到最上位置,並取消勾選Parallelize Build選項。這一步很關鍵,因為專案需要先編譯React.a檔案。



4.最後環境配置

Build Settings 的 Other Linker Flags設定為-ObjC

Header Search Paths設定為$(SRCROOT)/node_modules/react-native/React路徑,並設定為 recursive。

5、新增react-native應用

下面我們在原生ios應用中新增一個檢視容器,用於展示react-native實現的內容。

在原生ios應用新增容器檢視我們在工程檔案下建立一個名為ReactView的UIView檔案:ReactnativeIOS目錄 -> 右鍵 -> New File -> Cocoa Touch Class -> ReactView,


6、更新App Transport Security

直接執行專案會報Could not connect to development server錯誤,在iOS 9以上的系統中,除非明確指明,否則應用無法通過http協議連線到localhost主機。 我們建議你在Info.plist檔案中將localhost列為App Transport Security的例外。 如果不這樣做,在嘗試通過http連線到伺服器時,會遭遇這個錯誤 - Could not connect to development server.

開啟工程中的Info.list檔案,新增下面配置即可:


7.啟動開發伺服器

在執行我們的專案之前,我們需要先啟動我們的開發伺服器。進入RNtest目錄,然後啟動。$ react-native start


六、執行ios專案

通過Xcode點選專案或者command + R執行專案,如果順利的話,就會看到成功執行的介面: