天天看点

pod私有库之间相互依赖

场景

最近在做一个开源项目,具体是把一个项目的代码的各个部分解藕,取出来独立封装为各个模块,再把这些模块通过CocoaPods集成为若干私有库,最终在工程中通过pod install命令即可完成集成,各个模块也可以独立进行维护。现在的问题是,如果多个库之间需要存在依赖关系,如何实现?

遇到的困难

假设读者朋友已经熟悉podspec文件的编写规范。在一个库中申明它需要用到某个库,但是在pod lib lint指令执行的过程中,它找不到那个被依赖的库,这时就build失败了,在编译结果中也可以得到这个提示。但是我们也不能把需要用到的库中的代码拉进这个模块。那假设这两个模块都在工程中用到,那个被依赖的模块就会出现两次了,这是不允许的。

解决办法

1.pod lib lint技巧。

在podspec文件中申明它要用到哪个pod,然后在pod lib lint 的命令后加上需要依赖的库的名称,这样在编译的时候就会自动把目标文件连接起来,通过编译。在这种情况下,是不需要实际引如被依赖的文件的,但可以编译通过。命令如下:

pod lib lint --use-libraries --allow-warnings --sources=BIEncrypt
           

sources后跟的是依赖的库的名称,这里只是举了一个例子。另外–use-libraries命令表明程序中涉及到了.a文件,–allow-warnings命令表明允许警告,–sources后可以加上一个或多个库的名称,前提是这些库被用到而且这些库已经上传并交由pods管理。

2.podspec中依赖语句。

另外别忘了在podspec文件中加上如下一句话:

s.dependency 'BIEncrypt','~> 0.2.0'
           

它表明依赖某个库,库的版本是多少。

3.pod repo push方法。

这个过程是指把podspec文件上传,交由pods管理的语句,它同样需要加一些后缀,因为它上传的这个过程也要编译。命令如下:

pod repo push BIFaceSDK BIFaceSDK.podspec --use-libraries --allow-warnings --sources=BIEncrypt