美文网首页
iOS 制作私有podSpecs及使用

iOS 制作私有podSpecs及使用

作者: lltree | 来源:发表于2018-10-30 18:41 被阅读19次

前言

安装完成cocoapods执行命令后:

pod setup

cocoapods 中的 specs repository复制到~/.cocoapods/repos/master中,
如何制作属于自己的私有podSpecs?是项目拆分过程中必不可少的经理阶段,建立私有podSpecs将分两个大步骤

第一步:建立自己的podSpecs仓库,用于存储Spec 私有PodSpecs.png

第二步:建立自己的库文件能够使用pod 'lltreeLibrary'命令加载到本地工程中

 platform :ios, ‘8.0’

source 'git@github.com:lltree/LocalPod.git'

target 'TSCube' do

  # Pods for TSCube

    pod 'lltreeLibrary'

end

建立私有podSpecs仓库

使用pod命令创建本地仓库用于存储podSpecs

pod repo add NAME URL [BRANCH]

例如:

pod repo add LocalPod git@github.com:lltree/LocalPod.git

其中:
1 NAME是创建的本地仓库名称类似于上图[私有PodSpecs.png中的LocalPod
2 URL是你存储私有PodSpecs的远程仓库地址:

注意:此处暂时不用,还未创建lltreeLibrary.podspec 文件
仓库建成后后边将会使用命令把 制作好的NAME.podspec推送到远程仓库REPO

pod repo push REPO [NAME.podspec]

例如:

pod repo push LocalPod lltreeLibrary.podspec

创建.podspec文件

如果你的组件还在你冗余庞大的项目中,需要拆分出来或者需要自己从零开始创建一个组件库。
建议使用Cocoapods提供的工具创建组件

    $ pod lib create NAME

      Creates a scaffold for the development of a new Pod named `NAME` according
      to the CocoaPods best practices. If a `TEMPLATE_URL`, pointing to a git
      repo containing a compatible template, is specified, it will be used in
      place of the default one.

Options:

    --template-url=URL   The URL of the git repo containing a compatible
                         template
    --silent             Show nothing
    --verbose            Show more debugging information
    --no-ansi            Show output without ANSI codes
    --help               Show help banner of specified command

其中
1 NAME是创建的库名字
2 --template-url=URL参数为该库的远程仓库网址

例如:制作lltreeLibrary库,
先创建一个文件夹myLib,然后进入该文件夹myLib,执行命令

pod lib create lltreeLibrary

之后会有五个问题:

第一个问题:Objective-C 或者 Swift

第二个问题:Making a Demo Application,如果选是就会在你的Xcode工程中新建一个工程。
(如果你想要一个demo或者你需要一个测试单元在你的工程中,你应该选是)

第三个问题:Choosing a Test Framework,你应该测试你的工程,确保别人可用
(如何选择:如果你不能决定,就选Specta/Epecta)

第四个问题:View-based Testing,会根据你选的测试自动生成一个

第五个问题: 你的前缀是什么。

以下是项目生成的目录结构及相关介绍。


生成的文件.png
工程.png

接下来就是向Pod文件夹中添加库文件和资源,并配置podspec文件,我把myTestView文件共有组件放入Pod/Classes中,然后进入Example文件夹执行pod update命令,再打开项目工程可以看到,刚刚添加的组件已经在Pods子工程下Development Pods/PodTestLibrary中了,然后编辑demo工程,测试组件,我并没有使用提供的测试框架进行测试,这里就先不介绍了。

测试无误后需要将该项目添加并推送到远端仓库,并编辑podspec文件。

通过Cocoapods创建出来的目录本身就在本地的Git管理下,我们需要做的就是给它添加远端仓库,同样去GitHub或其他的Git服务提供商那里创建一个私有的仓库,拿到SSH地址,然后cd到PrivateRep0目录

git add .
git commit -m "Initial Commit of Library"
#添加远端仓库
git remote add origin https://git.oschina.net/wuhongxing/PrivateRepo.git  
#推送到远端仓库
git push origin master

注意:
在使用git push origin master命令时确保远程未有master分支,如果存在master分支 需要先Pull代码再push

因为podspec文件中获取Git版本控制的项目还需要tag号,所以我们要打上一个tag

git tag -m "first release" "0.1.0"
git push --tags     #推送tag到远端仓库

做完这些就可以开始编辑podspec文件了,它是一个Ruby的文件,把编辑器的格式改成Ruby就能看到语法高亮,下面我贴上我的podspec文件,并在后面以注释的形式说明每个字段的含义,没有涉及到的字段可以去官方文档查阅

Pod::Spec.new do |s|
  s.name             = 'lltreeLibrary'               #名称
  s.version          = '0.1.0'                       #版本号
  s.summary          = 'test AAAAAAAAA' # #简短介绍,下面是详细介绍

  s.description      = <<-DESC
test bbbbbbbbbbb
                       DESC

 #主页,这里要填写可以访问到的地址,不然验证不通过,注意必须为http开头,不然无法通过pod lib lint检验通过
  s.homepage         = 'https://github.com/lltree/gclTestPod.git'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = 'MIT'#开源协议
  s.author           = { 'gaochunlei' => 'gaochunlei@58ganji.com' }
 #项目地址,这里不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS
  s.source           = { :git => 'https://github.com/lltree/gclTestPod.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '8.0' #支持的平台及版本

  s.source_files = 'lltreeLibrary/Classes/**/*'
  s.requires_arc = true  #是否使用ARC,如果指定具体文件,则具体的问题使用ARC
  s.frameworks = 'UIKit'
  # s.resource_bundles = {
  #   'lltreeLibrary' => ['lltreeLibrary/Assets/*.png']  #资源文件地址
  # }

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

编辑完podspec文件后,需要验证一下这个文件是否可用,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,不过xcodeWARNING是可以存在的,验证需要执行一下命令

 pod lib lint

看到

 -> lltreeLibrary (0.1.0)

lltreeLibrary passed validation.

时,说明验证通过了,不过这只是这个podspec文件是合格的,此时Pod还是不可以用的,

把podspec推送到远程podSpecs仓库

最后我们需要使用命令

pod repo push LocalPod lltreeLibrary.podspec

把制作好的lltreeLibrary.podspec推送到远程podspec仓库中

例如:


gcl:lltreeLibrary smartlei$ pod repo push LocalPod lltreeLibrary.podspec

Validating spec
 -> lltreeLibrary (0.1.0)

Updating the `LocalPod' repo

Already up to date.

Adding the spec to the `LocalPod' repo

 - [Add] lltreeLibrary (0.1.0)

Pushing the `LocalPod' repo

说明已经成功,我们可以使用pod search lltreeLibrary命令搜索到自己的库了,

-> lltreeLibrary (0.1.0)
   test AAAAAAAAA
   pod 'lltreeLibrary', '~> 0.1.0'
   - Homepage: https://github.com/lltree/gclTestPod.git
   - Source:   https://github.com/lltree/gclTestPod.git
   - Versions: 0.1.0 [LocalPod repo]

注意:有可能出现
[!] Unable to find a pod with name, author, summary, or description matching lltreeLibrary错误
此时需要前往文件

/Users/用户名/Library/Caches/CocoaPods/

删除search_index.json文件,再次执行pod search lltreeLibrary命令后search_index.json文件会自动生成

我们pull私有 podspec 库时可以看到内部文件结构已经发生变化,

.
├── LICENSE
├── LocalPod
│   └── 0.1.0
│       └── lltreeLibrary.podspec
└── README.md

私有podSpec如何使用

创建工程后在podfile中如下添加

 platform :ios, ‘8.0’

#由于是私有库 所有source必须存在
source 'git@github.com:lltree/LocalPod.git'

target 'TSCube' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for TSCube

    pod 'lltreeLibrary'  , '~> 0.1.0'

end

参考
iOS开发之Cocoapods的使用与私有pod的制作

相关文章

网友评论

      本文标题:iOS 制作私有podSpecs及使用

      本文链接:https://www.haomeiwen.com/subject/fmogtqtx.html