iOS组件化

配置podspec文件(二)

2018-12-06  本文已影响0人  书写不简单

如果按照上篇文章的步骤走下来,完全没有问题。那恭喜你!

我自己网上学习,搞了三天。。。把该踩的坑踩个差不多了。。先上图看看各种各样的问题吧。。。


error1.png error2.png error3.png error4.png error5.png error6.png error7.png error8.png error9.png

我遇到的问题总的概况就三个方面:

物理路径:

文件中的真实路径,比如NewToo.m的路径:ProductKit/ProductKit/NewTool


wuli.png
层级路径:

层级路径可以参考安装到pod里面的文件的路径填写,比如NewToo.m的路径:ProductKit/NewTool
NewTool层级是属于ProductKit层级下的一个子subspec


fullpath.png

如果我们需要更新自己的类库, 只需要将最新的代码提交到Github, 然后创建新的release版本, 注意: 这里的版本要和podspec文件内的s.version一致, 然后再执行一遍下面的指令即可:

pod trunk push LZTool.podspec --allow-warnings

本文结合自己踩过的坑,参考网上的资料做了以下几点总结:

1、如何编写podspec文件

一些常用的信息介绍:


info.png

上面列举的信息大部分来自pod默认生成的podspec文件中的给的,其中需要重点注意标识黑体的这几个信息。


你在三方库中看到的那些文件都是通过这些配置来确定的。当pod install引入三方库时,只会引入你在podspec中配置的那些文件。所以在添加依赖的时候,要用层级路径,而不是物理路径!!!!


其中有几项配置要注意:


config1.png config2.png config3.png

关于资源文件更详细的写法,可以看这篇文章:给 Pod 添加资源文件

2、如何校验podspec文件

在podspec写好之后我们需要验证一下编写的内容是否有误。可以在命令行的三方库当前路径下使用下面的命令:

pod lib lint (从本地验证你的pod能否通过验证)
pod spec lint (从本地和远程验证你的pod能否通过验证)

pod lib lint --verbose (加--verbose可以显示详细的检测过程,出错时会显示详细的错误信息)
pod lib lint --allow-warnings (允许警告,用来解决由于代码中存在警告导致不能通过校验的问题)
pod lib lint --help (查看所有可选参数,可选参数可以加多个)

我们目前只是在本地写的三方库,所以只需要使用pod lib lint验证即可(这个过程会较为费时,需要稍微等待)。

3、如何实现目录分层

使用subspec来实现目录分层。

例如AFNetworking:


AFNetworking.png

下面举例说明,如图所示的目录结构:

这个截图的最外层目录是 ZCPKit 文件夹,这些都是物理路径!!

ZCPKit.png
具体展开如下:
ZCPKit
┗━━━━Classes
     ┗━━━━ZCPKit.h
     ┗━━━━ZCPRouter
          ┗━━━━ZCPRouter.h
          ┗━━━━ZCPRouter.m
     ┗━━━━ZCPUtil
          ┗━━━━ZCPUtil.h
          ┗━━━━ZCPUtil.m

那我们在podspec文件里面应该这样写:

podspec.png
tips:
这里有个要注意的地方:
添加依赖的时候,不能按照上述文件的路径!!而应该按照pod里面的层级路径:
pod 里面的层级路径: cengji.png

如果想有多层的目录结构还可以继续嵌套下去。

有几个需要注意的地方:

比如类ZCPUtil.h中 #import "ZCPRouter.h",同时ZCPRouter.h中 #import "ZCPUtil.h"。这样当写podspec时就需要在Util层级中写dependency 'ZCPKit/Router',在Router层级中写dependency 'ZCPKit/Util'。如此便存在Router与Util层级之间的循环依赖。出现循环依赖时,三方库是无法成功提交到repo上的,会报依赖错误。解决办法是,层级间要尽量解耦。

为了避免出现上述的循环依赖错误。

例如:ZCPUtil.h文件的真实路径是:ZCPKit/Framework/Util,而Util层级是属于ZCPKit层级下的一个子subspec,所以当写Router层级依赖Util层级时要写:dependency 'ZCPKit/Util'而不是dependency 'ZCPKit/Framework/Util'

需要注意的:
在检测的时候会很经常会出现各种乱七八糟的错误,在文件多的情况下不太容易一次通过,并且即使你的代码在Xcode中编译通过了,但是也还是会出现很多错误。所以你需要尽量去注意下面的几个问题:

1.当代码中存在警告时要记得使用--allow-warnings参数。

2.如果引入的文件或分好的层级需要依赖系统库或三方库,要记得使用上面介绍的libararies,frameworks等属性。

3.如果你的三方库是在一个xcode项目中编写调试,那么尽量不要用pch。

因为很多类之间的小依赖会被pch给遮掩过去,这会导致在校验时出现大量错误。

4.如果想要分层,那么尽量解耦使模块能够单独存在。

原因是当分层较多层级较深时,很可能产生循环依赖的问题。

最后还有一个问题:
解决pod lib lint/repo push不支持i386编译&只能真机运行的库

上一篇 下一篇

猜你喜欢

热点阅读