irpas技术客

iOS 组件化开发----pod私有库制作及使用_m0_47450499_pod 私有库

未知 1028

参照学习链接:

1.iOS组件化----Pod私有库创建及使用 - 简书

2.iOS 组件化开发(一):远程私有库的基本使用 - 云+社区 - 腾讯云

3.iOS 组件化开发(二):远程私有库的更新与子库 - 云+社区 - 腾讯云

4.iOS 组件化开发(三):加载资源文件 - 云+社区 - 腾讯云

5.iOS 组件化开发(四):fastlane实现pod自动化 - 云+社区 - 腾讯云

6.滑动验证页面

7.滑动验证页面

查看本地仓库:pod repo

移除本地私有索引库:pod repo remove ZZPublicSpecs

添加本地私有索引库:pod repo add ZZMakeSpecs https://github.com/UserZhangXiaoZhe/ZZMakeSpecs.git

步骤一:创建私有的pod索引仓库:

1、在公司的git服务器上创建私有远程索引仓库。克隆地址。

如:https://gitee.com/wangpeng14/WPTestPod_Specs.git

2、新建pod spec索引仓库(将私有的远程仓库copy到本地)。命令如下:

pod repo add TestPodSpecs https://gitee.com/wangpeng14/WPTestPod_Specs.git

TestPodSpecs:为pod spec索引仓库名称

3、执行完毕后,在目录:/Users/admin/.cocoapods/repos 下会多出来一个TestPodSpecs文件夹,可使用pod repo命令查看。如下:

至此,私有远程索引仓库TestPodSpecs生成完成

步骤二:创建私有组件库:

1.在公司的 git 服务器上面创建 组件 的 git 远程仓库,克隆地址是:https://gitee.com/wangpeng14/PrivatePermissionTools.git

2、创建私有的pod组件库(如PrivatePermissionTools权限组件),执行如下命令:pod lib create?PrivatePermissionTools。过程中需要填一些选项,按需选择即可。如下:

pod组件空模板创建成功后会自动打开工程。

3、删除ReplaceMe文件,将需要封装的文件(如网络组件相关文件)复制到PrivatePermissionTools/PrivatePermissionTools/Classes中。如下:将LeelenNetworkManager复制到Classes中。(注意:需要cd到Example文件下 然后更新 pod update --no-repo-update)

4、修改 PrivatePermissionTools.podspec 文件如下:

5、校验本地索引文件 PrivatePermissionTools.podspec

cd到PrivatePermissionTools.podspec所在文件夹下,执行pod lib lint --allow-warnings,该命令是检查本地索引文件是否符合推送规则。成功了会打印PrivatePermissionTools.podspec passed validation。如下:

pod lib lint参数解析:

--sources:需要引?的spec,默认只依赖master,如果当前pod依赖了私有库,需要将其对应的spec包含进来,不然会报找不到对应库的问题。参数可以是本地spec的名称,也可以是git地址。

--allow-warnings:有警告会通过不了,如果警告是?关紧要的,可以加上,让检测通过。

--verbose:打印详细的检验过程

--use-libraries:?程或者依赖??了静态库(*.a?件)或者是framework

备注:

pod lib lint 表示在本地校验索引文件

pod spec lint 表示在本地和远程都校验索引文件

6、将PrivatePermissionTools本地组件库与远程的仓库git关联起来

?

?7、上传 PrivatePermissionTools.podspec 索引文件到我们的私有远程索引仓库 TestPodSpecs,命令如下:(进入到PrivatePermissionTools.podspec目录)

pod repo push TestPodSpecs PrivatePermissionTools.podspec --allow-warnings

上面命令对 PrivatePermissionTools.podspec 文件做了两个操作:一个是将其推送到私有的远程索引仓库,可以去公司的 git 上面 TestPodSpecs 索引仓库中查看;另一个是将其 copy 到私有的本地索引仓库,这个可以去目录:/Users/admin/.cocoapods/repos/TestPodSpecs 下查看到。

至此私有的组件库PrivatePermissionTools就创建完成了,可以在终端执行 pod search PrivatePermissionTools来查询它。

使用:

注意事项

1、操作的时候,先cd到对应的文件夹下

2、注意操作顺序

a、在develop分支开发、修改PrivatePermissionTools代码,修改 ? PrivatePermissionTools.podspec版本号,提交。

b、将develop分支合并到master。

c、在master打tag(如:1.0.1),注意这边的tag应与 PrivatePermissionTools.podspec中的s.version 版本号一致。

远程私有库的更新:(cd 到本地仓库的位置,执行以下操作)

一、更新远程仓库

1.代码更新

2.版本更新(版本更新 这一步非常重要,为更新索引库做准备)

?

版本升级

查看远程仓库,标签数已经有2个了,点进去就可以看到0.2.0,这里我们就不去看了

二、修改描述文件并更新索引库

1、修改Sepc

2、验证远程Spec

cd到xxxx.podspec所在文件夹下,执行pod lib lint --allow-warnings

3、更新索引库

pod repo push 索引库名称 xxx.podspec --allow-warnings

依赖第三方库:

当我们的私有库需要依赖其它第三方才可以正常使用时,我们就需要在spec文件中开启依赖,例如下面所示代码,表明当前仓库需要依赖AFN和SDWebImage

s.dependency 'AFNetworking', '~> 3.2.0'

s.dependency 'SDWebImage', '~> 4.3.3'

问题:但是这里存在一个问题,如果来了一位新的小伙伴,他所负责的部分只需要LXFBase下的Category,而LXFBase下的Cache才需要依赖SDWebImage,此时他若是pod一整个LXFBase岂不是平白无故安装了第三方依赖库,那应该怎么做呢?

答案:方案就是可以通过子库Subspecs来解决因需要一个小小的工具而依赖整个基础组件的问题

子库Subspecs:

什么是Subspecs?这里我们可以搜索一下SDWebImage。

?

Subspecs:

可以看到,如果我们只需要用到SDWebImage中的GIF功能,那么并不需要将整个SDWebImage都下载下来,在Podfile中将pod 'SDWebImage' 改为 pod SDWebImage/GIF即可单独使用这一功能

那接下来我们就来看看怎么描述一个子库吧

子库格式:

因为这里已经分离出子库了,所以s.source_files和s.dependency就不能这么使用了,需要我们在子库里分别指定,所以我们直接把原来的s.source_files和s.dependency都注释掉。写法参考如下:

修改后再按之前的步骤更新索引库和组件库就可以了。

ps: 在添加第三方依赖描述后做验证或者上传操作可能会很慢,因为它在克隆第三方库如SDWebImage,有兴趣的可以在命令后面加入--verbose来查看详情情况

使用子库:

组件库中带有图片资源:

1、将LoginImage文件夹放入/LeelenNetwork/Assets中,其中LoginImage文件夹内有login_logo@2x.png图片;

2、 修改LeelenNetwork.podspec索引文件

?

?3、修改完spec索引文件之后,执行pod lib lint --allow-warnings检查本地索引文件是否符合推送规则。校验没问题后,SourceTree提交代码,打tag(tag注意与LeelenNetwork.podspec文件内的s.version一致)。执行pod repo push LeelenIotPodSpecs LeelenNetwork.podspec --allow-warnings操作,上传 LeelenNetwork.podspec 索引文件到我们的私有远程索引仓库 LeelenIotPodSpecs。

4、修改工程中的Podfile文件,cd到工程Podfile文件所在位置,执行pod install

5、pod install成功后,可以看到工程中多了一个Resources文件夹,里面有login_logo@2x.png图片,路径如下:Pods/LeelenNetwork/LeelenNetwork/Assets/LoginImage/login_logo@2x.png。以及Products文件夹下多了一个NetworkLog.bundle,查看包内容,发现里面也有login_logo@2x.png图片。

6、使用时,先拿到最外面的bundle,然后再去找下面指定名字的bundle对象,再搜索具体资源。如下:

NSBundle * currentBundle = [NSBundle bundleForClass:self.class];

NSURL * bundleURL = [currentBundle URLForResource:@"NetworkLog" withExtension:@"bundle"];

NSBundle * resourceBundle = [NSBundle bundleWithURL:bundleURL];

UIImage * logoIcon = [UIImage imageNamed:@"login_logo" inBundle:resourceBundle compatibleWithTraitCollection:nil];


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #pod #私有库 #iOS