首先,上自己创建的公有pod库:
pod 'pod4ReactNative','~>0.55.4'
包的是RN 0.55.4版本的,iOS可以直接引用该pod库做开发,不再需要使用npm引入RN。
git库:https://github.com/zramals/pod4ReactNative
一、什么情况下使用pod库引入RN
我们知道,官方的RN接入,虽然也是通过pod引入,但是他实际是通过npm下载,pod读取本地spec的方式加载RN库,走的是一种development的环境。
这种方式比较好的使安卓和iOS共用一个版本的RN,他们虽然引用方式不同,但是都读取同一份npm下载的RN,所以基于这种安卓和iOS共同开发的情况,官方的方式可以说非常合适。
但是如果我们与安卓不共同开发,并且技术力量有限,能少一个npm环境就少一个npm环境的情况下(要知道,很多公司放弃RN的主要原因是因为技术力量不足,精通js与原生开发的人实在有限),单一pod引入就显得有必要了。
二、该方式有什么缺点
该方式之所以官方没有给出,我认为有如下原因:
- 需要管理安卓和iOS两套库
- iOS部分pod lint有问题
基于此,省去官方解决两个大问题,总之,我就提供一个npm版本,怎么引入看开发者,另外pod lint不过,我也可以不解决了,一举两得!(其实官方一开始也是想包成pod库的,现在pod search react 还可以看到已经废弃的最高0.13.0-rc版本的RN)
那么,这两大原因,也就是该方式的缺点了:
- pod仅仅维护了iOS一套版本,安卓部分需要安卓自行解决,想要同版本使用RN将花费非常大的精力。而相当多的情况,是安卓和iOS跨平台共同开发才使用RN,这样将反其道而行。
- pod lint不过,也就是正常的方式是不能成pod库的,而市面上的RN pod库无一例外,均采用跳过lint的方式打成正式版本,自然lint不过也就代表着可能会有一些risk。
三、pod4ReactNative
https://github.com/zramals/pod4ReactNative
1. 首先,我将RN 0.55.4版本从官网上下载下来,放到rn-source里面,这样以后要是更新版本,我直接改变rn-source里面的文件即可。
2. 之后我需要创建一份spec,镜像copy官方的spec写法。
3. 然后,修改源文件的引用路径等,然后本地调试,build通过即可(说得简单,做起来那叫一个坑。。。)。
4. 修改cocoapods的ruby代码,修改lint部分,使push得时候可以跳过lint。
5. 最后生成正式库
6. 过个demo试验一下,效果完美。
大功告成!(其中心酸几人知~)
四、总结
pod4ReactNative使用还是需要根据情况,在需要使用的情况下去使用。
如果仅iOS想使用RN,并且对npm环境很迷,只想简单粗暴的使用RN,那么pod4ReactNative将是你的不二选择。
PS:pod4ReactNative已经将如下十分必要的的subspec加入到默认里面去了,所以不再需要显式的指定,
‘yoga’,
‘Core’,
‘CxxBridge’,
‘DevSupport’,
‘RCTWebSocket’,
‘RCTText’,
‘RCTAnimation’,
‘RCTImage’
通常pod 'pod4ReactNative','~>0.55.4'
即可
引用:
https://www.jianshu.com/p/88180b4d2ab7
https://github.com/wuqiuhao/AwsomeReactNative
https://github.com/CodingForMoney/react-native