最近Apple发布了Xcode10的beta版本,其中一个变化是去掉了std相关的tbd(可以参考Xcode10的Release Node),Apple给出的原因是std库比较旧了,建议使用新版本替换,比如用libc++.tbd替换libstdc++6.0.9.tbd。这就导致之前依赖libstdc++6.0.9.tbd的工程,在升级到Xcode10后出现编译错误。
错误的具体信息如下图所示:
出现这个问题的原因是因为在开发中使用了第三方库,并且第三方库的podspec中libraries指定了stdc++6.0.9,cocoapods在安装依赖过程中,会在指定target下的other link flag中加入 -l”stdc++6.0.9” 导致编译不能通过。
那么要如何解决呢?这个问题可以通过使用cocoapods的post_install hooks来解决,解决的方法是在podfile中加入下面的代码,去掉所有pod对stdc++6.0.9的依赖:
1 | #该方法会移除 所有pod 对stdc++.6.0.9库的依赖,建议仅在Xcode10上使用 |
Ps:
这段hooks的原理是:找到所有的target的Pods-TargetName.debug.xcconfig和Pods-TargetName.release.xcconfig这两个文件(在Pod/Targets Support Files/TargetName目录下),然后将其中的OTHER_LDFLAGS字段中的-l”stdc++.6.0.9”去掉。