组件化过程及遇到的那些问题

先放两张在其他文章里看到的图片,清晰明了


屏幕快照 2018-06-05 上午10.46.22.png
屏幕快照 2018-06-06 上午11.20.01.png
1.创建远程索引库

什么是远程索引库?

每创建一个组件都会带有一个 xxx.podspec 的索引文件。专门用来存放这些索引文件的库就叫做索引库。
我们需要将这些索引文件上传到远程索引库才能保证其他的同事能够拿来用。

podspec:描述自己组件工程的代码目录和资源目录在哪,还有自己组件工程所依赖其他框架,到时候就会根据podspec的指引去引入自己的仓库代码

pod spec create spec文件名
这行命令我们知道即可,在使用pod管理的这个过程中,并不需要我们自己去创建podspec文件

2.创建本地索引库并关联远程索引库(本地添加私有索引库,如果是公有则不需要1和2这两步)

pod repo
解释: 查看当前有哪些本地索引库
pod repo add name url
解释:创建本地索引库,并和远程索引库做关联,name为本地索引库的名字,url为远程索引库的地址

本地索引库的物理地址为 ~/user/mxth/.cocoapods/repos/本地索引库名字

  • ???如何更改关联的远程索引库地址

???如何删除本地索引库:

cd .cocoapods
ls -a
sudo rm -r -f AnyKit  (删除AnyKit repo)

这个删除方式经测试不对,用下面的方式

pod repo list
pod repo remove PZResources
3.创建远程代码仓库
4.创建组件的本地代码库

pod lib create Name
解释:Name为组件名

5. 在Example目录下执行pod install 之后 build一下看看有无编译问题
6. 修改podspec中的相关信息
7.提交组件到远程代码库并打tag
//git add
git commit -m “xxx"
git remote add origin 远程代码仓库地址 //第一次操作即可
git push origin master
git tag 版本号 (注:这里的版本号必须和podspec里写的版本号一致)
git push --tags
  • 下面的2步,要cd到podspec目录下才可以,并且tag的版本号要和podspec文件中的s.version一致
8.验证podspec索引文件

pod spec lint --verbose --allow-warnings

若遇到错误,需要解决具体问题’pod spec lint’,则按照提示解决后,再继续验证

9.提交索引文件到远程索引库(私有)

pod repo push 本地索引库的名字 索引文件名 --verbose --allow-warnings

解释:索引文件名 后缀为.podspec 例如GJ-My.podspec

  • 公用组件则采用下面的方式:
    1)注册trunk
    pod trunk register EMAIL NAME
    之后去邮箱验证,验证之后,回到终端继续
    2)pod trunk push HttpManager.podspec --allow-warnings

这一过程中我遇到的那些问题:

  1. pod install后查看文件,发现HHCategory在工程文件导航目录中不存在,直接查看文件,实际存在,但细看文件,发现不是自己的库中的文件,串库了呢。 问题在哪里呢?

猜测1:分类重名 。
细看不是的,pod安装的这些文件名和我的文件名是不一致的

猜测2:pod 中组件名与他人一致。
于是删除本地HHCategory的repo库,然后pod search HHCategory,果然如此!重名啦!

  1. 多个组件可以共用同一个 本地索引库和远程索引库

  2. pod install 时, Unable to find a specification for HannahCategory depended upon by GJ-My

网上说需要清理当前pod目录
1 pod repo remove master
2 pod setup
尝试过后问题依旧。

若该组件可以公开使用,则可以使用trunk推送到共有库;
不然,可以在podfile文件中添加该库的远程索引库地址,顺带将公有的索引库地址也添加上。
因为pod install 默认是在公有的索引库中查找的

source 'https://github.com/HannahZheng/HannahRepo.git'
source 'https://github.com/CocoaPods/Specs.git'

此外还有一个警告,是因为当前模块适配的是iOS 8.0 ,而Podfile文件未指明系统平台版本
,因此在Podfile文件中添加

platform :ios, '8.0'
  1. pod search 自己的组件时,搜索不到?

~/Library/Caches/CocoaPods/search_index.json

删除该路径下的search_index.json文件后,重新search,就可以更新索引

  1. 自己创建的私有库组件给其他人使用时,要先在终端进行这个命令后,再pod install
    pod repo add name url

  2. 另一私有库B已经更新,但当前库 pod install后B仍是旧版本?

使用pod update就好。
也可以针对某一个模块更新

pod cache clean ServiceModule --all
pod update  PayModule —no-repo-update
  1. ERROR | [iOS] unknown: Encountered an unknown error (Unable to find a specification for HannahConfig depended upon by GJ-My) during validation.

终端校验时 添加source

pod lib lint --verbose --allow-warnings --sources='https://github.com/CocoaPods/Specs.git,https://gitlab.mxth-inc.com/zhenghan/MxthRepo.git'
    • ERROR | [iOS] file patterns: The resources pattern did not match any file.

最初我将图片资源放在新建的xcassets中,同时xcassets文件与Classes平级,路径是这么写的

s.resource = 'GJ-My/GJ-My.xcassets'

一直以为是自己的路径有问题,各种修改,各种尝试,验证依然通不过;还尝试了bundle,以及图片直接放在Assets文件夹中,路径各种修改,各种通不过,抓狂不?

最后在这里找到解决办法
https://stackoverflow.com/questions/43073261/error-ios-file-patterns-the-source-files-pattern-did-not-match-any-file

简单到我不敢相信,修改version就可以了。
因为在验证podspec这一步,会先从远程仓库下载最新代码,然后与文件中的设置项比对,一致则通过。

9.加载xib与加载图片

xib 字体文件等都属于resources 在podspec的resources中需要指明

xib加载,非组件化项目时,使用的是

[[NSBundle mainBundle] loadNibNamed:@“” owner:self options:nil].lasObject]

组件化中这样就加载不到了,需要略作调整

[[NSBundle bundleForClass:[self class]] loadNibNamed:@“” owner:self options:nil].lasObject]

图片加载 [UIImage imageNamed:@“图片名"] 默认是从mainBundle中去加载图片.

有以下两种方式:

NSBundle *bundle = [NSBundle  bundleForClass:[self class]];

方式一:

 [UIImage  imageNamed:@“图片名”  inBundle:bundle compatibleWithTraitCollection:nil];

方式二:

NSInteger scale = [UIScreen  mainScreen].scale;

  NSString *path = [bundle pathForResource:[NSString  stringWithFormat:@"图片名@%ldx.png",scale] ofType:nil inDirectory:@"bundle的包名"];

 [UIImage imageWithContentsOfFile:path]

10.subspec目录结构问题

当我们的库中文件较多时,希望有一个清晰的目录结构,这个时候subspec就上场了。

例如AFN这样的目录结构

屏幕快照 2018-06-08 下午3.11.17.png

写法也很简单,类似于


Pod::Spec.new do |s|

 s.name = 'RestKit'

 subspec 'Pinboard'  do |sp|

 sp.source_files = 'Classes/Pinboard'

end

end

这里有一个小的注意点,spec的source_files路径尽量不要包含subspec的文件路径,这样在其他人使用我们的库,查看时才会有清晰的目录结构,类似于AFN这样。同时subspec的文件夹的名字和subspec子模块的名字保持一致。

后续待更新

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

推荐阅读更多精彩内容