CocoaPods公有库

作者: 槐_df85 | 来源:发表于2018-03-29 15:21 被阅读0次

           最近在学习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   //查询库


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

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

    喜欢点个赞呗!!!

    相关文章

      网友评论

        本文标题:CocoaPods公有库

        本文链接:https://www.haomeiwen.com/subject/swapcftx.html