上传自己的轮子_CocoaPods

Author Avatar
Rzk 9月 27, 2017
  • 在其它设备中阅读本文章

自己造轮子,上传到CocoaPods

步骤

  1. 造轮子(创建自己的项目) , github 新建 repository , clone 到本地(我的轮子)
  2. 注册trunk,验证
  3. 创建.podspec文件 , 编辑 , 验证
  4. 发布trunk

细节

  1. 造轮子 github 新建项目(网上教程很多,这里就不再赘述了)

  2. 新建项目

    创建新的项目.png

  3. clone
    git clone #本地目录
    
  4. 代码
    cd #进入工程文件 
    git add . 
    git commit -m '0.0.1' 
    git push origin master 
    git tag 0.0.1 
    git push —tag
    
  5. 注册trunk

    • 注册 pod trunk register renzzz@qq.com v587 —verbose
    • 去邮箱复制链接到浏览器访问,就ok了
    • 验证下pod trunk me
      pod trunk me.png

      ps:
      ​Pods:下是已发布的轮子

  6. 创建.podspec文件 , 编辑 , 验证

    1. 初始化pod spec create #项目名字
    2. 编辑.podspec文件
      #
      #  Be sure to run 'pod spec lint R_category.podspec' to ensure this 
      #  is a valid spec and to remove all comments including this before 
      #  submitting the spec.
      #  To learn more about Podspec attributes see 
      #  http://docs.cocoapods.org/specification.html
      #  To see working Podspecs in the CocoaPods repo see
      #  https://github.com/CocoaPods/Specs/
      #
      #  一定要运行 'pod spec lint xx.podspec'来确保.podspec文件是有效的。
      #  并且最后在提交.podspec之前要移除所有注释.
      #  可以了解更过关于Podspec,通过http://docs.cocoapods.org/specification.html
      #  see https://github.com/CocoaPods/Specs/
      
      Pod::Spec.new do |s|
      
      # ―――――――――――――――――  Spec Metadata ――――――――――――――――――――― #
      #
      #  These will help people to find your library, and whilst it
      #  can feel like a chore to fill in it's definitely to your advantage.
      #  The
      #  summary should be tweet-length, and the description more in depth.
      # 
      # ―――――――――――――――――  Spec 元数据  ――――――――――――――――――――――― #
      #
      #  这些将帮助人们找到你的库,同时在成为你的优势之前可能感觉是麻烦的。
      #  概要的长度限制与推特的一样(140),并且这个描述更加深入
      #  s.summary最好不要与s.description一样,会报警告(多写两字不会死)
      
        s.name         = "R_category"
        s.version      = "0.0.1"
        s.summary      = "A short description of R_category."
      
      #  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!
        
      #  这个描述用来生成标签和改善搜索结果
      #  思考:它做了什么?你为什么要写它?重点是什么?
      #  尽力保持它简短,精炼
      #  在DESC之间写这个描述
      #  最后不要担心缩进。cocoapods将做它。
        
        s.description  = <<-DESC
                   zheshiyigejiandandemiaoshu(这是一个简单的描述)
                            DESC
                     
      #  主页地址,直接填写我们的仓库地址即可
        s.homepage     = "http://EXAMPLE/R_category"
      #  屏幕截图(不需要关心,直接删除即可)
      #  s.screenshots  = "www.example.com/screenshots_1.gif", 
      #  "www.example.com/screenshots_2.gif"
      
      # ――――――――――――――――――  Spec License  ―――――――――――――――――――― #
      #
      #  Licensing your code is important. See http://choosealicense.com for 
      #  more info.
      #  CocoaPods will detect a license file if there is a named LICENSE*
      #  Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'.
      #
      # ―――――――――――――――――――  Spec 授权  ――――――――――――――――――――――― #
      #
      #  授权你的代码是很重要的。查看http://choosealicense.com得到更多的信息
      #  CocoaPods 如果这里有一个命名为LICENSE*的文件,那么Cocoapods将检测这个授权文件
      #  主要的授权为:'MIT', 'BSD' and 'Apache License, Version 2.0'
        s.license      = "MIT"
      #  s.license      = { :type => "MIT", :file => "FILE_LICENSE" }
      
      # ――――――――――――――――― Author Metadata ――――――――――――――――――― #
      #
      #  Specify the authors of the library, with email addresses. Email 
      #  addresses
      #  of the authors are extracted from the SCM log. E.g. $ git log.
      #  CocoaPods also
      #  accepts just a name if you'd rather not provide an email address.
      #
      #  Specify a social_media_url where others can refer to, for example a 
      #  twitter
      #  profile URL.
        
      # ――――――――――――――――― 作者 元数据  ―――――――――――――――――――――――― #
      #
      #  指定这个库的作者和email地址。
      #  作者的email地址也可以通过 $ git log来提取。
      #  如果你不愿意提供邮箱,CocoaPods也接受仅仅一个名字
      #  指定一个别人可以访问的社交账号,例如推特
      #  s.social_media_url这一项最好不要指定了,因为推特国内无法访问,验证.podsec时,
      #  不通过。
      
      #  填写用户名以及自己的github邮箱
        s.author             = { "lhjzzu" => "1822657131@qq.com" }
      #  Or just: s.author    = "lhjzzu"
      #  s.authors            = { "lhjzzu" => "1822657131@qq.com" }
      #  s.social_media_url   = "http://twitter.com/lhjzzu"
      
      # ――――――――――――――――――― Platform Specifics ――――――――――――――― #
      #
      #  If this Pod runs only on iOS or OS X, then specify the platform and
      #  the deployment target. You can optionally include the target after 
      #  the platform.
        
      # ――――――――――――――――――― 平台的指定 ―――――――――――――――――――――― #
      #
      #  如果你的Pod仅仅运行在iOS或者OS X上,那么要指定platform以及deployment 
      #  target。
      #  一般而言,我们直选择
      #  s.platform = :ios和s.ios.deployment_target = "5.0"
      #  s.platform     = :ios, "5.0"与上面两句话相等
      #  s.platform     = :ios
        s.platform     = :ios, "5.0"
      
      #  When using multiple platforms
      #  s.ios.deployment_target = "5.0"
      #  s.osx.deployment_target = "10.7"
      #  s.watchos.deployment_target = "2.0"
      #  s.tvos.deployment_target = "9.0"
      
      # ――――――――――――――――― Source Location ―――――――――――――――――――― #
      #
      #  Specify the location from where the source should be retrieved.
      #  Supports git, hg, bzr, svn and HTTP.
      #
        
      # ――――――――――――――――――― 资源的位置 ――――――――――――――――――――――――― #
      #
      #  指定将被拉取的资源的位置
      #  支持 git, hg, bzr, svn and HTTP.
      #  http://EXAMPLE/R_category.git 就是我们仓库的地址(一定不要忘了.git)
      #  tag => "0.0.1" 就是我们打的标签
        
        s.source       = { :git => "http://EXAMPLE/R_category.git", :tag => "0.0.1" }
      # ――――――――――――――――― Source Code ――――――――――――――――――――――― #
      #
      #  CocoaPods is smart about how it includes source code. For source 
      #  files
      #  giving a folder will include any swift, h, m, mm, c & cpp files.
      #  For header files it will include any header in the folder.
      #  Not including the public_header_files will make all headers public.
      #
        
      # ――――――――――――――――――― 源码 ――――――――――――――――――――――――――――― #
      #
      #  对于怎样去包含源码,cocoapods是很聪明的。
      #  s.source_files将包含所有的源文件(swift, h, m, mm, c & cpp)
      #  s.exclude_files要排除的文件(一般直接删除即可)
      #  s.public_header_files 指定我们想公开的头文件
      #  如果不含有s.public_header_files,那么我们的.h文件是默认全部公开的。
        s.source_files  = "R_category", "R_category/**/*.{h,m}"
      #  s.exclude_files = "Classes/Exclude"
      #  s.public_header_files = "Classes/**/*.h"
      # ――――――――――――――――――― Resources ――――――――――――――――――――――― #
      #
      #  A list of resources included with the Pod. These are copied into the
      #  target bundle with a build phase script. Anything else will be 
      #  cleaned.
      #  You can preserve files from being cleaned, please don't preserve
      #  non-essential files like tests, examples and documentation.
      #
      # ――――――――――――――――――― 资源 ―――――――――――――――――――――――――――― #
      #
      #  这个Pod包含的一系列的资源。在编译脚本的阶段,它们被复制到这个目标bundle中。
      #  其它的任何资源将被清理。你可以保护文件免于被清理,但是请不要保存不必要的文件
      #  例如tests,examples,documentation
      
      #  s.resource  = "icon.png"
      #  s.resources = "Resources/*.png"
      #  s.preserve_paths = "FilesToSave", "MoreFilesToSave"
      
      # ―――――――――――――――――― Project Linking ――――――――――――――――――――#
      #
      #  Link your library with frameworks, or libraries. Libraries do not 
      #  include
      #  the lib prefix of their name.
        
      # ――――――――――――――――――― 项目 链接 ―――――――――――――――――――――――――― #
      #
      #  链接你的Framework和library(系统的Framework,library). 
      #  librarys的指定不包含lib的前缀,例如libxml2.tbd
        
      #  s.framework  = "SomeFramework"
      #  s.frameworks = "SomeFramework", "AnotherFramework"
      
      #  s.library   = "iconv"
      #  s.libraries = "iconv", "xml2"
       
      # ――――――――――――――――――― Project Settings ――――――――――――――――― #
      #
      #  If your library depends on compiler flags you can set them in the 
      #  xcconfig hash
      #  where they will only apply to your library. If you depend on other 
      #  Podspecs
      #  you can include multiple dependencies to ensure it works.
      
      # ――――――――――――――――――― 项目 设置 ――――――――――――――――――――――――― #
      #  如果你的library依赖一个compiler flags。你能设置他们在xcconfig,它们将应用于你
      #  的lib中。
      #  如果你的pods依赖其他的Podspecs,你能够包含多个依赖来确保它工作。
      #  s.requires_arc指定是否为ARC
      #  s.xcconfig做一些配置
      #  s.dependency指定依赖
        
      #  s.requires_arc = true
      #  s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
      #  s.dependency "JSONKit", "~> 1.4"
      end
      
    3. 最终的.podspec文件

      ```
      Pod::Spec.new do |s|
      s.name = “R_category”
      s.version = “0.0.1”
      s.summary = “一个简单的分类扩展.”
      s.description = <<-DESC

            a simple demo
                    DESC
      

      s.homepage = “https://github.com/rensss/R_category"
      s.license = ‘MIT’
      s.author = { “v587” => “renzzz@qq.com“ }
      s.platform = :ios
      s.ios.deployment_target = “5.0”

    s.source = { :git => “https://github.com/rensss/R_category.git", :tag => “0.0.1” }

    s.source_files = “category_Class”, “category_Class/*.{h,m}”

    s.exclude_files = “Classes/Exclude”

    s.public_header_files = “Classes/**/*.h”

    s.requires_arc = true

    s.xcconfig = { “HEADER_SEARCH_PATHS” => “$(SDKROOT)/usr/include/libxml2” }

    s.dependency “JSONKit”, “~> 1.4”

    end

    4. ##### 验证.podspec文件
    

    pod spec lint R_category.podspec –verbose
    如果出现下面的信息,表示验证通过
    R_category.podspec passed validation.
    ```

    ps:
    --vebose:打印细节,可以把执行过程中具体的信息打印出来
    pod spec lint.png
    --allow-warnings 表示忽略警告 当有警告不通过时 添加此参数

  7. 发布trunk

    1. 发布
      ```
      pod trunk push R_category.podspec –verbose
      如果有下面的信息显示,表明push成功
    • Data URL: xxxxxxxx
    • Log messages:
    • May 9th, 23:29: Push for ‘R_category 0.0.1’ initiated.
    • May 9th, 23:29: Push for ‘R_category 0.0.1’ has been pushed (3.41790716 s).
      ```
    1. 搜索
      pod search R_category
      

      ps:
      ​最好停一段时间再搜索
      ​请先更新本地pod库 pod setup 或者 Pod repo update
      ​如果还是搜索不到,请删除search_index.json文件.在这个目录下
      /Users/<你的用户名>/Library/Caches/CocoaPods/
      search_index_json.png

结语

报错时请不要慌张,不要放弃,你终将成功的!

下篇上传自己的轮子-CocoaPods(续)