React Native iOS应用在Azure Pipelines构建失败:char_traits弃用警告
解决React Native iOS Azure Pipelines构建因RCT-Folly char_traits弃用警告失败的问题
问题场景
使用Azure Pipelines构建React Native iOS应用时,构建流程因RCT-Folly库中char_traits相关的弃用警告触发失败。
错误日志
⚠️ /Users/runner/work/1/s/ios/Pods/Headers/Private/RCT-Folly/folly/Range.h:176:16: 'char_traits' is deprecated: char_traits for T not equal to char, wchar_t, char8_t, char16_t, or char32_t is non-standard and is provided for a temporary period. It will be removed in LLVM 18, so please migrate off of it. [-Wdeprecated-declarations] typedef std::char_traits<typename std::remove_const<value_type>::type>
BUILD FAILED
失败的构建命令:
CompileC /Users/runner/Library/Developer/Xcode/DerivedData/raurauAdmin-gztdyzcynucaikdocaqdcfvsvqqd/Build/Intermediates.noindex/Pods.build/Release-iphoneos/RCT-Folly.build/Objects-normal/arm64/json.o /Users/runner/work/1/s/ios/Pods/RCT-Folly/folly/json.cpp normal arm64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
现有配置
Podfile 配置
platform :ios, '12.0' pod 'Firebase', :modular_headers => true # other pods... post_install do |installer| installer.generated_projects.each do |project| project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS'] = 'NO' end end end end
Azure Pipelines CI 配置
trigger: - main # 主分支变更时触发流水线 variables: - group: 'New variable group 12-Sep' # 关联共享变量组 - name: System.Debug value: true # 启用调试日志输出 jobs: - job: Build_iOS displayName: 构建iOS应用 pool: vmImage: macos-latest # 使用最新macOS镜像 steps: - checkout: self fetchDepth: 1 # 仅拉取最新提交以加速检出 # 配置Node.js版本 - task: NodeTool@0 displayName: '设置Node.js环境' inputs: versionSpec: '18.x' # 使用Node.js 18.x版本 # Yarn安装依赖 - task: Yarn@3 displayName: '安装项目依赖' inputs: verbose: false # 清理Xcode衍生数据 - task: Bash@3 displayName: '清理Derived Data' inputs: targetType: 'inline' script: rm -rf ~/Library/Developer/Xcode/DerivedData/* # 安装CocoaPods依赖 - task: CocoaPods@0 displayName: '安装CocoaPods依赖' inputs: forceRepoUpdate: true cwd: ios # 在ios目录执行 # Xcode清理构建 - script: | xcodebuild clean -workspace ios/raurauAdmin.xcworkspace -scheme raurauAdmin -configuration Release displayName: 'Xcode清理构建' # 构建iOS IPA包 - task: Xcode@5 displayName: '构建iOS IPA' inputs: configuration: Release sdk: iphoneos xcWorkspacePath: 'ios/raurauAdmin.xcworkspace' scheme: 'raurauAdmin' useXcpretty: true packageApp: true # 备注:可添加归档、导出IPA或部署到TestFlight/App Store的额外步骤
解决方案
方案1:修改Podfile的post_install脚本,针对性忽略警告
原配置仅关闭了GCC的弃用函数警告,但当前使用的是Clang编译器,需补充Clang相关的警告关闭逻辑,或直接忽略特定的-Wdeprecated-declarations警告:
platform :ios, '12.0' pod 'Firebase', :modular_headers => true # other pods... post_install do |installer| installer.generated_projects.each do |project| project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS'] = 'NO' # 关闭Clang的弃用声明警告 config.build_settings['CLANG_WARN_DEPRECATED_DECLARATIONS'] = 'NO' # 或精准忽略该特定警告 config.build_settings['OTHER_CFLAGS'] ||= [] config.build_settings['OTHER_CFLAGS'] << '-Wno-deprecated-declarations' end end end # 可选:仅针对RCT-Folly目标单独配置(如果全局配置无效) installer.pods_project.targets.each do |target| if target.name == 'RCT-Folly' target.build_configurations.each do |config| config.build_settings['CLANG_WARN_DEPRECATED_DECLARATIONS'] = 'NO' end end end end
方案2:升级React Native版本
该问题源于RCT-Folly库未适配LLVM 18的新规则,React Native 0.72及以上版本已更新RCT-Folly至兼容版本,升级RN版本可从根源解决问题。
方案3:在Azure Pipelines的Xcode构建任务中添加编译参数
直接在Xcode构建任务中传递忽略警告的参数,修改CI配置中的Xcode@5任务:
- task: Xcode@5 displayName: '构建iOS IPA' inputs: configuration: Release sdk: iphoneos xcWorkspacePath: 'ios/raurauAdmin.xcworkspace' scheme: 'raurauAdmin' useXcpretty: true packageApp: true arguments: 'OTHER_CFLAGS="-Wno-deprecated-declarations"'
内容的提问来源于stack exchange,提问作者Nauman Kyani
相关产品推荐
相关产品推荐

