由于添加了友盟分享,在真机调试的时候会有一个link的报错,但是在模拟器的时候不会有这种情况。
原来是友盟的二进制库不支持bitcode.
而Xcode默认是要支持bitcode的,而且如果支持的话,其中所有的二进制库和framework都必须包含bitcode.
至于什么是bitcode,请看这里:
官方文档
Bitcode (iOS, watchOS)
Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the App Store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store.
Xcode hides symbols generated during build time by default, so they are not readable by Apple. Only if you choose to include symbols when uploading your app to iTunes Connect would the symbols be sent to Apple. You must include symbols to receive crash reports from Apple.
Note:For iOS apps, bitcode is the default, but optional. If you provide bitcode, all apps and frameworks in the app bundle need to include bitcode. For watchOS apps, bitcode is required.
Bitcode 是编译的应用程序的中间一种形式.你提交到AppStore上的应用程序包含的bitcode会在AppStore上被编译和链接.在未来包含bitcode的应用程序,会让Apple重新优化你的二进制文件而不需要重新提交新的版本.意思就是加入苹果会更换硬件架构(CPU之类的).开发者也不需要再根据不同的平台开发新的软件.Xcode在编译时默认是隐藏symbols的.所以Apple拿不到symbols.只有在你提交APP 到 iTunes Connect时选择了提交symbols.Apple才会拿到程序的symbols.如果你想要收到Apple的crash 报告的话.必须要把symbols提交上去.
注意: iOS APP,bitcode是默认的.但是不是必须的.但是你如果支持bitcode的话,那么应用中的的app和frameworks都必须包含bitcode.对watchOS app来说,bitcode是必须的.
总的来说,bitcode是一种介于LLVM编译器和编程语言的一种中间态.虽然bitcode不能在任何平台上运行,但是它可以转换成任何所支持的CPU架构.
方法是在设置里面把bitcode设置为no.