美文网首页
CocoaPods私有库的搭建

CocoaPods私有库的搭建

作者: 765197250c12 | 来源:发表于2017-02-28 00:04 被阅读135次

    为什么要使用CocoaPods私有库

    常见的第三库我们都会使用CocoaPods 进行管理,我们只需要在Podfile里面写上要引入的第三方库,CocoaPods就会自动的给我们添加进去,免去很多手工操作。

    在一个公司的开发中可能会有基础库,开发好的公共组件,为了便于集成同时为了代码安全可以使用CocoaPods私有库,可以很方便的进行代码集成。

    什么是podspec仓库

    podspec 通俗的说就是一个pod库的身份证,里面有一个pod库的版本,描述等等。
    podspec仓库就是放podspec的,在使用的Cocoapods的时候我们需要一个仓库。

    我们在使用pods公有库的时候,pods会生成~/.cocoapods/repos/master/Specs目录来存放podspec

    搭建podspec仓库

    1.首先在github上创建podspec仓库https://github.com/gurongkang/TestPodsSpecRepo.git
    2.在Terminal中执行下面的命令

     #pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
     #pod repo add TestPodsSpecRepo.git https://github.com/gurongkang/TestPodsSpecRepo.git
    

    执行成功之后会生成如下目录
    ~/.cocoapods/repos/TestPodsSpecRepo

    创建Pod项目工程

    1.在Terminal中输入一些命令

     #pod lib create [项目名]
     $pod lib create TestPod
    

    依次选 Objc Yes Specta Yes Test(前缀自己决定)

    然后生成一个TestPod 工程,在如图所示的目录下

    Snip20170227_1.png

    放入想由Pod进行管理的文件,此处测试放入一个Toast+UIView

    2.在开发模式下测试pod库的代码
    在工程目录下找到Exanple工厂的podfile文件可以看到

    pod 'TestPod', :path => '../'
    

    这个就是加载本地的pod库,执行pod update命令之后,TestPod并没有在Pods目录下,而是在测试目录下,这是因为,podspec文件没有添加到Spec Repo中。测试没有问题继续

    3.将工程提交到git 仓库,并打上相关的tag
    在工程目录下执行下面的命令

    $ git add .
    $ git commit -s -m "初始化TestPod库"
    $ git remote add origin git@github.com:gurongkang/TestPod.git           #添加远端仓库
    $ git push origin master     #提交到远端仓库
    $ git tag -m "first release" "0.1.0" #打上标签,这个很重要
    $ git push --tags     #推送tag到远端仓库
    

    编辑podspec文件

    #
    # Be sure to run `pod lib lint TestPod.podspec' to ensure this is a
    # valid spec before submitting.
    #
    # Any lines starting with a # are optional, but their use is encouraged
    # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
    #
    
    Pod::Spec.new do |s|
      #名称
      s.name             = 'TestPod'
      #版本
      s.version          = '0.1.0'
      #简介
      s.summary          = 'A short description of TestPod.'
    
    # This description is used to generate tags and improve search results.
    #   * Think: What does it do? Why did you write it? What is the focus?
    #   * Try to keep it short, snappy and to the point.
    #   * Write the description between the DESC delimiters below.
    #   * Finally, don't worry about the indent, CocoaPods strips it!
    #介绍
      s.description      = <<-DESC
    TODO: Add long description of the pod here.
                           DESC
    #主页,这里要填写能够访问的地址,要不然通不过验证
      s.homepage         = 'https://github.com/gurongkang/TestPod'
      # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
      #开源协议
      s.license          = { :type => 'MIT', :file => 'LICENSE' }
      #作者
      s.author           = { 'gurongkang' => 'gurongkang@mucang.cn' }
      #项目地址,这里不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS。
      #这里的s.source须指向存放源代码的链接地址,而不是托管spec文件的repo地址
      s.source           = { :git => 'https://github.com/gurongkang/TestPod.git', :tag =>  "0.1.0" }
      # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
      #支持的平台及版本
      s.ios.deployment_target = '8.0'
      #代码源文件地址,**/*表示Classes目录及其子目录下所有文件,如果有多个目录下则
      #用逗号分开,如果需要在项目中分组显示,这里也要做相应的设置
      s.source_files = 'TestPod/Classes/**/*'
      
      # s.resource_bundles = {
      #   'TestPod' => ['TestPod/Assets/*.png']
      # }
    
      # s.public_header_files = 'Pod/Classes/**/*.h'
      #所需的framework,多个用逗号隔开
      # s.frameworks = 'UIKit', 'MapKit'
      #依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency
      # s.dependency 'AFNetworking', '~> 2.3'
    end
    

    编辑完成之后,需要验证是否可以使用,在命令行中执行

    $ pod lib lint
    

    验证通过显示TestPod passed validation.

    本地测试TestPod.podspec

    可以将Example工程目录中的Podfile文件改为

    pod 'TestPod', :path => '../TestPod.podspec'
    

    就可以进行本地测试

    向Spec Repo提交podspec

    测试文件没有问题我们就可以把TestPod.podspec提交到远程Spec Repo仓库中

    进入TestPod根目录

    执行下面的命令

    # pod repo push [Repo名] [podspec 文件名字]
    pod repo push TestPodsSpecRepo TestPod.podspec --allow-warnings
    
    Validating spec
     -> TestPod (0.1.0)
        - WARN  | source: The version should be included in the Git tag.
        - WARN  | xcodebuild:  TestPod/TestPod/Classes/Toast+UIView.m:257:43: warning: 'sizeWithFont:constrainedToSize:lineBreakMode:' is deprecated: first deprecated in iOS 7.0 - Use -boundingRectWithSize:options:attributes:context: [-Wdeprecated-declarations]
        - NOTE  | xcodebuild:  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.2.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIStringDrawing.h:70:1: note: 'sizeWithFont:constrainedToSize:lineBreakMode:' has been explicitly marked deprecated here
        - WARN  | xcodebuild:  TestPod/TestPod/Classes/Toast+UIView.m:274:47: warning: 'sizeWithFont:constrainedToSize:lineBreakMode:' is deprecated: first deprecated in iOS 7.0 - Use -boundingRectWithSize:options:attributes:context: [-Wdeprecated-declarations]
        - WARN  | xcodebuild:  TestPod/TestPod/Classes/Toast+UIView.m:24:22: warning: unused variable 'CSToastOpacity' [-Wunused-const-variable]
    
    Updating the `TestPodsSpecRepo' repo
    
    Already up-to-date.
    
    Adding the spec to the `TestPodsSpecRepo' repo
    
     - [Add] TestPod (0.1.0)
    
    Pushing the `TestPodsSpecRepo' repo
    
    To https://github.com/gurongkang/TestPodsSpecRepo.git
       34eb222..b691418  master -> master
    

    提交成功,这时查看远端的TestPodsSpecRepo也有更新

    使用制作好的Pod

    在项目中使用

    相关文章

      网友评论

          本文标题:CocoaPods私有库的搭建

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