美文网首页
Cocoapods安装、制作与使用

Cocoapods安装、制作与使用

作者: RunningDu | 来源:发表于2016-11-23 16:09 被阅读219次

    1、Cocoapods安装

    官方文档 Getting Started
    可参考:cocoapods 卸载,重装,高版本的使用
    但官方文档基本不适合我大中华/(ㄒoㄒ)/~~
    cocoapods降级可参考:
    教你如何cocoapods卸载安装新版本和旧版本

    通过RubyGems安装CocoaPods。
    打开Terminal,执行以下步骤:

    $ sudo gem install cocoapods
    

    执行完这句如果报告以下错误:

    ERROR: Could not find a valid gem 'cocoapods' (>= 0), here is why:Unable to download data from https://rubygems.org/ - Errno::ETIMEDOUT: Operation timed out - connect(2)(https://rubygems.org/latest_specs.4.8.gz)ERROR: Possible alternatives: cocoa pods

    原因是:ruby的软件源rubygems.org使用亚马逊的云服务,被屏蔽了,需要更新一下ruby的源:

    查看当前ruby来源.
    $ gem sources -l 
    $ gem sources --remove https://rubygems.org/
    $ gem sources -a https://ruby.taobao.org/
    $ gem sources -l
    

    如果gem太老,可以尝试升级gem:

    $ sudo gem update --system
    

    升级成功会有以下提示:

    RubyGems system software updated

    执行安装命令:

    $ sudo gem install cocoapods
    或安装制定版本
    $ sudo gem install cocoapods -v 0.39.0
    
    • 若出现以下错误:

    ERROR: While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/pod

    可尝试以下命令安装:

    sudo gem install -n /usr/local/bin cocoapods
    
    • 若提示以下错误:

    ERROR: Error installing cocoapods:activesupport requires Ruby version >= 2.2.2.

    说明ruby版本过低,需要升级:
    使用 ruby -v 查看当前版本
    并通过rvm升级ruby

    1. 安装 RVM
      参考:Mac上更新Ruby
      curl -L get.rvm.io | bash -s stable source ~/.bashrc
      $ source ~/.bash_profile
      测试:rvm -v
      Paste_Image.png
    1. 用RVM升级Ruby
      RubyGems 镜像
      查看当前ruby版本
      ruby -v ruby 1.8.7 列出已知的ruby版本 rvm list known
      安装ruby 1.9.3
      rvm install 1.9.3 若报以下错误 ![Paste_Image.png](https://img.haomeiwen.com/i1186277/462ba749ffb6e54c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 则更新brew: brew update
      最后提示 Already up-to-date
      $ brew outdated (查看哪些软件可以升级)

    brew upgrade (升级可升级软件) brew cleanup (清理无用安装包)
    重新执行: rvm install 1.9.3 重新执行: sudo gem install cocoapods

    最后执行:执行时间较长
    $ pod setup


    Paste_Image.png

    到此cocoapods安装完成,可以search下做测试
    pod search AFNetworking 若提示: 依然还是提示Unable to find a pod with name, author, summary, or descriptionmatching 。。 则需要清理以下缓存: rm ~/Library/Caches/CocoaPods/search_index.json
    之后再次search即可,需等一会才能看到搜索结果

    以下报错:

    Paste_Image.png
    说明没有注册cocoapods,需要进行注册
    pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'
    之后可以查看自己的注册信息:
    pod trunk me
    若要添加新成员维护,则添加
    pod trunk add-owner ARAnalytics kyle@cocoapods.org
    移除成员
    pod trunk remove-owner 邮箱地址

    2. Cocoapods制作

    具体可参考文章1:http://blog.csdn.net/hytzxd/article/details/46652173
    github上传可参考我的这篇文章2:如何mac客户端上传github
    官方文档:公开pod Making a CocoaPod

    私有pod Private Pods

    ① 创建github工程,拷贝文件库
    ② 添加podspec文件
    ③ 提交git库
    ④ 验证spec文件,推送到pod的主干
    ⑤ 更新本地pod文件
    

    ① 在github自己账号下,创建工程并clone到本地,将库文件拷贝至工程

    图1

    ② 添加podspec文件
    podspec语法
    创建podspec文件,文件名跟工程名称相同
    $ pod spec create EGMonitor ## 无需加后缀

    spec配置文件解释:

    #
    #  Be sure to run `pod spec lint EGMonitor.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.new do |s|
    
      # ―――  Spec Metadata  ―――  #
      # sepc文件的名字
      s.name         = "EGMonitor"  
      
      # pod对应版本
      s.version      = "1.0.0"  
      
      #简单的介绍 会显示到pod search中
      s.summary      = "EGMonitor 第二次修改文件."
    
      # 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
      #                DESC
    
      # 主页
      s.homepage     = "https://github.com/ShaochongDu/EGMonitor"   
      # s.screenshots  = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif"
    
      # ―――  Spec License  ―――#
      # 开源协议
      s.license      = "MIT"    
      # s.license      = { :type => "MIT", :file => "FILE_LICENSE" }
    
      # ―――  作者信息  ―――#
      # 作者及邮箱
      s.author             = { "Running Du" => "dushaochong@icloud.com" }   
      # Or just: s.author    = "Running Du"
      # s.authors            = { "Running Du" => "dushaochong@icloud.com" }
      # s.social_media_url   = "http://twitter.com/Running Du"
    
      # ―――  平台信息  ―――#
      # 平台及使用版本
      # s.platform     = :ios
      s.platform     = :ios, "7.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"
    
      # ―――  资源信息  ―――#
      # 资源位置,注意后边的tag ,其实就是他的版本,pods是以git为基础管理的。版本就是tag值了
      s.source       = { :git => "https://github.com/ShaochongDu/EGMonitor.git", :tag => s.version }    
       # 若tag带有前缀 "v" 则tag定义为:
      s.source       = { :git => "https://github.com/ShaochongDu/EGMonitor.git", :tag => "v#{s.version}" }  
    
      # ―――  源代码  ―――#
      # 源代码位置,pod会以这个地址下载需要的文件构建pods
      s.source_files  = "EGMonitor/**/*.{h,m}"
      
      # 不包含资源
      #s.exclude_files = "Classes/Exclude"
    
      #公共的头文件地址
      # s.public_header_files = "AFNetworking/*.h" #静态库时必须有
      
      # ―――  资源信息  ―――# 
      # s.resource  = "icon.png"
      # s.resources = "Resources/*.png"
    
      # s.preserve_paths = "FilesToSave", "MoreFilesToSave"
    
      # ―――  工程链接库  ―――# 
      # 引用系统公有framework:’(.ios).framework’. 用”,”分割. 去掉尾部的”.framework”
      # s.framework  = "SomeFramework"
      # s.frameworks = "UIKit", "AnotherFramework"
    
      # 引用系统静态库:’(.ios).library’。去掉头尾的lib,用”,”分割
      s.library   = "z"
      # s.libraries = "iconv", "xml2"
      
      # 引用自己生成的framework:’(.ios).vendored_frameworks’。用”,”分割 
      # 路径写从.podspec所在目录为根目录的相对路径 ps:这个不要省略.framework
      # s.vendored_frameworks = 'AnalysysSDK/IDFA/*.framework'
    
      # 引用自己生成的.a静态库(必须以lib打头)
      s.vendored_libraries = "libEGMonitor/libEGMonitor.a"
    
      # ――― 工程配置 ――― #
      # 是否是arc模式
      s.requires_arc = true  
    
      # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
      
      # 依赖的第三方类库
      # s.dependency "JSONKit", "~> 1.4"
    
      # ――― 类库依赖 ――― #
      #  组件化中经常用到,将每个功能拆分为一个库,参考[subspec说明](https://www.jianshu.com/p/85c97dc9ab83),如 afnetworking
      s.subspec 'Serialization' do |ss|
        ss.source_files = 'AFNetworking/AFURL{Request,Response}Serialization.{h,m}'
        ss.public_header_files = 'AFNetworking/AFURL{Request,Response}Serialization.h'
        ss.watchos.frameworks = 'MobileCoreServices', 'CoreGraphics'
        ss.ios.frameworks = 'MobileCoreServices', 'CoreGraphics'
        ss.osx.frameworks = 'CoreServices'
      end
      # Podfile中配置:
      # pod 'AFNetworking', '~> 3.0', :subspecs => ["Serialization", "Reachability"]
    
    end
    

    ③ 提交git库

    git add *  # 添加本地git库
    git commit -m 'add tag' #提交git
    git push origin master # push
    
    git tag -a v1.0 -m "version 0.1 released" # 添加标签及备注
    git push origin v1.0/git push --tags # 提交本地所有标签
    
    图3

    ④ 验证spec文件

    根据错误提示来修改
    $ pod lib lint  ## 不需要联网
    或
    $ pod spec lint ## 会联网检查sepc repo并关联tag
    

    -- 首次发布cocoapods需要添加tag: git tag '版本号'
    -- 执行时关闭.xcworkspace文件
    -- 若报错如下图,则检查静态库文件名是否以lib***.a开头(必须以lib开头)


    图5

    把项目推送到spec目录
    $ pod trunk push EGMonitor.podspec
    若执行失败如下图,则更新本地的pod文件:$ pod repo update

    图4

    ⑤ 搜索pod库
    $ pod search EGMonitor
    若提示:Unable to find a pod with name, author, summary, or descriptionmatching 。。
    清理本地缓存,重新search:
    $ rm ~/Library/Caches/CocoaPods/search_index.json

    trunk操作

    $ pod --version
    $ pod trunk deprecate EGMonitor  ##  pods所有版本将失效
    成功后提示:
    [!] No pod found with the specified name.
    
    # 删除指定版本,版本号必须大于1.0。从主干和主规范回购中删除指定的pod版本。一旦删除,这个版本将永远不能再被推送。,图3
    $ pod trunk delete EGMonitor 1.0.0 
    成功后提示:
    [!] No pod found with the specified name.
    
    删除后,需要pod repo一下,重新search
    $ pod repo update
    成功后如 图1
    $ pod search EGMonitor
    以上删除有时需要执行多次不知为何,删除后再次查询如 图2
    
    图1
    图2
    图3

    Cocoapods使用

    官方文档 :
    Using CocoaPods
    pod install vs. pod update

    The Podfile

    Podfile Syntax Reference

    1. 检查是否含有pods文件
    $  pod search AFNetworking
    
    1. 命令行到工程主目录下,新建一个名为Podfile的文件,文件名必须为“Podfile”,该文件的作用是配置依赖库信息,就是告诉CocoaPods去下载和管理哪些依赖库,文件创建好以后,打开文件并加入如下内容
    $  vim Podfile
    

    简易版,复杂版请看官方文档

    platform :ios, ‘7.0’
    target 'EGMonitorDemo' do 
    pod 'EGMonitor' 
    pod 'AFNetworking', '~> 3.0'
    end
    
    1. 安装
      安装前关闭当前工程文件
    在Podfile目录下执行
    $  pod install  ##  次命令回检查specs库并升级较为漫长
    
    可以使用如下命令,跳过specs库检查
    $  pod install --verbose --no-repo-update
    
    查看是否有新版本
    $  pod outdated --verbose --no-repo-update
    
    单独更新某个pod
    $  pod update AFNetworking 
    
    更新所有比当前版本高的pod第三方类库
    $  pod update --verbose --no-repo-update 
    

    完成之后,重新打开.xcworkspace工程即可

    相关文章

      网友评论

          本文标题: Cocoapods安装、制作与使用

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