前言
安装完成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,会根据你选的测试自动生成一个
第五个问题: 你的前缀是什么。
以下是项目生成的目录结构及相关介绍。


接下来就是向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
中,不过xcode
的WARNING
是可以存在的,验证需要执行一下命令
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
网友评论