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 報錯:
正確解決方案
Build Settings 中 Link Frameworks Automatically 把默認Yes 改成 No ,重新打Framework或.a文件,添加到 Xcode8 編譯就能通過。
參考&擴展閱讀
- 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,如若轉載,請注明來源。