对于 React-Native iOS XCode 版本 12.5 的旧项目,构建失败

Posted

技术标签:

【中文标题】对于 React-Native iOS XCode 版本 12.5 的旧项目,构建失败【英文标题】:Build is failing for older projects for React-Native iOS XCode Version 12.5 【发布时间】:2021-07-25 18:06:03 【问题描述】:

对于最近开始发生的这个问题,我感到很陌生。以前,我的应用程序通过运行此命令 react-native run-ios 在 iOS 模拟器上运行良好。现在我做了很多研究,并让我的应用程序通过 XCode 运行。但不知何故,当应用程序通过 XCode 运行时,metro bundler 没有链接。

我尝试通过react-native run-ios 运行该应用程序,但每次都看到此错误。在这里复制粘贴每个错误都太大了,但这里有一些:

Undefined symbols for architecture x86_64:
  "Swift._ArrayBuffer._copyContents(initializing: Swift.UnsafeMutableBufferPointer<A>) -> (Swift.IndexingIterator<Swift._ArrayBuffer<A>>, Swift.Int)", referenced from:
      generic specialization <serialized, Swift._ArrayBuffer<Swift.Int8>> of Swift._copyCollectionToContiguousArray<A where A: Swift.Collection>(A) -> Swift.ContiguousArray<A.Element> in libMixpanel-swift.a(AutomaticProperties.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)


** BUILD FAILED **


The following build commands failed:
        Ld /Users/careerlabsdev/Library/Developer/Xcode/DerivedData/CareerLabs_Elev8-gxcfanteiuxazegkgwkjkrjxbdmw/Build/Products/Debug-iphonesimulator/CareerLabs.app/CareerLabs normal
(1 failure)

为了让它发挥作用,我做了很多事情。我在这里获得的唯一成功是while running the command react-native run-ios, it opens up the metro bundler server。之后,它失败并给出 1000 行错误。我选择了有一些奶油部分的错误。从错误中挑选一些关键词:

ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) 不理解 BUILD FAILED 下列出的 Ld 一词

我的做法如下:

    正在删除 node_modules、Pod。从 XCode 清理构建。运行npm install,然后运行cd ios &amp;&amp; pod install,然后运行命令react-native run-ios 删除 Pod,Podfile.lock。做了pod install,然后在根react-native run-ios 这样做:
rm -rf ~/Library/Caches/CocoaPods
rm -rf Pods
rm -rf ~/Library/Developer/Xcode/DerivedData/*
pod deintegrate
pod setup
pod install
cd ..
react-native run-ios
    重启系统,再次运行命令react-native run-ios 在 XCode 的 Excluded Architecture 中添加了 arm64。请注意,这使我能够build and run XCode 上的应用成功。但它不会连接到 Metro 捆绑器服务器。看起来它只运行发布模式。 将我的包react-native-gesture-handler 更新为最新的1.10.3,看看是否能解决我的问题。但没有运气。

我的 Podfile 如下所示:

  platform :ios, '10.0'

  use_flipper!('Flipper' => '0.81.0')
  post_install do |installer|
    flipper_post_install(installer)
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
      end
    end
  end

我现在别无选择,正在等待提供一些见解。看到从未造成问题的事物出现错误确实令人沮丧。我正在使用 Apple M1 芯片 Macbook。

更新 V1.0

我尝试从/ios/Podfile 中注释掉use_flipper!(),然后重新做同样的事情,比如删除PodsPodfile.lock。运行这个命令,pod update &amp;&amp; pod install &amp;&amp; cd.. &amp;&amp; npm run ios。遇到多个问题。我不知道 Apple M1 上的 XCode 和 React Native 有什么问题。

更新 V2.0

我发现了一些开发人员抱怨相同的重要地方。 XCode 已在未经我通知的情况下将我的版本强制更新到 12.5。现在 XCode 给 RN Older 项目带来了问题。以下是相同的支持链接:

Flipper doesn't build with XCode 12.5 (GitHub) Do I need Flipper? (Reddit)

我希望这可以给像我一样困惑的开发人员一些见解。请看一下,看起来Facebook 正在修复它,但不知道什么时候。必须密切关注:/

【问题讨论】:

【参考方案1】:

我猜所有第三方 Pod 都需要更新他们的 RN Pod 规格才能使用 XCFrameworks。这就是我刚刚所做的,它似乎工作正常。

这意味着,作为 RN 包用户,您要么需要等待包作者更新他们的 podspecs 以使用XCFrameworks,要么添加不包括“arm64”拱门的构建配置(但随后不会在 M1 mac 上工作)。

或者,您可以访问node_modules/&lt;package&gt;/thrid-party.podspec 并自行更新。但这意味着您也需要自己构建XCFrameworks。所以.....

【讨论】:

实践证明,XCode 会进行强制更新。所以,现在我有版本 12.5XCodeReact-Native 存在问题。以下是支持链接:Flipper Doesn't build with XCode 12.5 和 Do I need Flipper。 没有包装问题【参考方案2】:

为了让我的应用程序像以前一样再次运行,我做的一件事是将 XCode 版本降级到以前的稳定版本,即 12.4 版。后来我知道了这个问题,因为XCode force 更新了我的版本,它开始对我已经存在的项目表现得很奇怪。所以我看到的唯一可行的选择是将版本降级到以前的版本,并且一切都像以前一样工作

请注意:此问题主要存在于Apple M1 以及XCode v12.5BigSur OS。因此,请继续记住这些事情。

为此,我必须做这些事情:

从 Mac 上完全卸载 XCode。为了有效地做到这一点,考虑到XCode 确实在你的 Mac 上缓存了很多东西,请使用Mac App Cleaner。如果有任何机会,您刚刚删除了 XCode 而没有使用链接,请使用此Completely remove Xcode from Mac。 从此资源XCode Releases 安装XCode请注意:这是一个合法的来源,可以直接将您带到Apple's download pages,没有不可靠的东西。因此,您可以继续下载XCode以前的稳定版本您的应用运行良好请注意:App Store 安装XCode 将再次安装最新版本的XCode,它有错误v12.5。所以请不要从Apple Store 下载和安装相同的东西。仅使用上述来源以获得最佳效果。 下载文件时安装它。请务必关注此Setting up development environment React Native,以免发生任何意外。 再次运行应用程序。

它对你有用,就像它对我有用一样,现在我正在继续我的项目工作,没有任何麻烦。干杯!

【讨论】:

我认为降级到 Xcode 还需要在您的移动设备中降级 iOS 版本,这可能对长期有所帮助,因此建议尝试从该线程中发表评论 3。这对我有用。 github.com/facebook/react-native/issues/…

以上是关于对于 React-Native iOS XCode 版本 12.5 的旧项目,构建失败的主要内容,如果未能解决你的问题,请参考以下文章

更新 xcode 13 后 react-native run-ios 命令未成功运行

react-native 配置启动图支持ios和android

react-native AwesomeProject 的 Xcode 构建失败

react-native 无法构建 ios:(错误 xcode Flipper)Typedef 重新定义不同类型('uint8_t'(又名'unsigned char')与'enum clockid_

以真实设备为目标时,无法在 IOS 中构建 react-native

如何使用 Xcode 12 Beta 4 构建 React-Native 项目?