项目经验超棒文集iOS之开发配置

CocoaPods 制作依赖库

2017-03-30  本文已影响6269人  爆炸头的波波安

制作 CocoaPods podspec 文件

我们打算制作一个管理工具类的的依赖库,我们平时使用cocoapods的时候,会在Podfile文件里面写上类似于pod 'SDWebImage', '~>3.8'的脚本,我们就叫它XWToolManager吧,

我相信如果你使用过cocoapods作为类库管理的话,你一定在Podfile文件写过类似于pod 'SDWebImage', '~>3.8'的脚本,它代表着版本号为3.8的SDWebImage库。我们先不考虑版本号的事情,因为我们今天要制作的是一个管理工具类的依赖库,所以暂且命名为XWToolManager。有了名字,那我们先去准备相关文件吧。
1.你知道的cocoapods是托管在github上,所以第一步就是打开你的github,创造一个仓库。

1.1.png

2.接下来我们clone 到本地:

cd "你想要的路劲"
git clone  https://github.com/YYWDark/XWToolManager

然后进入到XWToolManager目录下你会看到LICENSEREADME.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目录来存放相关类和相关图片资源(假如我们当前库需要一张图片)

3.1.png

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操作流程图:

trunk操作流程图.png
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你就可以看到下面信息:

2.2.png
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被发布了,你将不能够再修改它。如果你必须要做一定的修改,请发布一个新的版本。

上一篇下一篇

猜你喜欢

热点阅读