Swift工程如何集成Static Library

栏目: Swift · 发布时间: 5年前

内容简介:我们的iOS项目中使用了Swift+Objective-C的混合开发,很长一段时间我们在Podfile中使用的是use_frameworks!,也就是把所有Pods做成Dynamic framework。 微信等第三方SDK以静态库.a的形式提供给开发者,导致我们没有办法直接依赖,会报类似Dynamic framework的制作过程网上有很多文章,我主要参考了组件化-动态库实战 这边文章。再次感谢文章作者@南栀倾寒 按这篇文章一步一步来基本可以完成90%以上的工作。之所以不是100%是因为我们实际制作中遇

我们的iOS项目中使用了Swift+Objective-C的混合开发,很长一段时间我们在Podfile中使用的是use_frameworks!,也就是把所有Pods做成Dynamic framework。 微信等第三方SDK以静态库.a的形式提供给开发者,导致我们没有办法直接依赖,会报类似 xxx has transitive dependencies that include static binaries 的错误,因此我们不得不把.a封装成动态framework然后才能通过Cocoapods集成到项目里。

基本概念

  • 静态库:一堆目标文件的打包体。链接时会被完整的复制到可执行文件中,存在多个可执行文件中包含同一份静态库代码的问题。
  • 动态库:一个没有main函数的可执行文件。链接时不复制代码,程序启动后用dyld加载,然后再决议符号。所以一份动态库可以供多个程序动态链接,达到节省内存的目的。

坑一

Dynamic framework的制作过程网上有很多文章,我主要参考了组件化-动态库实战 这边文章。再次感谢文章作者@南栀倾寒 按这篇文章一步一步来基本可以完成90%以上的工作。之所以不是100%是因为我们实际制作中遇到了CPU指令集的支持问题,需要特别关注以下几点:

  • Mach-O Type要选择Dynamic Library
  • Buld Setting中Other Linker Flags要加上-all_load,否则可能会导致部分文件无法集成到framework
  • Buld Setting中Build Active Architecture Only选No
  • 指令集合并,作者在文中附带了script,可以使生成的framework同事支持模拟器和真机的CPU上允许,很赞! framwork做好后可以使用 lipo -info 查看所支持的CPU架构,显示出 Architectures in the fat file: XXX are: i386 x86_64 armv7 arm64 表示同时支持了模拟器和真机,可以拿来用了。

坑二

Dynamic framework打好了,通过Cocoapods集成到主工程。调试、运行一切OK。最终要打包上线时,果然挂了!!!error提示

bitcode bundle could not be generated because
 xxx was built without full bitcode.
All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture armv7 

复制代码

于是又是一番Google。最终在这篇文章找到了解决方案,泪牛满面。同时脑补了下-fembed-bitcode-marker和-fembed-bitcode,还是觉得收获满满。于是在制作Dy namic framework的工种的Bulid Settings中同时做了以下处理

  • Enable Bitcode = Yes
  • Other C Flags中添加-fembed-bitcode
  • User-Defined中添加BITCODE_GENERATION_MODE=bitcode

然后再次构建出新的framework集成到主工程中去Archive,这下,终于,稳了!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

硅谷之火

硅谷之火

迈克尔·斯韦因 / 王建华 / 机械工业出版社 / 2001-1-1 / 34.00

我们今天正处于这样一个时代:充满幻想的人们发现他们获得了他们曾经梦寐以求的力量,并且可以利用这个力量来改造我们的世界。 这是个转折的时代,跨国公司迷失了发展方向,而小企业家却举起了计算机革命的大旗,成了开拓未来的先锋。在这个时代里,计算机奇才的脸上露出了胜利的微笑,胸怀 大志者成了富有理想的人,而富有理想的人则成了亿万富翁。这是一场真正的革命,它促使人们变得伟大,变得富有而充满理想,自豪而富......一起来看看 《硅谷之火》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具