美文网首页
发布一个支持CocoaPods的github库

发布一个支持CocoaPods的github库

作者: 酒茶白开水 | 来源:发表于2018-06-28 20:31 被阅读0次

    制作一个github项目库

    新建github代码仓库

    1. 登录github,点击右上角+号,接着点击<New repository>创建代码仓库,如下图:
    WechatIMG210.jpeg
    1. 填写仓库名称、描述,选择公私有、README初始化,添加忽略文件、license文件。如下图:
    WechatIMG211.jpeg

    说明:

    • 忽略文件是用来说明此仓库那些文件是不需要管理的,通常是忽略一些中间文件、临时文件。
    • license文件,CocoaPods强制要求所有的Pods依赖库都必须有license文件,否则验证不会通过。license的类型有很多种,详情可以参考网址。在创建github仓库的时候,可以选择MIT类型的license。

    代码实现并实时更新到github仓库

    1. 通过命令git clone <仓库地址>, clone github上的仓库到本地
    git clone https://github.com/jiuchabaikaishui/QSPNetworking.git
    
    1. 实现代码,使用git push命令推送到github仓库
    2. 创建标签并上传github仓库,命令及操作如下:
      git tag:查看tag

    git tag <标签名>:创建标签

    git tag -a <标签名> -m "信息" <commit id>:根据commit id创建标签

    git show <标签名>:查看标签信息

    git push origin <标签名>:推送一个本地标签

    git push origin --tags:推送本地全部未推送的标签

    WechatIMG212.jpeg

    支持CocoaPods

    创建podspec

    1. 在本地仓库根目录下使用pod spec create <工程名称>命令创建podspec文件
    pod spec create QSPNetworking
    
    1. 编辑podspec文件
    Pod::Spec.new do |s|
      s.name         = "QSPNetworking"
      s.version      = "1.0.0"
      s.summary      = "一个使得网络请求更加简单、灵活的iOS网络框架。"
      s.description  = <<-DESC
               这是一个基于AFNetworking再次分装的网络框架,使得iOS中的网络请求更加简单、灵活。
                       DESC
    
      s.homepage     = "https://github.com/jiuchabaikaishui/QSPNetworking"
      s.license      = { :type => "MIT", :file => "LICENSE" }
      # s.license      = { :type => "MIT", :file => "FILE_LICENSE" }
      s.author             = { "jiuchabaikaishui" => "781849568@qq.com" }
      s.platform     = :ios
      s.source       = { :git => "https://github.com/jiuchabaikaishui/QSPNetworking.git", :tag => "#{s.version}" }
      s.source_files  = "QSPNetworking", "QSPNetworking/**/*.{h,m}"
      s.requires_arc = true
      s.dependency "AFNetworking", "~> 3.2.0"
    
    end
    
    

    完成上面所有操作,目前本地仓库根目录如下:

    屏幕快照 2018-06-27 上午11.52.29.png
    1. 执行pod lib lint命令验证.podspec文件是否配置成功

    在执行pod lib lint验证命令的时候,打印出了任何warning或者error信息,验证都会失败!如果验证出现异常,打印的信息会很详细,可以根据对应提示做出修改。

    如果出现如下错误:


    WechatIMG213.jpeg

    那么打开Xcode做如下设置:


    WechatIMG214.jpeg

    如果出现如下错误:


    WechatIMG215.jpeg

    那么添加--verbose的参数,执行命令如下:

    pod lib lint --verbose
    

    如果出现如下错误:


    WechatIMG216.jpeg

    执行命令pod lib lint 文件名称.podspec --use-libraries --allow-warnings如下:

    pod lib lint QSPNetworking.podspec --use-libraries --allow-warnings
    

    直到如下图,验证才通过:


    WechatIMG217.jpeg

    建议:pod lib lint这条命令后面跟着--verbose的参数(能看到具体的出错信息),除此之外,这条命令还可以跟其他参数,例如 --allow-warnings 是否允许警告,在用到第三方框架的时候,有的时候是自带会有warmings的代码,用这参数可以屏蔽警告如果一切正常。

    1. 验证通过后,执行上传命令pod trunk push 文件名称.podspec,上传到CocoaPods官方仓库中,如果有新的tag版本的话也是通过该命令进行上传新的版本到Cocoapods的。
    pod trunk push QSPNetworking.podspec
    

    如果出现如下错误:


    WechatIMG218.jpeg

    那么执行注册命令pod trunk register '邮箱' '用户名' --description='电脑描述'。然后会收到一封邮件,点击邮件中的链接就行。可以通过pod trunk me命令查看个人信息。

    如果出现如下错误:


    WechatIMG219.jpeg

    那是因为在验证.podspec文件的时候加上了参数,上传也同样需要加上参数,调整上传命令如下:

    pod trunk push QSPNetworking.podspec --use-libraries --allow-warnings
    

    知道如下图所示,才说明上传成功了!


    WechatIMG220.jpeg

    搜索自己的库

    1. 执行pod search QSPNetworking,忽然发现提示如下:

    [!] Unable to find a pod with name, author, summary, or description matching QSPNetworking

    不要慌,执行命令rm ~/Library/Caches/CocoaPods/search_index.json,在执行pod search QSPNetworking命令,发现真的可以搜到了。

    附录

    podspec文件属性说明

    1. 必要属性
      //项目名
      s.name ='HycProject'
      //版本号
      s.version ='1.0.1'
      //license文件的类型
      s.license = 'MIT'
      //简单描述
      s.summary = 'ATest in iOS.'
      //项目的getub地址,只支持HTTP和HTTPS地址,不支持ssh的地址
      s.homepage ='https://github.com/hyc603671932/HycProject'
      //作者和邮箱
      s.authors = {'HouKavin' => '603671932@qq.com' }
      //git仓库的https地址
      s.source = { :git=> 'https://github.com/hyc603671932/HycProject.git', :tag =>s.version}
      //是否要求arc(有部分非arc文件情况未考证)
      s.requires_arc = true
     //在这个属性中声明过的.h文件能够使用<>方法联想调用(这个是可选属性)
      s.public_header_files = 'UIKit/*.h'
      //表示源文件的路径,这个路径是相对podspec文件而言的。(这属性下面单独讨论)
      s.source_files ='AppInfo/*.*'
      //需要用到的frameworks,不需要加.frameworks后缀。(这个没有用到也可以不填)
      s.frameworks ='Foundation', 'CoreGraphics', 'UIKit'
    
    1. 可选属性
      //详细介绍
      s.description = "详细介绍"
      //支持的平台及版本
      s.platform     = :ios, '7.0' 
      //最低要求的系统版本
      s.ios.deployment_target= '7.0'
      //主页,需填写可访问地址
      s.homepage = "https://coding.net/u/wtlucky/p/podTestLibrary"
      //截图                      
      s.screenshots     = "www.example.com/screenshots_1"
      //多媒体介绍地址
      s.social_media_url = 'https://twitter.com/<twitter_username>'  
      //效果和s.public_header_files的相同,只需要配置一种
      s.ios.public_header_files = 'URS/URSAuth.h'
      //不常用,所有文件默认即为private只能用import"XXX"调用
      s.ios.private_header_files 
      #依赖关系,该项目所依赖的其他库
      s.dependency 'AFNetworking', '~> 2.3'
      //可拥有多个dependency依赖属性   
      s.dependency 'JSONKit', '~> 1.4' 
    
      //动态库所使用的资源文件存放位置,放在Resources文件夹中
      s.resource_bundles = {
        'Test5' => ['Test5/Assets/*.png']
      } 
      //资源文件(具体使用带考证)
      s.resources = 'src/SinaWeibo/SinaWeibo.bundle/**/*.png' 
      //建立名称为Info的子文件夹(虚拟路径)
      s.subspec 'Info' do |ss| 
      //应该和s.subspec作用相同(未考证)
      s.default_subspec
    
    1. source_files属性
    //下载AppInfo文件夹下的所有文件,子文件夹不识别
    s.source_files ='AppInfo'
    //下载AppInfo目录下所有格式文件
    s.source_files ='AppInfo/*.*'
    **/*表示Classes目录及其子目录下所有文件
    s.source_files = 'AppInfo/**/*'
    
    
    //下载HycProject文件夹下名称为AppManInfo和AppWomanInfo的共4项文件
    s.source_files ='HycProject/App{Man,Woman}Info.{h,m}'
    //目标路径下的文件不进行下载
    s.ios.exclude_files = 'AppInfo/Info/json'
    

    相关文章

      网友评论

          本文标题:发布一个支持CocoaPods的github库

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