Realm编译提速

原创文章转载请注明出处

由于Realm跨平台的特性以及一些相对于SQLite性能上的提升,我在15年就开始尝试在项目中使用Realm替换SQLite。

到了16年以后,Realm进行了一些升级,通过源码编译的时候还会从网络下载realm-core和realm-sync两个包,由于众所周知的GFW影响,这两个包几乎无法下载,导致编译失败进而影响了整个工程的编译打包。

接下来的步骤你需要有一个梯子,我们要通过浏览器下载这两个包,让整个编译速度快起来,而且保证能完成编译。

1.配置Carthage去取一下realm-cocoa的源码,打开build.sh文件找到以下两个函数。

download_core() {
    echo "Downloading dependency: core ${REALM_CORE_VERSION}"
    TMP_DIR="$TMPDIR/core_bin"
    mkdir -p "${TMP_DIR}"
    CORE_TMP_TAR="${TMP_DIR}/core-${REALM_CORE_VERSION}.tar.xz.tmp"
    CORE_TAR="${TMP_DIR}/core-${REALM_CORE_VERSION}.tar.xz"
    if [ ! -f "${CORE_TAR}" ]; then
        local CORE_URL="https://static.realm.io/downloads/core/realm-core-${REALM_CORE_VERSION}.tar.xz"
        set +e # temporarily disable immediate exit
        local ERROR # sweeps the exit code unless declared separately
        ERROR=$(curl --fail --silent --show-error --location "$CORE_URL" --output "${CORE_TMP_TAR}" 2>&1 >/dev/null)
        if [[ $? -ne 0 ]]; then
            echo "Downloading core failed:\n${ERROR}"
            exit 1
        fi
        set -e # re-enable flag
        mv "${CORE_TMP_TAR}" "${CORE_TAR}"
    fi

    (
        cd "${TMP_DIR}"
        rm -rf core
        tar xf "${CORE_TAR}" --xz
        mv core core-${REALM_CORE_VERSION}
    )

    rm -rf core-${REALM_CORE_VERSION} core
    mv ${TMP_DIR}/core-${REALM_CORE_VERSION} .
    ln -s core-${REALM_CORE_VERSION} core
}

download_sync() {
    echo "Downloading dependency: sync ${REALM_SYNC_VERSION}"
    TMP_DIR="$TMPDIR/sync_bin"
    echo ${TMP_DIR}
    mkdir -p "${TMP_DIR}"
    SYNC_TMP_TAR="${TMP_DIR}/sync-${REALM_SYNC_VERSION}.tar.xz.tmp"
    echo ${SYNC_TMP_TAR}
    SYNC_TAR="${TMP_DIR}/sync-${REALM_SYNC_VERSION}.tar.xz"
    echo ${SYNC_TAR}
    if [ ! -f "${SYNC_TAR}" ]; then
        local SYNC_URL="https://static.realm.io/downloads/sync/realm-sync-cocoa-${REALM_SYNC_VERSION}.tar.xz"
        set +e # temporarily disable immediate exit
        local ERROR # sweeps the exit code unless declared separately
        ERROR=$(curl --fail --silent --show-error --location "$SYNC_URL" --output "${SYNC_TMP_TAR}" 2>&1 >/dev/null)
        if [[ $? -ne 0 ]]; then
            echo "Downloading sync failed:\n${ERROR}"
            exit 1
        fi
        set -e # re-enable flag
        mv "${SYNC_TMP_TAR}" "${SYNC_TAR}"
    fi

    (
        cd "${TMP_DIR}"
        rm -rf sync
        tar xf "${SYNC_TAR}" --xz
        mv core sync-${REALM_SYNC_VERSION}
    )

    rm -rf sync-${REALM_SYNC_VERSION} core
    mv ${TMP_DIR}/sync-${REALM_SYNC_VERSION} .
    ln -s sync-${REALM_SYNC_VERSION} core
}

大概看一下这两个函数就是去 https://static.realm.io 下载对应的依赖包,然后拷贝到TMP_DIR目录,解压,知道这个过程就简单了。

2.我们先在download_core()的代码中打印一下TMP_DIR、CORE_TMP_TAR、CORE_TAR、REALM_CORE_VERSION和REALM_SYNC_VERSION这几个变量,记住echo的代码要写在变量赋值语句后面。然后我们执行一下命令,看看结果。

./build.sh download-core

比如我这里打印出来的是

Downloading dependency: core 2.1.4
1.0.0-BETA-3.3
/var/folders/dz/cj9x9hg10t1927wqlgjfdlqm0000gn/T//core_bin
/var/folders/dz/cj9x9hg10t1927wqlgjfdlqm0000gn/T//core_bin/core-2.1.4.tar.xz.tmp
/var/folders/dz/cj9x9hg10t1927wqlgjfdlqm0000gn/T//core_bin/core-2.1.4.tar.xz

3.现在我们已经知道要下载的依赖包版本,从build.sh里面可以知道具体的下载链接分别是:

https://static.realm.io/downloads/core/realm-core-2.1.4.tar.xz
https://static.realm.io/downloads/sync/realm-sync-cocoa-1.0.0-BETA-3.3.tar.xz

打开浏览器,爬梯子去下载这两个包吧。这里有个特殊情况,我通过Chrome浏览器下载的压缩包,在执行tar xf xxx.tar.xz --xz的时候会报错:

core/librealm-watchos.a: Lzma library error: No progress is possible
tar: Error exit delayed from previous errors.

改成Safari浏览器下载的压缩包就能正常解压。

4.根据第二步打印的内容,将realm-core-2.1.4.tar.xz文件拷贝到/var/folders/dz/cj9x9hg10t1927wqlgjfdlqm0000gn/T/core_bin目录中,根据build.sh的代码要求修改文件名为core-2.1.4.tar.xz,将realm-sync-cocoa-1.0.0-BETA-3.3.tar.xz文件拷贝到/var/folders/dz/cj9x9hg10t1927wqlgjfdlqm0000gn/T/sync_bin目录中,根据build.sh的代码要求修改文件名为sync-1.0.0-BETA-3.3.tar.xz

现在你可以愉快的进行编译了,存在依赖包的时候就会直接解压压缩包,不会再去从网络下载。

因为CocoaPods经常出错,时不时的就会清空缓存文件,导致Realm的库重新打包,所以我采用Carthage将Realm打包成静态库导入工程中,这样其他同事就不需要再做上述重复性的工作了,记得备份那两个依赖库哦,也许哪天还需要重新编译静态库呢。

在React Native中使用Realm也一样,只是打包脚本是在node_modules中。Android我没有集成过,想来应该也是一样需要依赖包,依样画葫芦去解决吧。

我是咕咕鸡,一个还在不停学习的全栈工程师。
热爱生活,喜欢跑步,家庭是我不断向前进步的动力。

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

推荐阅读更多精彩内容

  • 前言 由于最近项目中在用Realm,所以把自己实践过程中的一些心得总结分享一下。 Realm是由Y Combina...
    一缕殇流化隐半边冰霜阅读 72,986评论 213 517
  • 跨平台:现在很多应用都是要兼顾iOS和Android两个平台同时开发。如果两个平台都能使用相同的数据库,那就不用考...
    CoderZS阅读 2,473评论 2 16
  • 1、pod 警告[!] The LiveChat_Techer [Release] target overrid...
    海底冰hz阅读 749评论 0 0
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,149评论 2 34
  • 这篇直接搬了一份官方文档过来看的 由于之前没用markdown搞的乱七八糟的 所以重新做了一份 后面看到官网...
    石丘阅读 18,008评论 14 24