CocoaPods Podfile and podspec configurations
原创 2020-09-12
本文讲解了Cocoapods对不同configurations的支持能力,configurations配置可以让APP在Debug、Release等模式下引入不同的代码或framework,便捷支持不同场景的配置需求。
需求描述
业务方的SDK产品(假设名称为EaseapiSDK)以静态库framework的方式接入至APP,因为业务方的安全考量,SDK提供了两个版本:Release和Debug版本。Release版本是用于正式发布的版本,而Debug版本则作用于开发及功能测试阶段。Debug版本提供了便捷的调试接口,这些在Release版本中都是需要隐藏的。
现在,需要借助Cocoapods的能力来支持这个需求。Cocoapods目前支持对Podfile和podspec配置configurations。
Podfile configurations
在主项目的Podfile中,可以使用configurations命令标记不同配置的接入情况,示例:
pod 'EaseapiSDK-Debug', '1.0.0', :configurations => ['Debug']
pod 'EaseapiSDK', '1.0.0', :configurations => ['Release']
EaseapiSDK-Debug.podspec和EaseapiSDK.podspec中引入的库名称可以是相同的,比如都是EaseapiSDK.framework。在链接阶段只会链接对应配置的EaseapiSDK.framework,不会出现符号重复。
podspec configurations
按照官方文档的说明,在Cocoapods 1.9.0以上的版本,podspec也是支持配置configurations的。
Podspec Syntax Reference - dependency
但是我使用Cocoapods 1.9.3版本验证发现,podspec对configurations语法支持的并不是很好。示例配置:
s.dependency 'EaseapiSDK-Debug', '1.0.0', :configurations => ['Debug']
s.dependency 'EaseapiSDK', '1.0.0', :configurations => ['Release']
使用以上配置,首先提示"target has frameworks with conflicting names",表示引入了相同名称的framework。即使修改framework名称之后,链接时还是会提示符号重复,查看链接命令发现实际上将EaseapiSDK-Debug和EaseapiSDK都链接进去了。不知道是不是使用的方式不对,podspec中dependency的configurations并不能达到在不同配置下依赖不同framework的目的。
最佳实践
如果你有类似的需求,可以参考下面的接入方式。
- 提供不同SDK版本的podspec
两个版本的framework名称可以是相同的。
- 配置主项目的Podfile
在Podfile中分别引入不同版本的podspec。
pod 'EaseapiSDK-Debug', '1.0.0', :configurations => ['Debug']
pod 'EaseapiSDK', '1.0.0', :configurations => ['Release']
- 配置其他pod的podspec
如果其他pod需要使用EaseapiSDK的接口,则需要在对应的podspec文件中添加依赖即可,不需要再指定版本号和configurations。示例:
s.dependency 'EaseapiSDK-Debug'
s.dependency 'EaseapiSDK'
以上操作完成即达到目的。
【题外】pod lib create MyFramework
使用pod lib create命令可以便捷的创建一个pod项目的模版。
相关文章:
iOS Flutter 开发环境部署
iOS 13 Scene Delegate and multiple windows
iOS DeviceCheck详解
iOS安全:使用dumpdecrypted/Clutch 砸壳
iOS TestFlight的局限性及改进措施