找不到体系结构 arm64 的符号 - XCode

Symbol(s) not found for architecture arm64 - XCode

我正在尝试在 Mac Intel 上构建我的 React Native 项目,但不断出现下一个错误:

Showing All Messages
Undefined symbol: _swift_stdlib_isStackAllocationSafe

Undefined symbols for architecture arm64: "_swift_stdlib_isStackAllocationSafe", referenced from: function signature specialization <Arg1 = Owned To Guaranteed> of function signature specialization <Arg[0] = [Closure Propagated : closure #1 (__C.SKProduct) -> Swift.Bool in closure #2 (Swift.Set<__C.SKProduct>) -> () in PurchasesCoreSwift.IntroEligibilityCalculator.checkTrialOrIntroductoryPriceEligibility(with: Foundation.Data, productIdentifiers: Swift.Set<Swift.String>, completion: (Swift.Dictionary<Swift.String, __C.NSNumber>, Swift.Optional<Swift.Error>) -> ()) -> (), Argument Types : [Swift.Set<Swift.String>]> of generic specialization <__C.SKProduct> of Swift._NativeSet.filter((A) throws -> Swift.Bool) throws -> Swift._NativeSet in libPurchasesCoreSwift.a(IntroEligibilityCalculator.o) ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

我已经尝试了几乎所有的答案:link

还有

pod deintegrate 
pod install
pod repo update

我的 react-native 版本:

"react-native": "0.64.2"

我的项目架构:

带库的link二进制文件

更新 我也将 react native 版本更新到 0.67.4 但仍然无法正常工作。

对于react-native 0.67+:经过大量研究,我从Vegaro找到了下一个解决方案:

SOLUTION LINK

第一步是将 react-native-purchases by Revenuecat 软件包升级到最新版本。

清理你的pods:

声明一个pods post安装过程: 将下一个添加到您的 Podfile:

 post_install do |installer|
    react_native_post_install(installer)
    fix_library_search_paths(installer)
  end
end

def fix_library_search_paths(installer)
  def fix_config(config)
    lib_search_paths = config.build_settings["LIBRARY_SEARCH_PATHS"]
    if lib_search_paths
      if lib_search_paths.include?("$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)") || lib_search_paths.include?("\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"")
        # $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) causes problem with Xcode 12.5 + arm64 (Apple M1)
        # since the libraries there are only built for x86_64 and i386.
        lib_search_paths.delete("$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)")
        lib_search_paths.delete("\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"")
        if !(lib_search_paths.include?("$(SDKROOT)/usr/lib/swift") || lib_search_paths.include?("\"$(SDKROOT)/usr/lib/swift\""))
          # however, $(SDKROOT)/usr/lib/swift is required, at least if user is not running CocoaPods 1.11
          lib_search_paths.insert(0, "$(SDKROOT)/usr/lib/swift")
        end
      end
    end
  end

  projects = installer.aggregate_targets
    .map{ |t| t.user_project }
    .uniq{ |p| p.path }
    .push(installer.pods_project)

  projects.each do |project|
    project.build_configurations.each do |config|
      fix_config(config)
    end
    project.native_targets.each do |target|
      target.build_configurations.each do |config|
        fix_config(config)
      end
    end
    project.save()
  end
end 

最后,手动更改项目中的库搜索路径 (XCode)。 移除:

$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)

添加:

$(SDKROOT)/usr/lib/swift

清理您的项目并运行再次构建:“存档”。

作为降级到 Xcode 13.2.1 的解决方法对我有用。这个版本一切正常。

但是在版本 13.3 - 我有这个问题

如果可行,请更新您的 React Native 版本。 0.67 版本修复了这个问题。

如果无法更新,最简单的解决方案是更新您的库搜索路径。

Select 您在 Xcode 中的项目,然后转到“构建设置”。向下滚动,直到看到“搜索路径”,最后看到“库搜索路径”。 将 "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)" 替换为 "$(SDKROOT)/usr/lib/swift".

此解决方案归功于 Vegaro,他发布了它 HERE,如果这对您不起作用,我认为这是更具侵入性的选择。

我的 M1 Mac 也遇到了类似的问题,下面是我解决这个问题的方法:

  1. brew install watchman
    如果你没有节点 => brew install node
  2. sudo arch -x86_64 gem install ffi
  3. 在 ios 文件夹内的 pod 文件末尾添加此代码:
post_install do |installer|
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        config.build_settings["ONLY_ACTIVE_ARCH"] = "NO"
      end
    end
  end
  1. cd ios/ && arch -x86_64 pod install.

  2. 运行 Xcode 与 Rosetta。
    .
    您可以通过 运行ning 安装 Rosetta:softwareupdate --install-rosetta

  3. 排除架构 arm64。

  4. 清理构建 - 打开 xcode 然后按 Command + Shift + K


  1. 如果您正在使用 nvm,请尝试将 NODE_BINARY=node 替换为 which node 命令的实际结果,在我的例子中,它看起来像这样:

大声喊出这些答案: two three