React Native:RCT-Folly 致命错误 - 找不到“fmt/compile.h”文件

iUr*_*rii 4 xcode ios cocoapods react-native react-native-hermes

我想为我的 iOS React Native 项目启用 Hermes,但出现下一个错误:

In file included from ../ios/Pods/RCT-Folly/folly/Singleton.cpp:35:
../ios/Pods/RCT-Folly/folly/portability/FmtCompile.h:19:10: fatal error: 'fmt/compile.h' file not found
#include <fmt/compile.h>
         ^~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

我的配置:

System:
    OS: macOS 11.6.1
  Binaries:
    Node: 12.22.7 - /usr/local/bin/node
    npm: 6.14.15 - /usr/local/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  Managers:
    CocoaPods: 1.10.1 - /usr/local/bin/pod
  SDKs:
    iOS SDK:
      Platforms: iOS 14.5, DriverKit 20.4, macOS 11.3, tvOS 14.5, watchOS 7.4
  npmPackages:
    @react-native-community/cli: Not Found
    react: 17.0.2 => 17.0.2 
    react-native: ^0.66.3 => 0.66.3 
Run Code Online (Sandbox Code Playgroud)

我的 Pod 文件:

In file included from ../ios/Pods/RCT-Folly/folly/Singleton.cpp:35:
../ios/Pods/RCT-Folly/folly/portability/FmtCompile.h:19:10: fatal error: 'fmt/compile.h' file not found
#include <fmt/compile.h>
         ^~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

经过一番调查后,我发现动态链接 ( use_frameworks!) 会导致此问题,如果我静态链接 pod,则一切正常。但我的项目必须使用框架,那么如何解决这个问题?

iUr*_*rii 7

只需将标头搜索路径直接设置为目标的fmt源即可解决此问题:RCT-Follypost_install

播客文件:

...

post_install do |installer|
    installer.pods_project.targets.each do |target|
        if target.name == 'RCT-Folly'
            target.build_configurations.each do |config|
                config.build_settings['HEADER_SEARCH_PATHS'] = "$(inherited) ${PODS_ROOT}/fmt/include"
            end
        end
    end
end
Run Code Online (Sandbox Code Playgroud)