iOS项目组件化遇到的问题及解决(100%遇得到)

目前项目组件化已经告一段落,我把总结的相关文章列罗出来
创建cocoapod私有库详细步骤(基础组件组件化)
iOS组件化方案与实践:Target-Action
iOS组件化解决图片显示问题
xib文件如何组件化(cocoapod私有库)?
适合小白的iOS项目组件化完整详细流程,每步都有demo
pod trunk push使用
iOS项目组件化遇到的问题及解决(100%遇得到)
Cocoapods 更新索引库或者指定第三方

组件化demo

1、 新建一个组件时,如果依赖其他组件,例如:AFNetworking,自己建的组件的话,就需要在podspec最后加上依赖:

image.png

2、每次在验证索引文件时,podspec中的版本号必须和提交代码时候打的tag一致,不然验证不通过。

PS:注意,千万不要删除旧标签,然后再重新打这个旧标签,这样依然不行。

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

image.png

加上--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.png

8、一个组件中如果存在一个文件夹文件需要依赖另一个文件夹下的文件

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.png

10、如果组件报如下错误

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.png

13、如下错误

image.png

原因:未找到protoc:命令
解决:执行下面代码:

$ brew install protobuf

14、拆分的时候,直接拉到每个组件里的时候,组件新建类似于主工程pch文件的方法:

这个是怎么来的呢?或者说为什么这么做?
我们在podspec文件中添加下面代码,然后执行pod install得到的

15、组件中遇到这个错误:明明在finder中是存在的,但是就是报下面错误

解决办法:

这是个包含该组件所有头文件的head文件,在制作这个head文件时,必须做分层,在podspec文件中修改如下:

s.source_files = 'HuCategoryKit/Classes/*'
  s.public_header_files = 'HuCategoryKit/Classes/*.h'
    s.subspec 'Category' do |ss|
    ss.source_files = 'HuCategoryKit/Classes/Category/**/*'
    end

这是我的spec文件,可参考,具体怎么做文件分层,在这篇文章第7条。

16、同一组件中,多及目录下,不同文件夹依赖问题

解决:(组件名/统一父文件件名字/依赖的文件所在文件夹名字)

17、同一组件中,做目录分级时遇到这两个错误:

- ERROR | [HuCommonUIKit/HuCommonUI,HuCommonUIKit/HuCommonUI/HuTableViewExtend] file patterns: The `source_files` pattern did not match any file.

 - ERROR | [HuCommonUIKit/HuCommonUI/HuTableViewExtend, HuCommonUIKit/HuCommonUI/HuTableViewExtend/VIewBase, HuCommonUIKit/HuCommonUI/ViewControllers, and more...] xcodebuild: Returned an unsuccessful exit code.

原因:这是因为在不同文件夹中,存在依赖关系,在做目录分层的时候一定要写依赖关系,可参考(本文第8条和第16条)

解决:

这里我先给出做一层目录分层代码:

注意:

在做更深层次目录分层时,如果文件夹下只有子文件夹,没有文件,

例如实现如下图左边效果:

要实现上图效果,在更深层次分层时一定不要写这一句

 ss.source_files = 'HuCommonUIKit/Classes/HuTableViewExtend/*'

不然还会报如下错误:
The source_files pattern did not match any file.

正确的配置为:

18、Could not build module 'HuCategoryKit'

原因:

这句话虽然是在swift中用的,但是导致项目目录中Headers下为空,程序编译失败

解决:
删除 use_frameworks! 就好了。

19、- ERROR | [HuUtilsKit/HuUtils] xcodebuild: HuUtilsKit/HuUtilsKit/Classes/HuUtils/HuControllerId.m:196:44: error: too many arguments to function call, expected 0, have 2

原因:必须先定义原型才可以使用

20、一个组件在配置prefix_header_contents头文件时,是有顺序要求的,不然回报头文件找不到。

例如我下面配置,HuCommonUIKit是依赖MJExtension的,如果把两者顺调换的话,这个在配置的组件就会报mjvalue错误

s.prefix_header_contents = '#import <HuConfigsKit/HuConfigsHeader.h>','#import <HuCategoryKit/HuCategoryHead.h>','#import <HuUtilsKit/HuUtilsHeader.h>','#import <HuNetKit/HuNetHeader.h>','#import <MJExtension/MJExtension.h>','#import <HuCommonUIKit/HuCommonUIHeader.h>'

21、组件化之后,在主工程调试组件中的代码发现,断点显示变量全是nil

解决:
打开Xcode 的Build Setting 搜索 optimization
修改Debug的对应选项 None[-O0]

但是,如果主工程设置了多个环境,例如sit、uat、dev,这样的话,还需要做下面一步

22 xcrun: error: unable to find utility "simctl", not a developer tool or in PATH

) during validation.

解决办法:

更新一个网友发现的错误

23 [!] /usr/local/bin/git -C /Users/huanghaipo/.cocoapods/repos/testSpecs pull Your configuration specifies to merge with the ref 'refs/heads/master' from the remote, but no such ref was fetched.

解决:在第一次创建这个testSpecs远程索引库的时候,这个仓库要有内容,例如下图,勾选readme,即可解决这个问题


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容