发布一个支持CocoaPods的github库

制作一个github项目库

新建github代码仓库

  1. 登录github,点击右上角+号,接着点击创建代码仓库,如下图:

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创建标签

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" => "[email protected]" }
  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' => '[email protected]' }
  //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'

猜你喜欢

转载自blog.csdn.net/jiuchabaikaishui/article/details/80848791