Flutter iOS编译失败:CocoaPods执行pod install报错求助
Flutter iOS编译CocoaPods报错排查方案
问题核心
你遇到的NoMethodError - undefined method '=~' for [["PICKER_MEDIA=1"], ["PICKER_AUDIO=1"], ["PICKER_DOCUMENT=1"]]:Array错误,本质是CocoaPods 1.11.3与Ruby 3.2.0版本不兼容,导致Image Picker依赖注入的预处理宏被解析成嵌套数组,而CocoaPods旧版本尝试对数组执行字符串正则匹配操作,触发方法不存在的异常。
解决步骤
方案1:升级CocoaPods到兼容版本
CocoaPods 1.12+修复了与Ruby 3.x的兼容性问题,直接升级即可:
- 终端执行升级命令:
sudo gem install cocoapods # 或使用Homebrew升级(推荐M1/M2芯片) brew upgrade cocoapods - 进入项目的
ios目录,清理旧Pod配置:pod deintegrate rm Podfile.lock - 重新安装Pods:
pod install
方案2:降级Ruby到2.7.x版本
如果暂时不想升级CocoaPods,可将Ruby降级到与1.11.3兼容的2.7系列:
- 用Ruby版本管理工具(如rbenv)安装2.7.6:
rbenv install 2.7.6 rbenv local 2.7.6 - 进入
ios目录重新执行:pod install
方案3:手动修复Podfile中的预处理宏嵌套问题
在Podfile的post_install块中添加代码,将嵌套的预处理宏数组扁平化:
修改后的post_install部分关键代码:
target.build_configurations.each do |config| # 原有的预处理宏配置保持不变 config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ '$(inherited)', 'PERMISSION_CAMERA=1', 'PERMISSION_LOCATION=1', # 其他宏... ] # 新增:扁平化数组,避免嵌套结构 if config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'].is_a?(Array) config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'].flatten.map(&:to_s) end end
修改后保存Podfile,进入ios目录执行pod install。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

