首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建带有iOS动作的本机应用程序

构建带有iOS动作的本机应用程序
EN

Stack Overflow用户
提问于 2020-08-06 05:09:19
回答 1查看 879关注 0票数 1

看来,macOS计算机类型(runs-on)在GitHub操作(CI/CD)中设置RCT_NO_LAUNCH_PACKAGER=1。我通过创建一个基于简单GH工作流的macOS裸回购验证了这种行为,并验证了ENV是设置的。

代码语言:javascript
复制
RCT_NO_LAUNCH_PACKAGER=1

这个变量有问题。它对Xcode构建过程有重大影响。如果设置了Start packager,Xcode中的默认RCT_NO_LAUNCH_PACKAGER构建阶段将不会启动RCT_NO_LAUNCH_PACKAGER包,这里就是这种情况。

代码语言:javascript
复制
...
if [ -z "${RCT_NO_LAUNCH_PACKAGER+xxx}" ] ; then
...

因为包程序从未启动,所以Bundle React Native code and images运行脚本注定会失败。由于这个错误,构建失败了,而且由于packager没有运行,所以从未为应用程序存档生成JS包。

**存档失败** 以下构建命令失败: PhaseScriptExecution Bundle\ React\本机\ code\和\映像. (1失败) 23:43:23:退出状态: 65

这是构建阶段失败的特定部分。

代码语言:javascript
复制
+ ../node_modules/expo-updates/scripts/create-manifest-ios.sh
Error: Failed to connect to the packager server. If you did not start this build by running 'react-native run-android', you can start the packager manually by running 'react-native start' in the project directory. (Error: connect ECONNREFUSED 127.0.0.1:8081)
    at /Users/will/dev/changes/node_modules/expo-updates/scripts/createManifest.js:40:11
    at processTicksAndRejections (internal/process/task_queues.js:93:5)

我想到了几个问题:

  • GitHub为什么要设置这个变量?我找不到任何有意义的文件。默认情况下,它破坏了“正常”Xcode对本机构建过程的反应。
  • ENV似乎是由GitHub有意设置的,因此,为了生成一个React构建,他们正在推动用户使用什么替代方法呢?
  • 取消RCT_NO_LAUNCH_PACKAGER似乎是一种可行的选择,但这种方法是否存在缺陷?我认为最初的设置是有充分理由的。

我意识到react-native bundle命令的存在,并允许显式地捆绑JS资产,但是当我们已经有了一个非常好的Bundle React Native code and images构建阶段来实现这个阶段时,不得不这样做似乎很奇怪。

EN

回答 1

Stack Overflow用户

发布于 2020-08-06 23:44:36

GitHub为什么要设置这个变量?

我不确定,老实说。GitHub 它们的默认env的,对于我的情况,RCT_NO_LAUNCH_PACKAGER有很大的遗漏。

ENV似乎是由GitHub有意设置的,因此,为了生成一个React构建,他们正在推动用户使用什么替代方法呢?

他们似乎没有给予任何指导。他们似乎已经发出了一个关于设置这个var的呼吁,并将其留给用户来解决。

取消RCT_NO_LAUNCH_PACKAGER似乎是一种可行的选择,但这种方法是否存在缺陷?我认为最初的设置是有充分理由的。

有一些缺点。或者说,简单地取消这个var并不是解决所有问题的“修复”。至少在我的情况下不是。

我的解决方案是破解几个构建阶段脚本,并利用设置为"true" in GitHub的"true" env。

启动包器

我往上面加了这个。

代码语言:javascript
复制
export RCT_METRO_PORT="${RCT_METRO_PORT:=8081}"
echo "export RCT_METRO_PORT=${RCT_METRO_PORT}" > "${SRCROOT}/../node_modules/react-native/scripts/.packager.env"

# My changes...
if [ "${CI}" = "true" ];
then
  sh -c "bash $SRCROOT/../node_modules/react-native/scripts/launchPackager.command" &> /tmp/packager.log &
  exit 0
fi

... rest of the script.

捆绑反应本机代码和图像

我像这样修改了脚本,以清理上面打包器的启动。事后看来,我不知道这是否有必要。

代码语言:javascript
复制
export NODE_BINARY=$(which node)
../node_modules/react-native/scripts/react-native-xcode.sh
../node_modules/expo-updates/scripts/create-manifest-ios.sh
if [ "${CI}" = "true" ];
then
    kill -9 `ps ax | grep -i 'launchPackager.command' | grep -v grep | awk '{print $1}'` || true
    kill -9 `ps ax | grep -i 'cli.js start' | grep -v grep | awk '{print $1}'` || true
fi

最后,一些我没想到的事情,是在让包装工人工作后,我发现了另一个问题。[CP-User] [RNFB] Core Configuration永远挂着。

这是一个已知问题在他们的文档中。我的解决办法是简单地添加一个空的firebase.json文件。

代码语言:javascript
复制
{
  "react-native": {
  }
}

尽管如此,构建仍按预期进行。其中一些可能只是一般性的“在CI环境中进行有趣的故障排除!”类型的问题,但RCT_NO_LAUNCH_PACKAGER是微妙和特别恼人的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63277200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档