美文网首页iOS备忘录iOS进阶专栏ios进阶
使用CocoaPods管理iOS库---制作pod篇

使用CocoaPods管理iOS库---制作pod篇

作者: PPAbner | 来源:发表于2017-11-25 10:14 被阅读138次
    使用CocoaPods管理iOS库

    我 :“ 2017年还有多久?”

    我 :“ ‘冬天来了,春天还会远吗?’,马上就要步入18年,您说17年还有多久。您就看着吧,下个月到处都是17年年终总结!”

    I'sorry,进入正题

    我个人写本文的目的只有一个:让你轻松制作自己的pod。可能是因为我 笨?网上的教程,我看的有点😓(晕),不过最终还是摸索出来了,并且明白了123,so,请允许我以我“笨”的方式来让你轻松。

    第一步:在GitHub上新建一个仓库

    说明:由于自己创建PPKit时没有截图,这里为了说明,新建了PPKit1来截图说明,谅解!

    新建仓库

    第二步:clone项目到本地,并创建PPKit1.podspec文件

    终端之创建PPKit1.podspec
    具体clone与创建.podspec文件的命令如下:
    //2.1(具体路径,看你自己放置)
    cd /Users/peijianbo/Documents/MTTest 
    //2.2 
    git clone https://github.com/chinesemanbobo/PPKit1.git 
    //2.3 (切换到开源库名相同的目录)
    cd /Users/peijianbo/Documents/MTTest/PPKit1
    //2.4 (很重要的第一步,create后面必须是开源库名,此处是PPKit1)
    pod spec create PPKit1
    

    其中最关键的是(请自动替换PPKit1为自己的库名),当然cd对应的文件目录也不要弄错:

    pod spec create PPKit1
    

    等到终端看到如上图绿色文字Specification created at PPKit1.podspec,这一步就成功了。

    第三步:配置PPKit.podspec,尤其是里面的各种目录的.source_files文件要注意

    注意:此处开始,我们再回到PPKit。(如果你自己的库,请替换PPKit为你的库名来阅读)。

    3.1 打开PPKit.podspec文件(推荐用Sublime Text打开),先阅读里面各种#后面的注释说明,尤其有必要读读开头的3行注释

    此处,为什么觉得很有必要读读开头的3行注释,都是自己血与泪的教训!我自己当时直接忽略这些注释,一心急着想搞定,结果,折腾很久,后头再看注释,才明白好多,然后慢慢修改,才OK的。不过,你也可以不看,说了让你轻松

    下面的是开头的3行注释,容我简单翻译与介绍下:

    //1.
    Be sure to run `pod spec lint PPKit.podspec' to ensure this is a valid spec and to remove all comments including this before submitting the spec.
    //2.
    To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html
    //3.
    To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/
    
    1. 在你提交PPKit.podspec文件到CocoaPods前,务必要在命令行运行 pod spec lint PPKit.podspec 来确保.podspec有效,并且删除所有的注释,包括这句(Be sure ... submitting the spec.)。
    2. 你可以在http://docs.cocoapods.org/specification.html看到更多关于podspec的属性的信息。
    3. 你可以在https://github.com/CocoaPods/Specs/上查看当前都有那些有效的、可以用的Pods

    上面第3条,你也可以点开看一看,保证你有收获,如下:

    点开后,在This repository里输入AFNetworking,然后摁Enter键搜索,你会看到下图,先别惊奇(至于我在下图说的,'本地也有',就不上图了):

    CocoaPods的秘密(原理)

    看到这,如果你的项目用到了CocoaPods,有没有一种“噢...,原来是这样的”柳暗花明又一村的感觉,如果你有,你NB;如果没有,没有就算了,你更要认真看下去!反正我有。嘿嘿!

    放大招的时候来了:CocoaPods说白了,就是帮我们管理第三方or自己的库;而它不过也是一个.xcodeproj工程。只不过,它是专门管理第三方or自己的库的工程,而它的工作原理就是:你把.podspec文件制作好,然后trunk push (后面后讲到)给它,它再把.podspec文件保存为.podspec.json文件放到GitHub,你需要的话,它通过这个.podspec.json把GitHub上对应的开源库的文件下载下来,放到你的工程里。至此,OK。

    说了这么多,再来张图,证实下,我们继续讲pod库的制作,图如下(不信也不行):

    解密CocoaPods原理

    3.2 修改PPKit.podspec文件,删除里面所有的注释,然后再修改。下面给出PPKit.podspec以便参考,注释我已经加进去了(如果你发布的话,最好把注释都去掉,此处只是为了说明才保留注释的),如下:

    Pod::Spec.new do |s|
    
      #开源库的名字
      s.name         = "PPKit"   
      #开源库当期版本
      s.version      = "0.0.6"   
      #开源库概述(打开GitHub能看到的描述)
      s.summary      = "开发中常用的自定义控件、开发经验、开发bug记录,常用宏、categories等封装,不再每个项目都手动配置,用Pod统一管理。"    
      #开源库描述 (这个描述会被用来生成开源库的标签和提高被搜到,必需写在中间一行,只要在中间一行,不需要考虑缩进)
      s.description  = <<-DESC
                       开发中经常从A项目copy一些代码(比如常用的宏、category等)到B项目,A更改了一个category,B又要改动;B更改了一个category,A也要改动,不方便同步,就容易出差错,所以,考虑用Pod来管理。
                       DESC
    
      #可以是开源库的GitHub地址,也可以是你自己的网址等
      s.homepage     = "https://github.com/chinesemanbobo/PPKit"
      #我这里是参靠网上的一种写法,不会报警告,也可以直接 s.license = 'MIT'
      s.license = { :type => 'MIT', :text => <<-LICENSE
             Copyright PPAbner 2016-2017
              LICENSE
          }
      #开源库作者
      s.author             = { "chinesemanbobo" => "chinesemanbobo@163.com" }
      #开源库作者的社交链接(此处我放的是微博)
      s.social_media_url   = "https://weibo.com/5366568018/profile?rightmod=1&wvr=6&mod=personnumber&is_all=1"
    
      #开源库支持的平台(暂时没考虑tvOS、OSX等)
      s.platform     = :ios
      #开源库最低支持
      s.ios.deployment_target = "8.0"
    
      #VIP 开源库GitHub的路径与tag值,GitHub路径后必须有.git,tag实际就是上面的版本
      s.source       = { :git => "https://github.com/chinesemanbobo/PPKit.git", :tag => s.version }
    
      #VIP 开源库资源文件 (我自己总结:每个文件都要有自己的路径,尤其你想目录分的比较详细的话,更具体的说明,看图对比着再说)
      s.source_files = 'PPKit/PPKit.h','PPKit/PPMacros.h'
    
    
      #子目录PPHelpers(2级),PPKit(1级),ss子目录可以随便写,但下面要对应
      s.subspec 'PPHelpers' do |ss|
        #子目录PPRuntimeHelper.h和PPRuntimeHelper.m (3级)
        ss.source_files = 'PPKit/PPHelpers/PPRuntimeHelper.{h,m}'
       
        end
    
      s.subspec 'PPCategories' do |ss|
        ss.subspec 'UI' do |ssui|
            ssui.subspec 'UIScreen' do |ssuiscreen|
                  ssuiscreen.source_files = 'PPKit/PPCategories/UI/UIScreen/UIScreen+EasilySize.{h,m}'
                 end
           end
        end
    
      #开源库头文件
      s.public_header_files = 'PPKit/PPKit.h' 
    
      #开源库依赖库 
      # s.dependency "JSONKit", "~> 1.4"
    
      # 是否支持arc
      s.requires_arc = true
    
    end
    
    

    3.3 .podspec里面的.source_files的简单介绍(主要是语法)

    一个宗旨:库里面每个文件、资源都要有路径指向它。

    部分语法:

    'PPKit/*'  表示匹配所有PPKit目录下文件,不包含子目录的
    'PPKit/PPHelpers/*.{h,m}'  表示匹配PPHelpers所有以.h和.m结尾的文件
    'PPKit/**/*'  表示匹配所有文件(主目录和子目录,其中**相当于省略中间层级)
    

    具体的语法示例及截图,见文章最后面(参考链接之前)。

    第四步:更新PPKit.podspecGitHub

    依次执行下面命令:

    $ git add -A && git commit -m "你的更新说明" 
    //tag值要和.podspce里的version相同,并且必须设置
    $ git tag '0.0.68'   
    $ git push --tags  
    $ git push origin master 
    

    第五步:验证PPKit.podspec是否有效

    pod spec lint PPKit.podspec
    

    如果验证不通过,可以执行pod spec lint PPKit.podspec --verbose查看详细的ERRORWARING提示,根据提示依次解决,然后回到第四步重新来一遍。
    注意:在重新开始之前,我们要删除远程库的tag和本地的tag,命令如下:

     $ git tag -d 0.0.68                   //删除本地tag
     $ git push origin :refs/tags/0.0.68   // 删除远程库tag
    

    直到如下图的验证成功

    PPKit.podspce验证成功

    第六步:提交PPKit.podspecCocoaPods

    pod trunk push PPKit.podspec
    

    如果是第一次提交,需要先执行下面的命令去CocoaPods注册(填写邮箱,收取验证链接,点击链接,就OK):

    $ pod trunk register 邮箱 '昵称' --description=' 这里写描述'
    

    然后再执行:

    pod trunk push PPKit.podspec
    
    trunk成功

    OLA,到此就结束了,赶紧去pod search一下,看有没有!

    遇到的问题s:

    1. pod search PPkit 搜不出

    【方案一】cocoapods search 获取不到最新库的解决方法
    我用的是第二种:执行pod repo update更新本地仓库,再pod search PPkit,就能 搜到了。
    【方案二】执行 pod search PPkit --simple

    --simple
    【方案三】打开~/Library/Caches/CocoaPods,删除search_index.json,该文件会在重新搜索时创建。
    【方案四】执行 pod search PPkit --repo-update

    附:从AFNetworking/PPKit/YYKit看podspec语法。

    研究了自己常用的开源库的文件目录,其中AFNetworking是最完美的,也是我最想要的,而其它的大多数都是,所有.h和.m文件都放在一个目录下,比如:IQKeyboardManager。对比如下图:

    AFNetworking与IQKeyboardManager的pod库目录对比

    参考AFNetworking来说明{}里面的共用以及子目录的设置。

    1. 如下图中间的线:AFURLRequestSerialization.hAFURLRequestSerialization.m以及AFURLResponseSerialization.hAFURLResponseSerialization.m可以写为'AFNetworing/AFURL{Request,Response}Serialization.{h,m}'。所以:{}里面的用逗号(,)隔开,相当于数学中的组合.
    2. Serialization文件不需要指定路径,只需要subspec调用了就好,它处于第2级目录,里面除了上面的4个文件别无其它。但是这4个文件必须指定目录路径,如上面1中所示。

    AFNetworking的Serialization目录解释说明

    PPKit配置与截图说明,如下:记住那个原则:每个文件/路径都要指定对应的路径。

    利用PPKit..podspec说明.source_files目录路径怎么写

    由YYKit学会与理解.exclude_files

    .exclude_files,忽略YYKit下的,重新建文件夹(目录)来管理。

    .exclude_files示例

    参考链接:

    1. Cocoapods: pod search无法搜索到类库的解决办法
    2. 给自己的开源库添加cocopods支持
    3. 让自己的开源项目支持CocoaPods
    4. Cocoapods完整使用篇

    相关文章

      网友评论

        本文标题:使用CocoaPods管理iOS库---制作pod篇

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