Swift Static Libraries迁移实践

本文介绍了iOS客户端在Xcode9之前因Swift静态库支持问题采用动态框架,但遇到第三方库接入困难等问题。随着CocoaPods1.5.0支持Swift静态库,团队开始迁移过程,包括升级CocoaPods,启用模块化头文件,解决资源引用问题等,最终成功实现静态库迁移。
摘要由CSDN通过智能技术生成

背景介绍:

iOS客户端使用了Objective-C和Swift混编,在Xcode9(2017年9月发布)之前苹果不支持使用Swift Static Libraries。 同时,我们使用了CocoaPods进行项目管理,对于Swift+CocoaPods的项目直到2018年4月发布的Cocoapods1.5.0才官宣支持把Swift Pods构建成Static Libraries。所以在CocoaPods1.5.0之前我们一直使用的是Dynamic frameworks。

动态库与静态库的区别、优劣不在本文讨论范围之内,相关的文章网上可以搜到很多。本文主要记录了我们为什么要转向转向Swift Static Libraries ,以及迁移过程遇到的一些问题和思考。

Dynamic frameworks的困境

  • 很多第三方库(如WechatSDK)是以静态库的方式提供给开发者,这就导致我们没有办法直接接入。在执行pod install 的时候会产生has transitive dependencies that include static binariesd的error。所以一直以来我们都是苦逼的作一层包装,把第三方库做成私有的Dynamic framework然后接入到工程中(如果谁有更好的处理方法,希望得到指导)。然而,就是这个二次包装的过程我们也踩了很多坑,其中印象深刻的是Archive的时候遇到了bitcode问题。调试运行正常的代码在最终打包预备发布的时候遇到下面错误:

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,最终在这里找到了答案,是对BITCODE_GENERATION_MODE没有正确设置,在这里再次感谢一下文章作者。

  • 公司其他业务线大多使用的是Static Libraries,不管是出于代码复用或者产品需求,想要使用他们的SDK也会遇到第一个问题。要求他们同时提供和维护动态库版本也不太现实,这就产生了我们与其他业务线在技术栈上的一个差异。

迁移过程<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值