升级本机反应时如何解决“project.pbxproj”文件中的冲突?

Posted

技术标签:

【中文标题】升级本机反应时如何解决“project.pbxproj”文件中的冲突?【英文标题】:How to resolve conflicts in `project.pbxproj` file while upgrading react native? 【发布时间】:2019-02-01 13:39:42 【问题描述】:

我正在使用 Xcode 9.4 并且当前反应原生版本 @0.54.4 我想将版本升级到 0.55.4。

当我使用react-native-git-upgrade 升级我的项目时,我在project.pbxproj 中看到了一些未合并的冲突。有些设置是我自己的,与新版本的更改有冲突。

我尝试了所有可能的方法来解决冲突。但是 X-code 仍然显示错误could not load the project,并且它不允许我构建我的项目。

我如何理解这些冲突指的是什么以及如何安全地解决这些冲突?

【问题讨论】:

【参考方案1】:

不幸的是,没有解决冲突的神奇方法。我希望有。该文件由 Xcode 管理,根据个人经验,我发现执行合并很容易搞砸它。

Git 绝对是你最好的朋友。确保在开始任何合并之前,您在一个新分支上并完全提交,这样如果您搞砸了,您可以轻松地回到原来的版本。

我通常做的是保留project.pbxproj 的原始版本,然后在 Xcode 中手动进行更改。我知道这听起来不太理想,但这确实意味着您应该能够在 Xcode 中打开项目,尽管您的项目可能还没有运行 - 还没有。

如果您不清楚要保留哪个版本,我会保留我们的,因为那是您project.pbxproj原始 版本。来自documentation:

您可以将“我们的”视为“您的团队”,将“他们的”视为“React Native 开发团队”。

然后我将手动进行更改,如下所述。因为这将显示他们的变化,希望不会那么多。

为了帮助我找到我必须做出的改变,我发现React Native Upgrade Helper 是一个非常宝贵的资源。在那里,您可以找到您选择的react-native 的任意两个版本的git diff。 (这样您就不必创建两个项目,然后自己比较它们,节省大量时间。)

目前您正在从 0.54.4 升级到 0.55.4 此链接显示这些版本之间的差异

https://react-native-community.github.io/upgrade-helper/?from=0.54.4&to=0.55.4

如需更多帮助,您可以在特定 react-native 版本中创建项目,使用以下内容将为版本 0.55.4 创建项目。

react-native init newproject --version react-native@0.55.4

这样您就可以在 Xcode 项目内部查看已添加的内容以及添加内容的来源,因为 git diff 并不总能说明它来自何处。

我在使用 react-native-git-upgrade 时运气不佳,而且我开始更喜欢手动操作,因为这样做更成功。

【讨论】:

Kaleidoscope 是解决project.pbxproj 问题的魔法。 @FlorentMorin 我没有使用它,但它看起来一年多没有任何更新。评论提到了很多崩溃......并没有激发信心。另外,如果我要花 69.99 美元买它,那么我至少希望它有超过 3.3 颗星。 我每天都在 macOS Mojave 上使用它。我建议下载试用版以发表您自己的意见:-) @Andrew,但我们怎么知道要保留哪些更改? Ourstheirs。有没有更好的方法,或者我在某个地方犯了错误?顺便说一句,我无法从 xcode 打开我的项目设置,因为从左侧导航窗格中双击我的项目会抛出 workspace integrity could not load project 我会一直保留ours,因为那是您的原始版本。如果您已将更改合并到您的 project.pbxproj 中,那么您需要 revertmerge 或返回您的原始分支并再次开始合并过程(这通常是最简单的方法)。合并后,我永远无法解决冲突。最好避免它们。【参考方案2】:

在将 react native 从 0.51 更新到 0.55 后,在本地模式下一切似乎都正常运行。但生产构建失败。

我通过从 0.51 再次升级 react native 来解决此问题,并且几乎一直保留我的更改而不是他们的更改。

通过选择错误的更改,可能应该在文档中对遇到的问题类型进行更详细的解释。

【讨论】:

以上是关于升级本机反应时如何解决“project.pbxproj”文件中的冲突?的主要内容,如果未能解决你的问题,请参考以下文章

允许“响应本机需求周期”警告

如何在本机反应中防止屏幕睡眠

如何将我的应用程序从 expo 弹出到裸反应本机代码

即使设备在本机反应中重新启动,如何运行后台任务?

无法在反应本机项目中扩展 Zip

如何在本机反应中模拟上下文消费者反应元素