本文主要介绍如何制作私有的Pod库, 以及如何将其发布到远端Pods仓库. 一般公司自己开发的库, 如果涉及到公司的核心技术, 都不会发布到Pods仓库, 公司会将这个库制作成私有Pod库, 放在公司自己的服务器上自己使用, 这就涉及的私有库的制作. 如果公司希望将自己的一项技术对外推广, 一般会将其发布到Pods仓库中和开发者共享.下面将针对如何制作私有的Pod库, 以及如何将其发布到远端Pods仓库做详细阐述.阅读本文需要有一定的git和cocoaPods的使用经验.
制作私有Pods
1, 在github创建自己的仓库
2, 将项目克隆到本地 (git clone 仓库地址)
3, 将需要发布的文件拖入本地仓库
4, 将本地仓库推到远程仓库 add, commit, push
5, 创建tag, 并将tag同步到远程仓库 (参考附件git创建tag的方法)
6, 创建podspec文件 pod spec create PodName
, 并根据要求编辑 .podspec 文件,大致格式如下(此案例是没有设置依赖库的)
1 |
|
7. 编辑完成之后同步到远程仓库, 终端命令如下
1 |
|
8. 校验podspec文件: pod spec lint PodName.podspec --verbose
注意PodName是你自己创建的那个podspec文件的名称
校验会遇到各种问题:
-
警告:
WARN | [iOS] swift_version: The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a
.swift-version
file to set the version for your Pod. For example to use Swift 2.3, run:echo "2.3" > .swift-version
解决方法: 终端运行
echo "4.0" > .swift-version
设置swfit版本
-
错误
ERROR [iOS] xcodebuild: Returned an unsuccessful exit code.
解决方法: 可能是哪个环节出问题了, 将git仓库删掉重新操作一遍, 一般能成功
ERROR | [iOS] file patterns: The source_files pattern did not match any file. |
有可能是源文件的目录没有配置正确, 如果你确定目录配置完全正确, 那么将git仓库删掉重新操作一遍, 一般能成功
9. 在本地使用pod导入私有库的方法:
通过指定源文件(.swift文件或者.h,.a文件)路径的方法安装,
- pod ‘LinkedScroll’, :path => ‘/Users/bochb/Desktop/LinkedScroll/LinkedScroll’
LinkedScroll
为LinkedScroll.podspec
所在的文件夹, 并且项 目源文件也要在这个文件夹中
通过指定.podspec所在路径的方式,(源文件在哪里都可以)
- pod ‘LinkedScroll’, :path => ‘/Users/bochb/Desktop/LinkedScroll/LinkedScroll/LinkedScroll.podspec’
发布到Pods
1. 注册trunk: pod trunk register email 'name' --description='balabala'
, 然后在邮箱验证会收到一封验证邮件点击链接即可完成验证
2. pod trunk me
查看注册信息
3. pod trunk push
发布
删除已经发布到cocoaPods的库:
1 |
|
备注: 更多
pod trunk
命令可以通过pod trunk help
查看
版本升级
修改或者添加文件, 然后将上述步骤重新执行一遍, 只是在打新tag后, 在.podspec文件中要做对应的修改
问题
- 1.发布之后pod search搜索不到自己的库
解决办法:
1 |
|
- 发布之后在cocoapods.org官网无法找到自己的库
解决办法:
1 |
|
- 自己发布的框架, 通过pod导入后不能使用类或者函数
解决办法:
1 |
|
备注: 能够被模块以外的访问的必须使用open或者public, 下面简单说明一下权限的五个关键字
open: 能在任何类访问, 重写或者继承, 全开放.
public: 可以被任何类访问, 但是在其他的模块(module)中不能被重写和继承
模块内是指不需要使用import引用文件就能创建对象, 模块外需要使用import引入文件,才能创建对象
internal: 在整个模块中可以使用
fileprivate: 在整个swift文件(一个swift文件中可以包含多个类, 在这个swift中的所有类中都可以访问, 这是和private的区别)中可以被访问, 重写和继承
private: 只能被本类使用, 包括延展(extension)
附件
git –help: 查看git命令, git tag –help: 查看tag操作相关的命令
git创建tag的方法:
步骤一: git tag v1.0
步骤二: git push origin –tags
删除tag的方法
删除本地tag: git tag -d 0.0.1
删除远程仓库tag: git push origin -d tag 0.0.1
列显已有的标签
列出现有标签的命令非常简单,直接运行 git tag 即可:
1 |
|
我们可以用特定的搜索模式列出符合条件的标签。在 Git 自身项目仓库中,有着超过 240 个标签,如果你只对 1.4.2 系列的版本感兴趣,可以运行下面的命令:
1 |
|
新建标签
Git 使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)。轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。而含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。一般我们都建议使用含附注型的标签,以便保留相关信息;当然,如果只是临时性加注标签,或者不需要旁注额外信息,用轻量级标签也没问题。
含附注的标签 创建一个含附注类型的标签非常简单,用 -a (译注:取 annotated 的首字母)指定标签名字即可:
1 |
|
而 -m 选项则指定了对应的标签说明,Git 会将此说明一同保存在标签对象中。如果没有给出该选项,Git 会启动文本编辑软件供你输入标签说明。
可以使用 git show 命令查看相应标签的版本信息,并连同显示打标签时的提交对象。
1 |
|
我们可以看到在提交对象信息上面,列出了此标签的提交者和提交时间,以及相应的标签说明。
签署标签 如果你有自己的私钥,还可以用 GPG 来签署标签,只需要把之前的 -a 改为 -s (译注: 取 signed 的首字母)即可:
1 |
|
稍后我们再学习如何验证已经签署的标签。
轻量级标签
轻量级标签实际上就是一个保存着对应提交对象的校验和信息的文件。要创建这样的标签,一个 -a,-s 或 -m 选项都不用,直接给出标签名字即可:
1 |
|
查看tag
1 |
|
现在运行 git show 查看此标签信息,就只有相应的提交对象摘要:
1 |
|
验证标签
可以使用 git tag -v [tag-name] (译注:取 verify 的首字母)的方式验证已经签署的标签。此命令会调用 GPG 来验证签名,所以你需要有签署者的公钥,存放在 keyring 中,才能验证:
1 |
|
若是没有签署者的公钥,会报告类似下面这样的错误:
1 |
|
后期加注标签
你甚至可以在后期对早先的某次提交加注标签。比如在下面展示的提交历史中:
$ git log –pretty=oneline
1 |
|
我们忘了在提交 “updated rakefile” 后为此项目打上版本号 v1.2,没关系,现在也能做。只要在打标签的时候跟上对应提交对象的校验和(或前几位字符)即可:
$ git tag -a v1.2 9fceb02 可以看到我们已经补上了标签:
1 |
|
$ git show v1.2
1 |
|
分享标签
默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push origin [tagname] 即可:
1 |
|
错误
1. pod spec lint PodName.podspec --verbose
命令总报如下错误
1 |
|
解决办法: (源文链接)
1 |
|
备注: 如果上述办法不能解决, 请尝试如下方法 解决方法:
1 |
|