CocoaPods公有库

       最近在学习CocoaPods公有库、本地私有库远程私有库,其中遇到了许多问题,怕过后又忘记了,所以记录下来帮助自己也帮助他人少走弯路。做iOS 3年多未写过什么文章,感觉自己都对不起自己的技术了,新手第一次写文章,大神不要喷我。现在面试听说要求很多,都要GitHub有开源项目,有博客分享过技术文章...,生活不易呀,为了生存。    

       这文章先说说CocoaPods公有库,接下来的文章就讲讲本地私有库远程私有库。啥叫CocoaPods公有库?比如我们经常用到第三方库AFNetworking、SDWebImage、MBProgressHUD,本人理解的CocoaPods公有库就是把自己做好的库、项目功能模块上传到开源仓库,上传CocoaPods的开源索引库repo,通过CocoaPods管理自己的库或者模块。这样管理项目就方便了,直接用CocoaPods安装即可。

一、安装cocoapod或更新cocoapods

需要安装新版的cocoapods,旧版的cocoapods可能不支持,会导致下面的步骤出错,所以先要更新cocoapods。我是用最新的1.5.0 beta版,如图:


我这里就不说安装cocoapods或者更新cocoapods了,请大家网上搜一下教程。

更新cocoapods的简单步骤:

$ sudo gem update --system// 先更新gem;

$ sudo gem install cocoapods// 安装cocoapods

$ pod setup//设置

如果gem升级失败,可能是ruby版本过低导致的,安装RVM来升级ruby。

二、创建远程仓库与本地代码关联

先在GitHub上创建新项目,这里我就直接用例子了,如图所示:

       这里用的是选择公有库,私有的要钱的,最好添加ignore和证书license,证书在后面用到,可以去掉警告。创建成功项目里就只有ignore和license,选择地址clone项目到桌面。

      cd到桌面,或者你想要的文件夹,clone项目到本地。

       打开刚才clone的文件夹,我这里就直接用库,不带demo的,如果你们想要带demo的话也是一样的道理,只是路径填好就行了。一般在库里面创建Classes文件夹,名称随意,.podspec的资源路径填好就没问题,然后把你的库或者模块放在Classes文件夹里面,我就用我自己做的一个库,如图:

      我这边就把远程库和本地代码关联了,只是没有把代码上传带远程仓库,你们也可以直接在本地创建库名,然后通过命令 git remote add origin 远程仓库地址 关联远程仓库 ,这我就不示范了。

三、创建.podspec文件和修改.podspec文件的内容

       接着cd到库,命令执行,$ pod spec create PublicLib // PublicLib是你的库名称,这里创建.podspec文件,这个文件就是最重要的。你再去看看你的库是不是多了一个.podspec文件,如图:

      打开.podspec文件,通过xcode打开,修改相应的内容,想详细了解更多的.podspec文件内容,请看官网介绍:Specs and the Specs Repo。把不需要的删除,修改完后如图:

        .podspec文件内容那么多,为啥就只剩这一点点了,#开头的是注释的,用不到的,看着有点乱,所以就删了。

s.name一般不需要修改,它对应.podspec文件的名字,如果不相同就会报错;

s.version是你库的版本号;

s.version库简介;

s.description库描述,这个库描述一定要比简介长;

s.homepage远程仓库的主页,对应你项目库的主页,不是项目地址,不带.git后缀的;

s.license是证书,刚开始创建远程项目时选择的;

s.author作者联系名和邮箱;

s.platform支持的平台,这个必须要的,要不会包错,包没有找到头文件或者没有找到UIKit;

s.source资源的地址和tag,这里的地址是库的地址,带.git的,tag要对应远程的tag;

s.source_files资源文件,通过这路径找到对应的文件;

s.public_header_files暴露的.h文件,用到静态库;

s.requires_arc是否支持ARC;

s.ios.vendored_libraries静态库路径,我这里用到了静态库。

         这里如果没有填写正确,会遇到很多坑,文件路径一定要填写好,如果我这里不是直接Classes文件夹,而是Classes文件夹在Lib文件里面,Lib文件是跟.podspec文件同目录的,那么路径就要Lib/Classes/**/;还有这里你有没有发现我的静态库.a文件跟.h文件名字不一样,那是我后来改的,如果用到了系统外的就要以lib开头的.a,所以我就在原来的基础上更改了。这是我查了很久资源才知道的,当时一直报错。。。

温馨提示:

       .podspec文件的内容配置要根据你的项目库来填写,里面还有许多我没有用到的,比如资源库、依赖第三方的库、frame框架、系统的库等等。这些都需要你们到官网看看介绍,或者看其他人的介绍,这我就不一一介绍了。

这些在别人文章找到的:

vendored_frameworks:配置需要引用的非系统框架

写法:vendored_frameworks ='Frameworks/LibFramework.framework'

frameworks:配置依赖的系统框架

写法:frameworks ='AVFoundation','CoreGraphics','Security','SystemConfiguration'

vendored_libraries:配置需要引用的非系统静态库(要注意,这里的.a静态库名字必须要带lib前缀,如果引用的静态库名字没lib前缀会导致编译报错,只需要重命名加上即可

写法:vendored_libraries ='Classes/libQYHKeyBoardManager.a'

libraries:配置依赖的系统库(要注意,这里的写法需要忽略lib前缀

写法:libraries ='c++','sqlite3','stdc++.6.0.9','z'

resources:配置资源文件(.bundle,.png,.txt等资源文件,这些资源文件会被放到mainBundle中,要注意避免发生命名重复的问题

写法:resources ='Resources/QYHKeyBoard.bundle'

resource_bundles:配置指定bundle的资源文件(可以解决resources导致的命名冲突问题

写法:resource_bundles = {'QYHKeyBoardBundle'=> ['Resources/QYHKeyBoard.bundle'],}

dependency:依赖的三方库

写法:dependency 'AFNetworking','~>3.1.0'

四、把本地代码上传到远程仓库和打tag版本

配置好.podspec文件,接着就是把代码上传到远程仓库,通过

    $ git add . ;  

    $ git commit -m “XX”  ; 

    $ git push。

打tag,打的tag一定要对应版本号,因为.podspec文件配置已经写好跟版本号一样的,通过

    $ git tag '0.0.1' ; 

    $ git push --tags;

如图所示:


五、注册Cocoapods账号

       可以先查看你本机有没有注册过Cocoapods账号,通过 $ pod trunk me ,如果没有信息就证明没有注册过,需要注册。输入$ pod trunk register 邮箱地址 ‘用户名’ --description='描述信息' 注册,然后在你注册的邮箱收到邮件,打开邮件复制链接打开网页激活验证注册,然后跳到pod官网提示pod trunk push。

    $ pod trunk me //查看有没有注册,有的话就是相关的注册账号的信息

    $ pod trunk register  邮箱地址  ‘用户名’ --description='描述信息'  //注册Cocoapods账号

    $ pod trunk push xx.podspec --allow-warnings //提交到pod,最后用到

如图是本人自己操作的,pod trunk me有显示库,是我之前弄的。



六、验证pod是否能通过

上传代码后,然后验证pod是否能通过:

    $ pod lib lint   本地验证 

    $ pod spec lint  本地和远程验证

    $ pod lib lint --verbose 显示详细的检测过程,出错时会显示详细的错误信息

    $ pod lib lint --allow-warnings  允许警告,用来解决存在警告导致不能通过校验的问题

如果出现绿色字passed validation就是验证通过,如图所示:

七、提交pod和检查库

pod验证通过了,就接着执行$ pod trunk push xx.podspec --allow-warnings,等几分钟,结果报错了。

        pod上面已经有相应的名称了,所以要更改名称了。我目录的文件夹和.podspec文件名和.podspec文件里面的s.name都全部更改了,要不会报错,如图:

这次成功了,如果所示:

再执行$ pod trunk me 可以看到自己的信息,包括自己的库,如上图所示。

然后通过搜索库看能不能搜索出来,$ pod search XX ,结果搜不出来,因为是pod的缓存问题,是从缓存的repo搜索的。把缓存删除了,通过$ rm ~/Library/Caches/CocoaPods/search_index.json 把缓存删掉,再$ pod search XX搜重新从网上搜索缓存下来。如图,如果能搜到就成功了,直接就可以用pod 安装管理了。

    $ pod search XX    //搜索库

    $ rm ~/Library/Caches/CocoaPods/search_index.json  //删除pod的缓存

八、版本更新

版本更新跟之前的步骤差不多,这就简单说一下步骤:

    1.修改.podspec文件中的版本号;

        s.version      = "0.0.2" //修改0.0.2版本,不能是之前的版本,要不提交不成功

    2.上传到远程仓库;

        $ git add . ;  

        $ git commit -m “XX”  ; 

        $ git push。

    3.打tag并上传;

        $ git tag '0.0.2' ;    

        $ git push --tags;

    4.验证pod并提交到pod。

         $ spec repo    //查询repo

         $ pod spec lint --allow-warnings    //远程本地pod验证

         $ pod trunk push  PublicLibQiuyh.podspec --allow-warnings   //提交pod

         $ pod search PublicLibQiuyh   //查询库


第一次写文章,用了好久的时间,不过有点成就感,嘻嘻!!!

下次就是写本地私有库远程私有库了...

喜欢点个赞呗!!!

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

推荐阅读更多精彩内容