React Native项目中引入realm后,在编译阶段,网络状况不好的时候会卡在realm模块下载的地方。现象是如果在终端用react-native run-ios,则会卡在Download realm-sync-cocoa-${version}.tar.xz,如果是Xcode,则会卡在Build ${ProjectName}: RealmJS这一块。

这主要是因为realm的库太大(realm-sync-cocoa-${version}.tar.xz包大概是50+M)。所以我们可以考虑把包先下载到本地,以减少每次编译的时间。

  1. 我们可以从realm-cocoabuild.sh文件中找到realm-sync-cocoa-${version}.tar.xz的下载地址(注:${version}是具体的版本号),下载文件。
  2. 在命令行输入getconf DARWIN_USER_TEMP_DIR,获取文件下载的临时目录
  3. 将下载的文件拷贝到临时目录
  4. 这样基本就OK。

如果还不行,则可以考虑以下操作:

  1. 修改下载的脚本代码了。找到node_modules/realm/scripts/download_realm.js
  2. 找到download()函数,将其中的saveFile()函数作如下修改;
function saveFile() {
	if (process.stdout.isTTY) {
		printProgress(response.body, parseInt(response.headers.get('Content-Length')), archive);
	} else {
		console.log(`Downloading ${archive}`);
	}
	
	return new Promise((resolve) => {
		// const file = fs.createWriteStream(destination);
		// response.body.pipe(file).once('finish', () => file.close(resolve));
		resolve();
	}).then(() => fs.utimes(destination, lastModified, lastModified));
}

最后运行react-native run-ios

参考

  1. Core occasionally cannot be downloaded from China