上传自己的轮子_CocoaPods
自己造轮子,上传到CocoaPods
步骤
- 造轮子(创建自己的项目) , github 新建 repository , clone 到本地(我的轮子)
- 注册trunk,验证
- 创建.podspec文件 , 编辑 , 验证
- 发布trunk
细节
造轮子 github 新建项目(网上教程很多,这里就不再赘述了)
新建项目
clone
git clone #本地目录
代码
cd #进入工程文件 git add . git commit -m '0.0.1' git push origin master git tag 0.0.1 git push —tag
注册trunk
- 注册
pod trunk register renzzz@qq.com v587 —verbose
- 去邮箱复制链接到浏览器访问,就ok了
- 验证下
pod trunk me
ps:
Pods:下是已发布的轮子
- 注册
创建.podspec文件 , 编辑 , 验证
初始化
pod spec create #项目名字
编辑.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
最终的.podspec文件
```
Pod::Spec.new do |s|
s.name = “R_category”
s.version = “0.0.1”
s.summary = “一个简单的分类扩展.”
s.description = <<-DESCa 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
:打印细节,可以把执行过程中具体的信息打印出来--allow-warnings
表示忽略警告 当有警告不通过时 添加此参数发布trunk
- 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).
```
结语
报错时请不要慌张,不要放弃,你终将成功的!