前言
在工作中遇到一個需求,用原生集成多個react-native項目,關(guān)鍵是react-native項目還在開發(fā),再新建一個原生項目來集成的話又比較麻煩,所以在react-native項目的基礎(chǔ)上改成用cocoapods集成.
如有錯誤,請指出,必定虛心接受,立刻改正!
有關(guān)原生集成多個react-native項目
另外有寫一篇文章,具體操作和內(nèi)容請移駕iOS端實現(xiàn)React Native差異化增量更新
集成到現(xiàn)有原生應(yīng)用
這個就不多講了,react-native中文網(wǎng)里面寫的很完整
現(xiàn)有react-native項目轉(zhuǎn)換成iOS原生
我就拿一個測試項目來給各位試驗一下(版本)
那我們現(xiàn)在開始改造
- cd 到RN項目工程下的ios文件夾
- 執(zhí)行 pod init
-
編寫Podfile文件,填入以下內(nèi)容
# 'node_modules'目錄一般位于根目錄中
# 但是如果你的結(jié)構(gòu)不同,那你就要根據(jù)實際路徑修改下面的`:path`
pod 'React', :path => '../node_modules/react-native', :subspecs => [
'Core',
'CxxBridge', # 如果RN版本 >= 0.47則加入此行
'DevSupport', # 如果RN版本 >= 0.43西壮,則需要加入此行才能開啟開發(fā)者菜單
'RCTText',
'RCTNetwork',
'RCTWebSocket', # 調(diào)試功能需要此模塊
'RCTAnimation', # FlatList和原生動畫功能需要此模塊
# 在這里繼續(xù)添加你所需要的其他RN模塊
]
# 如果你的RN版本 >= 0.42.0醉锅,則加入下面這行
pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
# 如果RN版本 >= 0.45則加入下面三個第三方編譯依賴
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'
-
保存后,執(zhí)行 pod install
5.打開項目工程
6.刪除原有RN引用
7.解決報錯信息
我們會發(fā)現(xiàn)這邊的React是missing,因為我們前面剛刪掉,那么這邊我們同時也刪掉,并且添加新的React,并且選中React移到項目之前
之后我們按住command+shitf+k clean一下項目
p.s.
存在問題,測試類中會報錯'React/RCTLog.h' file not found,這邊我們暫時讓測試類不進入編譯,有大佬知道如何解決的請告知,我后期如果知道解決方案的話也會更新文章,解決我留的坑
再次run之后可以發(fā)現(xiàn)項目已經(jīng)成功的跑起來了
而此時的項目結(jié)構(gòu)如下
到此時就應(yīng)該說大部分已經(jīng)結(jié)束了,項目結(jié)構(gòu)就跟原生的cocoapods項目結(jié)構(gòu)一樣了.
遇到的坑
做RN項目時,肯定會導(dǎo)入不同的第三方庫,絕大部分三方庫都是支持cocoapods的,那么如果遇到不支持的,或者是公司的私庫,沒有podspec文件,那么是不是就無法用了呢?
比如下方的庫
react-native-yusha-customKeyboard
額,我RN項目做得不多,用到這個庫是沒有podspec文件的,就拿這個做示例吧
-
先導(dǎo)入這個庫
因為沒有podspec文件,那么我們在Podfile中也無法添加庫
-
那我們link試一下
我們發(fā)現(xiàn)原來的Libraries又出來了,然后多了一個CustomKeyboard,是否已經(jīng)成功了呢,跑一下項目試試
項目報錯,找不到'React/RCTBridgeModule.h'
之前再網(wǎng)上查資料,說link 和 cocoapods不能共存,看來是有道理的 -
臨時解決方案
在nodu_modules中找到這個庫
添加到React的targets
如果是還沒升級,或者低版本的xcode,選擇類之后,右邊更改targets,.h和.m文件都要改一下
然后再運行項目,我這邊能夠跑起來了,你們那邊呢?