Xcode8 编译报错:
Framework not found IOSurface for architecture arm64
或者
Framework not found FileProvider for architecture x86_64/arm64.
原因
IOSurface.framework和 FileProvider.framework是 iOS11 新增加的库,但 Xcode8下没有这个库。打包静态库的时候,有一个Link Frameworks Automatically设置,默认为YES,会自动链接框架。所以Xcode 9打包的静态库时,在Xcode 8项目编译时候会提示找不到 IOSurface.framework和 FileProvider.framework。
题外话,这个在 Xcode5 和 Xcode6 过度时,Metal.framework 时发生过,可能过了就忘记了。也发现 Xcode 很多特性平时没有注意,有空真要多看看 LLVM 的知识。
结果
如果升级到 Xcode9,则不受影响。如果 Xcode8 编译报错,网上最初给出的方案,在 Xcode8 中添加IOSurface.framework和 FileProvider.framework后打包,结果最后还是会被坑哦!
在 Xcode8 中添加IOSurface.framework和 FileProvider.framework后打包,上传iTunes Connet 报错:
![img_94725a1612beb5b28ce7d86f450de4f9.jpe](https://yqfile.alicdn.com/img_94725a1612beb5b28ce7d86f450de4f9.jpeg?x-oss-process=image/resize,w_1400/format,webp)
正确解决方案
Build Settings 中 Link Frameworks Automatically 把默认Yes 改成 No ,重新打Framework或.a文件,添加到 Xcode8 编译就能通过。
![img_86b0446783f295861249a67c4a87f6d6.jpe](https://yqfile.alicdn.com/img_86b0446783f295861249a67c4a87f6d6.jpeg?x-oss-process=image/resize,w_1400/format,webp)
参考&扩展阅读
- ios8 - XCode 6 GM: linker error when building for device (Metal not found) - Stack Overflow
- New Features in Xcode 5
- XCode’s New “Link Frameworks Automatically” & How to Fix “framework not found Metal for architecture armv7”
- ios - Framework not found IOSurface for architecture arm64 - Stack Overflow
- ios - When do you have to link Frameworks and Libraries to an XCode project? - Stack Overflow
- Don't we need to link framework to XCode project anymore?
- objective c - @import vs #import - iOS 7 - Stack Overflow
- Modules和Autolinking的介绍与使用 - 简书
- xcode 新特性的 一点理解 enable module 和 link frameworks automatically - 滴水成川 - CSDN博客
注:本文首发于 iHTCboy's blog,如若转载,请注明来源。