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

1.0 2018.05.29 16:26* 字数 1797 阅读 1911评论 7

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

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.

解决办法:

小礼物走一走,来简书关注我

 
日记本
 
 
阿水_419f
2楼 · 2018.12.05 13:48

组件化写的很全啊。楼主是不是踩过很多的坑啊。哈哈哈

 
是的,一路趟坑,好在都解决了,记录下:smile:
2018.12.06 12:40 回复
 
@wg刚 大佬加个好友可好QQ: 928459091 遇到问题了
2019.03.14 16:58 回复
 
@WYJdesigner 加了
2019.03.14 17:56 回复
 
@WYJdesigner 但是你的QQ要验证你的手机号
2019.03.14 18:37 回复
 
@wg刚 好了大佬 可以再添加一下嘛
2019.03.14 20:03 回复
 
@WYJdesigner 978159546,你加我吧,刚试了还是要验证
2019.03.14 20:05 回复
 
被以下专题收入,发现更多相似内容
iOS
iOS组件化
iOS备忘录
爱情的最高形式,是这三个字

转自:许莫私人音乐厅作品 喜欢≠合适≠在一起 《前度》里有一句话说: 我们也是长大以后才明白,最终陪我们到白头的也许并不是那个我们倾其所有喜欢过的人,而是一个各方面都合适的人。 可能每个人都会遇到一个爱而不得的人吧,相比于最初得不到时的哭天抢地,后来的我们渐渐变得平和,开始接受生命里的不可得。 我们悄悄把那个人放在心底,然后在余下的这一生,开始尝试着接受其他人,接受那个对我们而言更合适的人。 我们只有在经历过几次相爱和离别之后才知道,原来喜欢、合适以及在一起并不是一回事。 1. 喜欢是乍见之欢,久处仍怦然 喜欢一个人是什么感觉呢? 是即使周围人山人海也总能够第一眼就看见...

月宸
就让我任性地点点赞吧!

2019年3月10日 阴 自从年前买了十年尊享会员,忽如一夜春风来,关注、点赞、留言都暴开,让在简书默默耕耘两年多的我果真有了“尊贵”之感,很是受宠若惊。 秉持一贯的认真,忙不迭地回粉、回赞、回言,读到别字、不顺等自认为不妥之处,还是习惯性地点开人家小窗“诲人不倦”。 一天,看到某友友回复,说我都是手动留言。诧异了……他们怎么留?不是手动能自动?有机器人帮忙? 忍不住翻了下他每天给自己和其它友友文章下的留言,似乎有点明白他说的手动的意思,他们留的千篇一律,是复制粘贴,而我每个留言都是带着对所读文章的思考或受到的启发留的。 很明显的,人家就是冲着我持有的钻来的。作为一位高持钻者,回点他的...

无色生香
家乡记忆:二月半来采茶看,北塘沿河香灯闹

农历二月十五日,家乡常有采茶灯等文娱活动,俗称“掉采茶”。以惠山和北乡士桥等为最盛,家乡老话有“二月半,采茶看”说法。 明朝时候起,家乡还有一风俗,农历二月中旬夜晚到北塘看香灯。 北塘香灯的来历,是明成祖朱棣即位后,在湖北武当山大造道观,当时松江、苏州两府各县乡民逐渐形成到武当山朝山进香的习俗。 这两地的进香船要于农历二月中旬在家乡北塘黄埠墩一带集合,然后一起出发。 所以每年一到此时,北塘沿运河两岸便有数以百计的进香船开来,锣鼓一响,便停泊下来。然后悬香灯为记,挂在船桅上。 所挂香灯以进香人数为准,每一个进香人,都要悬一盏香灯,船上有多少人,就要挂多少香灯。香灯形状为四方形、八角形等,在...

乐道也
不要熬夜了,会死人的!

你还在熬夜吗?秃头的那种? 这几天,网上有一则新闻,让网友一下子炸锅了:一位大学生,因“秃顶”严重影响美观而去就医。谁知检查结果却发现,竟然和她经常熬夜有极大的关系! 更可怕得是,医生告诉我们,因为熬夜导致脱发的,十个人里面就有三个! 过去朋友见面,经常问“你吃了吗?”,而现在,早变成“你的发际线还好吗?”。 为了拯救发际线,各种防脱洗发水、生发水,买买买! 可熬夜呢?还熬吗? 熬啊,白天是生存,熬夜才是生活! 昨天微博上有条热搜是“3亿中国人有睡眠障碍”。最新发布的《2018中国睡眠指数》报告里显示: “3/4的90后是在晚上11点后入睡,1/3是在凌晨1点入睡。” 是什么导致人们越来...

李砍柴
你只要善良,智慧自然就会到来

我一直都想重新进入那个纯粹的灵力世界里,但是很难,总有一股力量把我往下拉扯。 要承担责任,责任是重的。要变得锐利一下,强大一些,这也是重的。我想要成为我自己,但是这需要一个过程。我也想成全别人,但这就不得不逼着你变得越来越强,越来越重。 我有好几次发现,我被这个灵力的世界拒之门外。重的东西太多,我就够不到轻盈的那部分了。 这可能也是一种修炼吧。在一种摇摇欲坠中维持住一种微妙的平衡。在世界和自我中间找到一个微妙的平衡。在佛与魔中间维系着平衡。 我们不可能完全消灭内心的魔,也做不到成为毫无杂念的佛。我们也不能丢弃肉身的重,去一味成全内心的轻。老子说,有无相生,难易相成,长短相形,高下相倾,人...

李砍柴

T

posted @ 2019-03-30 15:07  yuhui.Mr  阅读(1507)  评论(0)    收藏  举报