欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

发布一个支持CocoaPods的github库

程序员文章站 2024-03-20 22:49:10
...

制作一个github项目库

新建github代码仓库

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

发布一个支持CocoaPods的github库

  1. 填写仓库名称、描述,选择公私有、README初始化,添加忽略文件、license文件。如下图:

发布一个支持CocoaPods的github库

说明:
- 忽略文件是用来说明此仓库那些文件是不需要管理的,通常是忽略一些中间文件、临时文件。
- 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:推送本地全部未推送的标签

发布一个支持CocoaPods的github库

支持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" => "aaa@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

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

发布一个支持CocoaPods的github库

  1. 执行pod lib lint命令验证.podspec文件是否配置成功

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

如果出现如下错误:
发布一个支持CocoaPods的github库

那么打开Xcode做如下设置:
发布一个支持CocoaPods的github库

如果出现如下错误:
发布一个支持CocoaPods的github库

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

pod lib lint --verbose

如果出现如下错误:
发布一个支持CocoaPods的github库

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

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

直到如下图,验证才通过:
发布一个支持CocoaPods的github库

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

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

如果出现如下错误:
发布一个支持CocoaPods的github库

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

如果出现如下错误:
发布一个支持CocoaPods的github库

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

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

知道如下图所示,才说明上传成功了!
发布一个支持CocoaPods的github库

搜索自己的库

  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' => 'aaa@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'