升级至macOS 10.13.4后CocoaPods依赖库编译报错求助
解决macOS 10.13.4下CocoaPods依赖库编译报错的问题
我之前升级到macOS 10.13.4(对应Xcode 9.3)时也碰到过一模一样的问题,本质是新版本Clang编译器对C语言类型定义的检查变得更严格了,导致一些旧依赖库的代码触发了新的编译错误。下面是几个亲测有效的解决方法:
方法一:更新CocoaPods到最新稳定版
旧版本的CocoaPods可能没有适配新编译器的默认规则,先升级Pods再重新拉取依赖:
sudo gem install cocoapods pod update
这一步很多时候就能解决问题,因为新版本Pods会自动处理部分兼容性配置。
方法二:给有问题的库添加编译参数屏蔽错误
如果更新Pods后还是报错(比如RaptureXML这种还没修复的库),可以在Podfile里添加post_install钩子,针对特定库关闭对应的编译检查:
post_install do |installer| installer.pods_project.targets.each do |target| # 替换成你报错的库名称 if target.name == 'RaptureXML' target.build_configurations.each do |config| # 屏蔽typedef重定义和类型冲突的错误 config.build_settings['OTHER_CFLAGS'] = '-Wno-typedef-redefinition -Wno-conflicting-types' end end end end
保存Podfile后执行pod install,重新构建项目应该就能通过了。
方法三:升级依赖库到最新版本
有些库的作者已经针对新编译器修复了这个问题,你可以去检查一下RaptureXML(或其他报错库)的最新版本,在Podfile里指定更新的版本号:
pod 'RaptureXML', '~> 2.0.2' # 替换为实际最新版本号
然后执行pod update RaptureXML,拉取修复后的代码。
为什么会出现这个问题?
macOS 10.13.4配套的Xcode 9.3升级了Clang编译器,对C语言中「匿名类型的typedef链接」「重复类型定义」这类之前被忽略的不规范代码,现在直接抛出错误。很多旧的第三方库没有及时跟进适配新规则,就会出现你碰到的编译失败情况。
内容的提问来源于stack exchange,提问作者uzoo
相关产品推荐
相关产品推荐

