如何修复在 simulator/device 上完美运行但在存档上失败的 Xcode 构建?

How can I fix an Xcode build that works perfectly on simulator/device, but fails on archive?

怪异的链接相关错误

当我尝试在 Xcode 10.3

中构建存档时

环境信息

React Native 信息输出:

...
/Users/me/Library/Developer/Xcode/DerivedData/MyApp-somehash/Build/Intermediates.noindex/ArchiveIntermediates/appId/BuildProductsPath/Release-iphoneos/libRNGestureHandler.a -lPods-appId -lRNFirebase -lAppCenterReactNative -lAppCenterReactNativeAnalytics -lAppCenterReactNativeCrashes -Xlinker -dependency_info -Xlinker
...
clang: error: no such file or directory: '/Users/me/Library/Developer/Xcode/DerivedData/MyApp-somehash/Build/Intermediates.noindex/ArchiveIntermediates/appId/BuildProductsPath/Release-iphoneos/libRNGestureHandler.a'
Command Ld failed with a nonzero exit code

重现步骤

安装(如果我没记错的话)Microsoft 的 App Center 工具(尽管它可能是 React Navigation)后,我注意到我的存档构建开始失败并出现上述未分类错误。奇怪的是,当我 运行 在模拟器或我的 iPhone.

上构建时,它似乎工作正常

到目前为止我尝试过的:

来自 package.json 的完整环境信息:

"dependencies": {
    "@react-native-community/blur": "^3.3.1",
    "appcenter": "2.0.0",
    "appcenter-analytics": "2.0.0",
    "appcenter-crashes": "2.0.0",
    "expo-keep-awake": "^5.0.1",
    "expo-localization": "^5.0.0",
    "i18n-js": "^3.2.2",
    "moment": "^2.24.0",
    "react": "16.8.3",
    "react-native": "0.59.3",
    "react-native-code-push": "^5.6.0",
    "react-native-config": "^0.11.7",
    "react-native-elements": "^1.1.0",
    "react-native-firebase": "^5.4.3",
    "react-native-gesture-handler": "^1.3.0",
    "react-native-maps": "^0.24.2",
    "react-native-paper": "^2.16.0",
    "react-native-snap-carousel": "^3.8.0",
    "react-native-unimodules": "^0.4.0",
    "react-native-vector-icons": "^6.5.0",
    "react-navigation": "^3.11.0",
    "react-redux": "^7.0.3",
    "redux": "^4.0.1",
    "redux-persist": "^5.10.0",
    "redux-starter-kit": "^0.5.1",
    "redux-thunk": "^2.3.0"
}

存档时 xcode 10.2 和 xcode 10.3 有问题,我们遇到了同样的问题

我向 Apple 支持部门提交了工单,但没有得到任何回复。 尝试使用 xcode 10 存档。1.It 将解决您的问题。

我们仍然不知道确切的根本原因,但我们最好的猜测是这个问题可能与我们使用 RN 0.59.3 以及我们的一些软件包为 RN 0.60 做准备有关。

无论如何,我们确实让构建工作了!

我们的解决方法是使用 RN 0.60 开始一个全新的项目,然后一个一个地安装每个必需的包。虽然这种方法很耗时,但看起来运行良好,因为我们已经能够重新创建应用程序并成功构建。

p.s。一旦我们让 react-native-gesture-handler 与 react-native-maps 和 react-navigation 一起工作,我们就添加了 App Center。这样,在 CI 中观察我们的构建并确保一切保持稳定变得更加容易。