IOS项目实施组件化过程中遇到的问题及解决
1、 新建一个组件时,如果依赖其他组件,例如:AFNetworking,自己建的组件的话,就需要在podspec最后加上依赖:
image.png2、每次在验证索引文件时,podspec中的版本号必须和提交代码时候打的tag一致,不然验证不通过。
3、在主工程中pod 一个私有组件时,会报:
Unable to find a specification for 组件名
这是因为如果不指定,默认会从master的索引库查找,这样就会报找不到组件,因此需要在Podfile中指定组件远程索引库地址。
解决方案:
source '[https://github.com/wgModularization/WGModulSpecs.git](https://github.com/wgModularization/WGModulSpecs.git)’(这个是自己建立的索引库,你要用自己的索引库)
source '[https://github.com/CocoaPods/Specs.git](https://github.com/CocoaPods/Specs.git)’
4、通过pod spec lint --verbose --allow-warnings 命令验证podspec索引文件 时可能汇报下图错误:
image.png报这个错的原因是校验podspec文件时默认只会到官方specs库(https://github.com/CocoaPods/Specs.git)去校验,需要同时指定自己创建的远程索引库地址库校验。
解决方案:(注意后面拼的还是要自己的索引库,不要直接粘贴我的)
pod spec lint --verbose --allow-warnings --sources='[https://github.com/CocoaPods/Specs.git,https://github.com/wgModularization/WGModulSpecs.git](https://github.com/CocoaPods/Specs.自己的索引库)'
image.png
5、如果私有cocoapods库中用到了CommonCrypto
验证的的时候会报错:
Include of non-modular header inside framework module
加上--use-libraries就可以了:
验证
pod spec lint --verbose --allow-warnings --use-libraries
上传
pod repo push HuModularizationSpecs xxx.podspec --verbose --allow-warnings --use-libraries
6、既有私有库依赖,还有CommonCrypto这种的依赖:
验证
pod spec lint --verbose --allow-warnings --use-libraries --sources='[https://github.com/CocoaPods/Specs.git,git@gitlab.317hu.com:HuModularizationLibrary/HuModularizationSpecs.git](https://github.com/CocoaPods/Specs.git,git@gitlab.317hu.com:HuModularizationLibrary/HuModularizationSpecs.git)’
提交:
pod repo push HuModularizationSpecs HuThirdKit.podspec --verbose --allow-warnings --use-libraries --sources='[https://github.com/CocoaPods/Specs.git,git@gitlab.317hu.com:HuModularizationLibrary/HuModularizationSpecs.git](https://github.com/CocoaPods/Specs.git,git@gitlab.317hu.com:HuModularizationLibrary/HuModularizationSpecs.git)'
7、私有库目录分层实现:
image.png在pod进HuThirdKit组件后,我想实现上图这种目录效果:有个头文件(HuFileCJTest.h)里面导入该组件的头文件、四个文件夹,每个文件夹下包含对应的文件。
需要做的是修改podspec索引文件:
image.png8、一个组件中如果存在一个文件夹文件需要依赖另一个文件夹下的文件
image.png如图,HSDownloadManager文件夹下HSDownloadManager依赖MD5文件夹下NSString+MD5.h文件
在验证的时候会报错,NSString+MD5.h找不到。
解决:
image.png注意:依赖的时候写的路径并不是真是的物理路径,而是层及路径:例如上图
ss.dependency 'HuThirdKit/MD5'
假如:MD5的真实物理路径是HuThirdKit/util/aaa/Md5,也要写成ss.dependency 'HuThirdKit/MD5'这种。
目前还在对项目做组件化,后面遇到问题再更新!!!
9、 如果组件中含有静态库.a 则需要添加下面代码:
s.vendored_libraries = 'HuSpecialThirtKit/Classes/BaiDuPush/*.a'
注意:等号右边要写你自己的路径:下图是我代码的路径
image.png10、如果组件报如下错误
image.png说明你本地的索引库并不是最新的,需要执行
先执行
pod repo update
再执行
pod install
如果你知道需要更新某个索引库,可以执行:
pod repo update 索引库名称
11、如下错误
image.png这个错误是因为循环引用造成的,这个循环引用产生的情况是:A组件依赖B组件,然后B组件又依赖A组件。
这种错误的解决方案是:
. 如果是基础组件:则要是这两个组件不要产生耦合。
. 如果是业务组件:就需要通过target-action方案解决组件之间的相互调用,不要依赖。
目前还在对项目做组件化,后面遇到问题再更新!!!
12、组件化时,在同一个组件中报如下错误(其实是有的)
image.png是因为:下图标红文件夹下是空的
image.png解决:可以手动加入头文件
image.png13、如下错误
image.png原因:未找到protoc:命令
解决:执行下面代码:
$ brew install protobuf