CocoaPods私有库的搭建

2017-02-28  本文已影响135人  765197250c12

为什么要使用CocoaPods私有库

常见的第三库我们都会使用CocoaPods 进行管理,我们只需要在Podfile里面写上要引入的第三方库,CocoaPods就会自动的给我们添加进去,免去很多手工操作。

在一个公司的开发中可能会有基础库,开发好的公共组件,为了便于集成同时为了代码安全可以使用CocoaPods私有库,可以很方便的进行代码集成。

什么是podspec仓库

podspec 通俗的说就是一个pod库的身份证,里面有一个pod库的版本,描述等等。
podspec仓库就是放podspec的,在使用的Cocoapods的时候我们需要一个仓库。

我们在使用pods公有库的时候,pods会生成~/.cocoapods/repos/master/Specs目录来存放podspec

搭建podspec仓库

1.首先在github上创建podspec仓库https://github.com/gurongkang/TestPodsSpecRepo.git
2.在Terminal中执行下面的命令

 #pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
 #pod repo add TestPodsSpecRepo.git https://github.com/gurongkang/TestPodsSpecRepo.git

执行成功之后会生成如下目录
~/.cocoapods/repos/TestPodsSpecRepo

创建Pod项目工程

1.在Terminal中输入一些命令

 #pod lib create [项目名]
 $pod lib create TestPod

依次选 Objc Yes Specta Yes Test(前缀自己决定)

然后生成一个TestPod 工程,在如图所示的目录下

Snip20170227_1.png

放入想由Pod进行管理的文件,此处测试放入一个Toast+UIView

2.在开发模式下测试pod库的代码
在工程目录下找到Exanple工厂的podfile文件可以看到

pod 'TestPod', :path => '../'

这个就是加载本地的pod库,执行pod update命令之后,TestPod并没有在Pods目录下,而是在测试目录下,这是因为,podspec文件没有添加到Spec Repo中。测试没有问题继续

3.将工程提交到git 仓库,并打上相关的tag
在工程目录下执行下面的命令

$ git add .
$ git commit -s -m "初始化TestPod库"
$ git remote add origin git@github.com:gurongkang/TestPod.git           #添加远端仓库
$ git push origin master     #提交到远端仓库
$ git tag -m "first release" "0.1.0" #打上标签,这个很重要
$ git push --tags     #推送tag到远端仓库

编辑podspec文件

#
# Be sure to run `pod lib lint TestPod.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#

Pod::Spec.new do |s|
  #名称
  s.name             = 'TestPod'
  #版本
  s.version          = '0.1.0'
  #简介
  s.summary          = 'A short description of TestPod.'

# 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
TODO: Add long description of the pod here.
                       DESC
#主页,这里要填写能够访问的地址,要不然通不过验证
  s.homepage         = 'https://github.com/gurongkang/TestPod'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  #开源协议
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  #作者
  s.author           = { 'gurongkang' => 'gurongkang@mucang.cn' }
  #项目地址,这里不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS。
  #这里的s.source须指向存放源代码的链接地址,而不是托管spec文件的repo地址
  s.source           = { :git => 'https://github.com/gurongkang/TestPod.git', :tag =>  "0.1.0" }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
  #支持的平台及版本
  s.ios.deployment_target = '8.0'
  #代码源文件地址,**/*表示Classes目录及其子目录下所有文件,如果有多个目录下则
  #用逗号分开,如果需要在项目中分组显示,这里也要做相应的设置
  s.source_files = 'TestPod/Classes/**/*'
  
  # s.resource_bundles = {
  #   'TestPod' => ['TestPod/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  #所需的framework,多个用逗号隔开
  # s.frameworks = 'UIKit', 'MapKit'
  #依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency
  # s.dependency 'AFNetworking', '~> 2.3'
end

编辑完成之后,需要验证是否可以使用,在命令行中执行

$ pod lib lint

验证通过显示TestPod passed validation.

本地测试TestPod.podspec

可以将Example工程目录中的Podfile文件改为

pod 'TestPod', :path => '../TestPod.podspec'

就可以进行本地测试

向Spec Repo提交podspec

测试文件没有问题我们就可以把TestPod.podspec提交到远程Spec Repo仓库中

进入TestPod根目录

执行下面的命令

# pod repo push [Repo名] [podspec 文件名字]
pod repo push TestPodsSpecRepo TestPod.podspec --allow-warnings
Validating spec
 -> TestPod (0.1.0)
    - WARN  | source: The version should be included in the Git tag.
    - WARN  | xcodebuild:  TestPod/TestPod/Classes/Toast+UIView.m:257:43: warning: 'sizeWithFont:constrainedToSize:lineBreakMode:' is deprecated: first deprecated in iOS 7.0 - Use -boundingRectWithSize:options:attributes:context: [-Wdeprecated-declarations]
    - NOTE  | xcodebuild:  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.2.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIStringDrawing.h:70:1: note: 'sizeWithFont:constrainedToSize:lineBreakMode:' has been explicitly marked deprecated here
    - WARN  | xcodebuild:  TestPod/TestPod/Classes/Toast+UIView.m:274:47: warning: 'sizeWithFont:constrainedToSize:lineBreakMode:' is deprecated: first deprecated in iOS 7.0 - Use -boundingRectWithSize:options:attributes:context: [-Wdeprecated-declarations]
    - WARN  | xcodebuild:  TestPod/TestPod/Classes/Toast+UIView.m:24:22: warning: unused variable 'CSToastOpacity' [-Wunused-const-variable]

Updating the `TestPodsSpecRepo' repo

Already up-to-date.

Adding the spec to the `TestPodsSpecRepo' repo

 - [Add] TestPod (0.1.0)

Pushing the `TestPodsSpecRepo' repo

To https://github.com/gurongkang/TestPodsSpecRepo.git
   34eb222..b691418  master -> master

提交成功,这时查看远端的TestPodsSpecRepo也有更新

使用制作好的Pod

在项目中使用

上一篇下一篇

猜你喜欢

热点阅读