React Native执行pod install报错:undefined method `build_type'
问题
执行pod install时触发报错:
[!]Invalid
Podfilefile: undefined method `build_type' for #<Pod::Podfile::TargetDefinition label=Pods-flProject>
对应的Podfile内容:
require_relative '../node_modules/react-native/scripts/react_native_pods' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' platform :ios, min_ios_version_supported prepare_react_native_project! # If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set. # because `react-native-flipper` depends on (FlipperKit,...) that will be excluded # # To fix this you can also exclude `react-native-flipper` using a `react-native.config.js` # ```js # module.exports = { # dependencies: { # ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}), # ``` flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled linkage = ENV['USE_FRAMEWORKS'] if linkage != nil Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green use_frameworks! :linkage => linkage.to_sym end install! 'cocoapods', :deterministic_uuids => true target 'flProject' do config = use_native_modules! # Flags change depending on the env values. flags = get_default_flags() use_react_native!( :path => config[:reactNativePath], # Hermes is now enabled by default. Disable by setting this flag to false. # Upcoming versions of React Native may rely on get_default_flags(), but # we make it explicit here to aid in the React Native upgrade process. :hermes_enabled => flags[:hermes_enabled], :fabric_enabled => flags[:fabric_enabled], # Enables Flipper. # # Note that if you have use_frameworks! enabled, Flipper will not work and # you should disable the next line. :flipper_configuration => flipper_config, # An absolute path to your application root. :app_path => "#{Pod::Config.instance.installation_root}/.." ) target 'flProjectTests' do inherit! :complete # Pods for testing end post_install do |installer| react_native_post_install( installer, # Set `mac_catalyst_enabled` to `true` in order to apply patches # necessary for Mac Catalyst builds :mac_catalyst_enabled => false ) __apply_Xcode_12_5_M1_post_install_workaround(installer) end end
解决方案
1. 升级CocoaPods版本
这个报错核心原因是CocoaPods版本与当前React Native版本不兼容,旧版CocoaPods不支持RN Podfile中用到的build_type相关API。
- 查看React Native官方文档,确认当前RN版本对应的推荐CocoaPods版本(比如RN 0.70+建议使用1.11.3及以上版本)
- 执行升级命令:
# 通过gem升级 sudo gem install cocoapods # 若用brew安装则执行 brew upgrade cocoapods
2. 移除过时的M1兼容脚本
__apply_Xcode_12_5_M1_post_install_workaround是针对旧版Xcode和M1芯片的临时补丁,新版本RN和CocoaPods已原生支持M1,删除post_install中的这一行:
# 删掉此行 # __apply_Xcode_12_5_M1_post_install_workaround(installer)
3. 清理缓存后重新安装
- 删除本地Pod缓存和配置文件:
rm -rf Podfile.lock Pods pod cache clean --all - 重新执行安装:
pod install
内容的提问来源于stack exchange,提问作者BAN LUO
相关产品推荐
相关产品推荐

