升级xcode16之后react-native-zip-archive不兼容,unsupported option ‘-G‘
问题
升级xcode到16之后,xcode build报错:unsupported option '-G' for target 'x86_64-apple-ios13.4-simulator' (in target 'RNZipArchive' from project 'Pods')
出现原因
在 React Native 项目中,当你将 Xcode 升级到 16 后,可能会遇到 RNZipArchive 相关的编译错误,特别是与 -G 选项相关的错误。这个错误通常是由于 Xcode 16 使用了更新的编译器或构建工具链,导致某些旧的构建配置不再兼容。
在issue里面发现,主要是因为-GCC_PREPROCESSOR_DEFINITIONS
解决办法
1 升级react-native-zip-archive
react-native-zip-archive
已经兼容xcode 16,但是需要把min ios version 提升到15.5
2 修改Podfile
post_install do |installer|installer.pods_project.targets.each do |target|if target.name == 'RNZipArchive'target.source_build_phase.files.each do |file|if file.settings && file.settings['COMPILER_FLAGS']file.settings['COMPILER_FLAGS'] = ''endendendend
end
3 修改react-native-zip-archive源码
a. 打开node_modules/react-native-zip-archive/RNZipArchive.podspec
b. 注释s.compiler_flags =
这一行
c. 使用patch-package
保存修改
d. 执行pod install
4 修改project.pbxproj
前面3种办法均来自github issue
,其核心目的都是通过修改或者升级来移除-GCC_PREPROCESSOR_DEFINITIONS
因为项目的特殊性,以及升级组件可能会带来新的问题,再加上方法2和3都不起作用,我在zip项目里面清理了和-GCC_PREPROCESSOR_DEFINITIONS
相关的代码,error log
里面还是可以看到clang的命令带了-GCC_PREPROCESSOR_DEFINITIONS
,然后我找到了最终的解决办法。
- 打开
ios/Pods/Pods.xcodeproj/project.pbxproj
- 找到
RNZipArchive.m
- 删除
-GCC_PREPROCESSOR_DEFINITIONS=\"HAVE_INTTYPES_H HAVE_PKCRYPT HAVE_STDINT_H HAVE_WZAES HAVE_ZLIB MZ_ZIP_NO_SIGNING $(inherited)\"
重新build项目,编译成功。