CocoaPods 制作依赖库
制作 CocoaPods podspec 文件
我们打算制作一个管理工具类的的依赖库,我们平时使用cocoapods的时候,会在Podfile文件里面写上类似于pod 'SDWebImage', '~>3.8'
的脚本,我们就叫它XWToolManager吧,
我相信如果你使用过cocoapods作为类库管理的话,你一定在Podfile文件写过类似于pod 'SDWebImage', '~>3.8'
的脚本,它代表着版本号为3.8的SDWebImage库。我们先不考虑版本号的事情,因为我们今天要制作的是一个管理工具类的依赖库,所以暂且命名为XWToolManager
。有了名字,那我们先去准备相关文件吧。
1.你知道的cocoapods是托管在github上,所以第一步就是打开你的github,创造一个仓库。
2.接下来我们clone 到本地:
cd "你想要的路劲"
git clone https://github.com/YYWDark/XWToolManager
然后进入到XWToolManager
目录下你会看到LICENSE
和README.md
文件。我们在当前目录下现在建立一个为XWToolManagerDemo
的工程,并添加继承NSObject
的类XWToolManager
,方便测试我们添加了一个doSomething方法
#import <Foundation/Foundation.h>
@interface XWToolManager : NSObject
- (void)doSomething;
@end
#import "XWToolManager.h"
@implementation XWToolManager
- (void)doSomething {
NSLog(@"doSomething");
}
@end
3.在XWToolManager
目录下我们添加XWToolManager目录,在XWToolManager目录下添加Classes和Assets目录来存放相关类和相关图片资源(假如我们当前库需要一张图片)
4.准备文件做的差不多了,现在我们需要制作XWToolManager.podspec文件
pod spec create yourPodspecName
我们这里是在在`XWToolManager`目录下输入: pod spec create XWToolManager
打开XWToolManager.podspec文件你主要分为以下模块:
- Spec Metadata (库的相关信息)
- Spec License (许可证相关信息)
- Author Metadata(作者相关信息)
- Source Code (源代码相关信息)
- Resources (资源相关信息)
- Project Linking(工程需要的链接frameworks和library)
- Project Settings(工程相关的配置文件设置)
好了,了解了大概的信息后,我们根据自己所需要的信息作相应的修改,如下图:需要注意的是注释符号是'#'
而不是'//'
。
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.
#
s.name = "XWToolManager" #库名称
s.version = "0.0.1" #版本号
s.summary = "A repository showing how to make podspec file." #简短介绍
# 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 = "http://EXAMPLE/XWToolManager"
# 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'.
#
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.
#
s.author = { "wangyayun" => "wangyayun0629@163.com" }
# Or just: s.author = "wangyayun0629@163.com"
# s.authors = { "wangyayun0629@163.com" => "wangyayun0629@163.com" }
# s.social_media_url = "http://twitter.com/wangyayun0629@163.com"
# ――― 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.
#
s.platform = :ios, "6.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.
#
s.source = { :git => "https://github.com/YYWDark/MMWaveView.git" }
#这里不支持ssh的地址,只支持HTTP和HTTPS,最好使用HTTPS
#正常情况下我们会使用稳定的tag版本来访问,如果是在开发测试的时候,不需要发布release版本,直接指向git地址使用
#待测试通过完成后我们再发布指定release版本,使用如下方式
#s.source = { :git => "https://github.com/YYWDark/XWToolManager.git", :tag => version }
# ――― 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.
#
s.source_files = "XWToolManager/Classes/**/*.{h,m}" #根据路径寻找所需的.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.
#
s.resources = "XWToolManager/Assets/**/*.{png,jpg}" #根据路径寻找所需的图片资源
# s.preserve_paths = "FilesToSave", "MoreFilesToSave"
# ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
#
# Link your library with frameworks, or libraries. Libraries do not include
# the lib prefix of their name.
#
s.frameworks = 'UIKit', 'QuartzCore', 'Foundation' #所需的framework,多个用逗号隔开
# 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.
s.requires_arc = true #是否使用ARC
# s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
# s.dependency "JSONKit", "~> 1.4"
end
现在我们需要验证我们写的podspec的有效性:在终端输入
pod spec lint XWToolManager.podspec
我们看到这样的结果:有一个WARN,并没有错误,但是还是没有通过。
4.1.png
修改一下:
pod spec lint XWToolManager.podspec
成功了:
4.2.png
5.提交代码到github并打上标签
git add .
git commit -m "add podspec file"
git push origin master
git tag 0.0.1
git push --tags
CocoaPods Trunk
trunk操作流程图:
1.你通过
pod trunk me
检测本机是否有trunk账号,没有的话就需要注册了,当然cocoapods 0.33版本以上才支持Trunk你可以通过pod --version
检查版本。下面我们要开始注册了:
pod trunk register *youremail*@gmail.com '*yourname*' --description='say something' --verbose
2.在邮箱里面Confirm your registration后继续pod trunk me
你就可以看到下面信息:
3.接下来我们要做的事trunk push podspec文件:
pod trunk push XWToolManager.podspec
这条命令做了如下三件事:
*验证本地的podspec文件,也可以使用 pod lib lint验证
*上传podspec文件到trunk服务
*将{project}.podspec文件转为{poject}.podspec.json文件
成功后的信息:
3.1.png
pod search 失败的解决方案
1.所有的项目的Podspec文件都托管在https://github.com/CocoaPods/Specs
。执行pod setup
操作,CocoaPods
会将这些podspec索引文件更新到本地的~/.cocoapods/
目录下,pod setup
成功后会生成~/Library/Caches/CocoaPods/search_index.json
文件。所以我们先执行pod setup
2.pod search XXX
还是失败的情况下,删除json文件 rm ~/Library/Caches/CocoaPods/search_index.json
3.然后再pod search XXX
说明
协同工作
为了让其他人也有权限来和你一起建设你的代码,你需要运行下面的命令来赋予别人权限:
XWToolManager是类库的名字,后面是trunk邮箱
pod trunk add-owner XWToolManager wangyayun0629@163.com
我们能否修改一个已经发布的版本
一旦一个版本的pod被发布了,你将不能够再修改它。如果你必须要做一定的修改,请发布一个新的版本。