開發(fā)環(huán)境搭建
1鲤拿、Homebrew
Mac系統(tǒng)基于ruby的包管理工具吻贿,解決安裝Linux平臺下開源工具時(shí)的庫依賴等配置問題撤奸。
下載:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"(注:/usr/local目錄不可寫時(shí)啸驯,sudo chown -R `whoami` /usr/local 修復(fù)。)
使用:brew -v英上、brew list炭序、brew search wget、brew install wget苍日、brew remove wget
2惭聂、Node.js
brew install node安裝NodeJS環(huán)境。
node -v易遣,版本8.2.1彼妻。npm -v嫌佑,版本5.3.0
注:安裝完成后發(fā)現(xiàn)npm命令找不到(-bash: /usr/local/bin/npm: No such file or directory)豆茫。npm,node.js的包管理工具屋摇,一般在install node的時(shí)候即一同安裝揩魂,但我在安裝時(shí)因mac系統(tǒng)更新時(shí)舊版留在了錯(cuò)誤的文件夾路徑中,而且重裝node.js時(shí)并沒有覆蓋掉炮温,所以從錯(cuò)誤的路徑中手動刪除(usr/local/bin中的npm顯示原身火脉,刪除)。
3柒啤、npm install -g react-native-cli
ReactNative的命令行包管理工具倦挂。
//成功
/usr/local/bin/react-native -> /usr/local/lib/node_modules/react-native-cli/index.js
+ react-native-cli@2.0.1?
added 41 packages in 5.394s
4、react-native init TestProject
在想要新建react-native項(xiàng)目的文件路徑下執(zhí)行担巩,init后是自定義文件名
5方援、項(xiàng)目目錄下react-native run-ios,或打開.xcodeproj直接運(yùn)行(直接新建的reactnative項(xiàng)目不需要手動npm start涛癌,但舊項(xiàng)目集成reactnative需要在正確的路徑下npm start)
已有項(xiàng)目接入ReactNative(此過程非常脆弱)
cocoapods接入
寫在前面(重要):此次嘗試是嚴(yán)格按照官網(wǎng)流程犯戏,導(dǎo)入當(dāng)前最新版本0.46.4,但經(jīng)歷了痛徹心扉的失敗拳话,后來嘗試引入0.29.2舊版本成功先匪,于是對其全過程進(jìn)行簡要的分析記錄。
1弃衍、項(xiàng)目目錄下新建ReactComponent文件夾放入node_modules文件夾(舊版引入請使用備份呀非、最新版可直接拷貝init的新項(xiàng)目中的文件夾)、index.ios.js(reactnative的root起點(diǎn)文件)镜盯、和package.json(此文件用于npm start啟動服務(wù))岸裙。
2坦冠、proflie中的本地引入配置(!注意路徑的配置哥桥!):
舊版
pod 'React', :path =>'./ReactComponent/node_modules/react-native', :subspecs => ['Core', 'ART', 'RCTLinkingIOS', //根據(jù)需要引入 ]
新版
pod 'React',:path=>'./ReactComponent/node_modules/react-native',:subspecs=>['Core',
'DevSupport' #RN>=0.43時(shí)需要app內(nèi)的menu應(yīng)加DevSupport,
'RCTText',
'BatchedBridge'#RN>=0.46時(shí)必須引入 //根據(jù)需要引入]
# RN>=0.42.0 時(shí)應(yīng)加入Yoga
pod "Yoga",:path=>"./ReactComponent/node_modules/react-native/ReactCommon/yoga"? //還糾結(jié)了雙引號單引號的問題辙浑,實(shí)際證明并無影響
3、配置info.plist中的NSAppTransportSecurity避免http訪問失斈飧狻(實(shí)際好像模擬器調(diào)試時(shí)并不會失敗url--http://localhost:8081/index.ios.bundle?platform=ios&dev=true)
4判呕、新建ReactRootVC在viewdidload中加入以下代碼,npm start啟動服務(wù)送滞,運(yùn)行侠草。
NSString* strUrl =@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true";
NSURL* jsCodeLocation = [NSURLURLWithString:strUrl];
//注意項(xiàng)目名ProjectName與index.ios.js和package.json中的匹配
RCTRootView* rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName:@"ProjectName" initialProperties:nil launchOptions:nil];
self.view= rootView;
5、0.46.4版本的引入失敗
所有步驟都相同犁嗅,編譯的時(shí)候遇到如下錯(cuò)誤
但是1咛椤!褂微!最后9︱选!宠蚂!機(jī)智的我解決了這個(gè)問題式撼。鏈接如下
https://github.com/facebook/react-native/issues/14925
簡要來說就是0.46以上版本pod的配置應(yīng)在profile里添加BatchedBridge的子模塊依賴,教程里沒有更新求厕。
意不意外V ?驚不驚喜Q窖ⅰ美浦?
手動集成
本來打算再來一遍,但是既然pod引入問題已經(jīng)解決项栏,這塊就不寫了浦辨。
Tip
由于node_modules組件包很大,上傳git的版本應(yīng)忽略此文件夾(ReactComponent/*)忘嫉。