热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用cocoapods管理组件化开发

.podspec文件.podspec文件描述自己组件工程的代码目录和资源目录在哪儿,还有自己组件工程所依赖其他框架,根据pod命令:podspeccreatespec文件名
.podspec文件

.podspec文件描述自己组件工程的代码目录和资源目录在哪儿,还有自己组件工程所依赖其他框架,根据pod命令:pod spec create spec文件名 创建podspec文件。

//创建pod索引库,固定写法,并且定义索引库的名字为s,后续通过s,就能拿到索引库

Pod::Spec.new do |s|

s.name = "HttpManager"//设置名称

s.version = "0.0.1"//设置版本号

s.summary = "A short description of HttpManager."//设置摘要

s.description = "A long description of HttpManager."//设置详情

s.homepage = "http://Example/HttpManager"//设置仓库主页

s.license = "MIT"//设置许可证

s.author = { "author-name" => "author-account" }//设置作者

s.source = { :git => "git-address", :tag => "#{s.version}" }//设置仓库源,表示在哪可以找到组件工程

s.source_files = "HttpManager/Classes/**/*.{h,m}"//设置源文件路径(不是整个工程的文件,而是自己封装的代码,以后别的工程引入,就会引入这里的代码)

s.dependency "AFNetworking", "~>2.3"//组件工程依赖哪些第三方框架

s.frameworks = "UIKit", "MapKit" //组件工程依赖哪些原生框架

s.resource_bundles = { 'HttpManager' => ['HttpManager/Assets/*.png'] }//组件工程图片资源

end

//.podspec文件注意点

1.s.description不能为空

2.s.license不能乱填,必须是有这样的协议,例如MIT

Podfile文件指定主工程加载哪些组件库,source指定组件库对应的podspec文件地址。

创建命令:pod init

cocoapods可以加载远程仓库,也可以加载本地仓库,一般加载远程仓库。

创建私有索引库

GitHub上新建一个工程,例如XMGSpec,本地添加私有远程索引库:pod repo add XMGSpec http://git.dev.sh.ctripcorp.com/XMGSpec.git,后面是索引库远程地址。Finder前往文件夹~/.cocoapods/repos,可以看到XMGSpec文件夹,只有.git文件,没有任何私有库索引。

创建组件工程

方式一:直接创建工程XMGLib,把组件代码放在Class中,只要spec描述好,就会自动加载Class中组件代码,使用pod spec create XMGLib 生成spec描述文件,指定加载组件工程的组件代码在哪。

方式二:使用cocoapods命令:pod lib create XMGLib

            这个命令会自动生成一套组件代码工程测试代码,并且有Git管理,包含podspec文件,描述好组件代码位置。

    编辑组件工程的.podspec文件,如上所示,使用pod spec lint XMGLib.podspec命令验证,验证成功后提示:XMGLib.podspec passed validation,验证失败则根据失败提示修改.podspec文件直至通过验证。

组件化(私有远程仓库)

      把自己私有库的索引添加到自己索引库中:pod repo push XMGSpec XMGLib.podspec --allow-warnings,本地索引库就会有自己的私有库的.podspec文件,Finder进入/.cocoapods/repos/XMGSpec,可以看到XMGLib文件夹,包含0.1.0文件夹,子文件中包含XMGLib.podspec文件。而且远程也会有,pod repo push 会帮我们推送到远程索引库,查看远程仓库,可以看到一次提交。

使用自己的私有索引仓库

  • 创建一个新的工程,执行命令 pod init,生成Podfile文件
  • 在Podfile文件顶部添加一个源,表明私有索引库地址,例:source ‘git@git.dev.sh.ctripcorp.com:IBU_App_Tour/TourSpecs.git’  。
  • 在Podfile文件中pod 'XMGLib', '0.1.0'
  • 执行pod install,在Pods文件夹下成功导入XMGSpec工程代码

Cocoapods原理

根据Podfile描述,找到所用组件库的描述文件podspec。

podspec中,s.source指定代码库地址,找到代码库,根据s.source_files指定copy哪些文件到自己的工程中。

组件化升级

各个组件库不断经历完善,需要更新升级组件库。

  • 把最新的版本代码绑定tag,更新podspec文件,重新上传到版本索引库 pod repo push XMGSpec XMGLib.podspec --allow-warnings
  • 工程文件在使用过程中,使用pod update就能加载最新版本组件代码

组件化资源

  • 使用pod lib create创建的组件工程,有个Assets文件夹,把图片放这
  • podspec文件中s.resource_bundles指定资源文件路径
  • 仓库代码重新pod install,自动生成bundle文件。代码中如何使用资源文件,之前获取图片都是在主bundle中:[NSBundle mainBundle],但是组件工程资源,不是在主bundle中,是在自己框架的bundle中。获取自己的bundle,NSBundle *selfBundle = [NSBundle bundleForClass:self]; 

 NSLog(@"%@", selfBundle);

//获取bundle还不够,图片在XMLib.bundle文件中

//图片用全名

NSString *path = [selfBundle pathForResource:@"XMGLib.bundle/img@2x.png" ofType:nil];

UIImage *image =  [UIImage imageWithContentsOfFile:path];

//注意:xib同样属于资源,需要跟图片一样使用自己的bundle

//获取当前bundle名称 

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

NSString *bundleName = bundle.infoDictionary[@"CFBundleName];

bundleName = [NSString stringWithFormat:@"%@.bundle",bundleName];

//xib名称需要拼接Bundle名称

NSString *nibName = [NSString stringWithFormat:@"%@/XMGHomeRecommendCell",bundleName];

[self.tableView registerNib:[UINib nibWithNibName:nibName bundle:[NSBundle bundleForClass:[self class]]] forCellReuseIdentifier:ID];

框架依赖

podspec文件中描述:s.dependency 'AFNetworking' 

使用框架依赖,则使用此组件的时候自动导入第三方库

划分子组件

随着组件不断扩大,如果不划分子组件,我们的工程就会导入一些用不到的业务。因此使用划分子组件,别人在加载你的组件时,就可以根据自己的需求,加载对应的组件代码。

注意:如果使用subspec,别人引入你的框架,代码也会按照subspec划分文件夹结构,podspec不需要描述整个文件夹路径,否则会造成subspec划分的文件夹没有代码。

示例:

SDWebImage.podspec


使用子组件

//Podfile文件描述

pod 'SDWebImage/GIF'


推荐阅读
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
author-avatar
ll平安是福简单是快乐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有