iOS ReactNative私有库指南

创建RN私有库

为了加速RN的下载和方便集成,我把RN(0.56.0)做成私有pod放到了gitlab的私有源中,参考《使用Cocoapods创建私有podspec》、《私有Pods集成react-native库》。

开始之前,需要搞清楚两个概念:

cocoapods 是通过spec repos + pod source code repo 来进行代码版本管理,cocoapods 的master spec repo来管理所有的第三方库 spec,每个 spec 中都包含了对于 pod 的 source code pod。

私有源仓库:类似于 cocoapods 官方来管理 specs 的仓库,用来管理私有库的 spec,下文中使用YOUR_SPECS_REPO来指代。同时,这个 repo 也有自己的 git 地址,下文使用YOUR_SPECS_GIT

私有 pod 代码仓库:存放私有库 source code 的 repo。

下面是具体的操作步骤:

创建私有ReactNative repo

  • 把 github 上的源码 clone 下来,然后 push 到自己的私有库 git 中

  • 仓库代码是github源码

  • 修复0.56.0中WebSocket问题

创建&修改 podspec.json

  • 切换到对应的tag commit: 如v0.56.0,下面的yoga和React需要保存version一致。

    • 然后按照《私有Pods集成react-native库》中生成和修改了yoga.podspec.json、React.podspec.json,需要修改yoga.podspec.json的source_files和public_header_files
pod ipc spec React.podspec >> React.podspec.json
cd ReactCommon/yoga
pod ipc spec yoga.podspec >> yoga.podspec.json
  • 修改yoga.podspec.json
"git": "YOUR_RN_GIT"
"source_files": "ReactCommon/yoga/**/*.{cpp,h}",
"public_header_files": "ReactCommon/yoga/**/{Yoga,YGEnums,YGMacros}.h"

lint & push podspec.json

  • 需要注意的是,修改后的podspec.json文件,需要进行lint校验、上传到私有源,下面是yoga的方法
pod spec lint yoga.podspec.json --no-clean --verbose --allow-warnings
pod repo push YOUR_SPECS_REPO yoga.podspec.json --allow-warnings
  • 通过上面的方法可以吧RN和yoga添加到私有源中,但是我们pod install的时候,还是会报错
Folly-error.png
  • Folly在RN中被CxxBridge、jschelpers等subspecs依赖,Folly.podspec文件本身在RN源码目录third-party-podspecs中,需要把Folly.podspec也上传到私有源中,否则pod install会出现错误

  • 由于Folly在cocoapods公共源中已经没有维护,但是有志愿者维护了一个folly-ios的pod,需要我们添加到私有源中,添加方法和上面类似

pod repo push YOUR_SPECS_REPO Folly.podspec --allow-warnings
  • 类似的,我们也需要把React.podspec.json文件提交到私有源中:
pod spec lint React.podspec.json --no-clean --fail-fast --verbose --allow-warnings --sources=YOUR_SPECS_GIT,https://github.com/CocoaPods/Specs.git
pod repo push YOUR_SPECS_REPO React.podspec.json --verbose --allow-warnings --sources=YOUR_SPECS_GIT,https://github.com/CocoaPods/Specs.git

最终,我们总共需要添加了三个私有repo:RN/Folly/yoga

创建离线js bundle包

使用下面命令生成js bundle:

react-native bundle --dev true --entry-file index.ios.js --bundle-output ios/main.jsbundle --platform ios

通过--dev参数(true/false)控制生成debug/release包

如何维护RN版本

同步Github上的ReactNative源码,在sourceTree中,添加remote:

sourcetree.png

切换到当前的分支(0.57-stable),可以从github上面拉取最新代码(使用rebase) 更新podspec.json

pod ipc spec React.podspec >> React.podspec.json
cd ReactCommon/yoga
pod ipc spec yoga.podspec >> yoga.podspec.json

创建RN私有库的中已经提供了需要修改的地方。

lint & push podspec.json,或者直接在私有源中进行修改。

RN代码有bug怎么办?

从RN 0.56.0到RN 0.57.3,都没有解决websocket crash问题。

解决方法:

  1. 查看github issue,寻找问题解决方法。已web socket为例,已经用人提了PR

  2. 把PR中的源代码下载到本地,然后本地进行验证。验证通过后,则commit && push到当前tag 所在的分支

  3. 由于更新了RN源码,我们需要修改私有库中tag对应的commit:

    1. 删除之前的tag(0.57.3),在最新的commit中来添加新tag(0.57.3)

    2. 在React.podspec.json中,使用branch替代tag

"source": {
 "git": "YOUR_RN_GIT",
 "branch": "0.57-stable"
 },

专治疑难杂症

RN 0.56.0 问题:

RN 0.57.3 问题:

  • Unable to resolve module schedule/tracking
schedule-error.png

参考资料:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容