用cocoapods管理私有库

最近在弄ARKit的封装,就重新找出了去年总结的cocoapods管理私有库,希望可以对大家有帮助。
这里提供的是终端命令行,不做过多的解释.

第一步 创建样板工程

    $ cd 你要放置的位置
    $ pod lib create CPYPrivatePodsDemo

这里可能因为网速问题而克隆的有点慢
创建之后会问你几个问题
1.要使用的语言
2.是否需要样例工程
3.是否需要一个测试框架
4.是否需要基于 View 的测试
5.还有类的前缀
我们这里不对这些选项做深入的探讨,我们只需要一个Example demo代码,前缀是必须的,其他选no.


image.png

完成后在当前目录会出现一个 CPYPrivatePodsDemo 目录,cd 到这个目录中,我们可以看到如下文件


image.png

第二步 把组件相关的类放到工程中

把组件相关的类放到 CPYPrivatePodsDemo/Classes 目录中,这是里之所以要放到这个目录下是因为 Example 工程是中生成 Podfile 文件中指定了这个目录是源文件地址,我们按照默认的走就好。这里我们创建了一个测试文件和一个头文件,导入了这个测试文件,共三个文件放到 Classes 文件夹,如下:


image.png

我们需要更新 Example 工程,在终端中 cd 到 Example 目录下并运行 pod update/install 命令


image.png

CocoaPods 会更新 pod,这里直接从之前的 Classes 文件夹中获取文件更新,完成后我们再看回 Xcode 是上目录树,添加的三个文件出现在了 Development Pods 下


image.png

此时我们可以在测试一下,在 ViewController 导入这个框架,看看能不能创建 CPYTestView


image.png

嗯。。。好像编译通过了,这样就完成一半了,剩下的就是把这个 pod 发布,放到一个大家都可以访问的地方。

第三步 发布组件到 Git 仓库中

上面完成后,我们就可以把创建出来的这个模板创建放到远程的Git仓库中,这里我们在Github 创建仓库中,然后把代码push到远程.
分别两种方法

  1. 第一种是通过SSH上传到仓库
    1.1 配置shh公钥 https://coding.net/help/doc/git/ssh-key.html#部署ssh公钥 (具体方法)
    1.2 打开SSH文件夹的方法
$ open ~/.ssh 

找到shh文件夹下的id_rsa.push
1.3 密钥配置到仓库里
github仓库的话在setting里面有个添加shh


image.png
image.png
  1. 第二种是不通过SSH直接用HTTPS上传
    2种方法的上传命令行都是一样的
$ git addr .
$ git commit -s -m "first commit"
$ git remote add origin git@git.coding.net:yyx_/secondClass.git(HTTPS这里就换成https网址)
$ git push origin master

如果出现一下情况


image.png
直接用
git pull --rebase origin master //其中的原理参考 http://jingyan.baidu.com/article/f3e34a12a25bc8f5ea65354a.html

打开README.md文件,把里面的冲突解决掉,(如果冲突都不会的,那你考虑一下是不是去团队开发一下啦)解决了冲突之后,必须回到Example进行update.
如果在上传不成功,则执行下一句话

git push -u origin master -f

到这里你基本上已经100%成功了,如果有不成功的童鞋不要急,按照他给的问题,一一去查询解决.(个人建议,cocoapods和ruby的版本冲突不会影响,如果你处理到最后还不行,再去考虑版本冲突问题)
Podfile 指定的版本号的话在 pod install 时会找指定的 tag,所以我们这里需要打一个 tag

git tag '0.1.0'
git push origin 0.1.0
#可以不用 (把所有的tag传上去) git push --tags #推送tag到远端仓库

这里的话很多文章说’0.1.0’里面要加上v,个人觉得无所谓.重点是我下面说的.

查询hubgit 的tag 如果tag中没有数据,master上有数据,那么暂时建议
重新再自己的本地创建一个文件夹,从master 上clone下一份代码.再上传tag就成功了.
估计是因为在配置文件存在两个tag库造成冲突.
到这里的话在你的github上的仓库应该在master上和tag上都有你上传的代码了.恭喜你已经成功1/3了

第四步 编辑 podspec 文件

接下来我们要编辑 podspec 文件,在样板工程的根目录下有一个 CPYPrivatePodsDemo.podspec 文件,用文本编辑器打开,需要 summary, homepage 和 source 字段,其中 source 字段是刚刚把源码上传到的 Git 仓库地址,需要用 HTTPS 链接,source_files 字段和默认的一样,不用修改,因为我们之前就是把源文件放到这个目录的

#
# Be sure to run `pod lib lint CPYPrivatePodsDemo.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.newdo|s|
s.name = 'CPYPrivatePodsDemo'
s.version = '0.1.0'
s.summary = 'A private pod test demo'

# 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 longdescription of the pod here.
DESC

s.homepage = 'https://coding.net/u/cielpy/p/CPYPrivatePodsDemo'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file =>'LICENSE'}
s.author = { 'Cielpy'=>'beijiu572@gmail.com'}
s.source = { :git => 'https://git.coding.net/cielpy/CPYPrivatePodsDemo.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

s.ios.deployment_target = '8.0'

s.source_files = 'CPYPrivatePodsDemo/Classes/**/*'

# s.resource_bundles = {
# 'CPYPrivatePodsDemo' => ['CPYPrivatePodsDemo/Assets/*.png']
# }

# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end

最重要的是你的版本要跟tag一样,你的source 字段是刚刚把源码上传到的 Git 仓库地址.这是最重要的.其他的参数就可以参考网上的一些.不会影响我们管理私有库了.

第五步 本地测试 podspec 文件是否可用

用 pod 提供的工具检查 podspec 文件是否合法,命令如下:

pod lib lint CPYPrivatePodsDemo.podspec

如果结果显示如下,说明是合法的


image.png

一下是我遇到的问题.如有相同按以下处理
遇到

echo 3.0 > .swift-version

image.png

然后在验证podspec
如继续弹出有问题


image.png

则在后面加上 --allow-warnings(允许出现警告) —verbose(显示error日志)

pod lib lint CPYPrivatePodsDemo.podspec  --allow-warnings —verbose

遇到这里的时候如果日志又没有,又显示错误.有可能是网络问题.所以我们可以多验证几次.你就成功了(一般第二次就好了)如下图


image.png

然后我们在另建一个工程,运行 pod init 初始化 Podfile,加入 pod 并指定 podspec 路径,这里指定本地的 podspec 文件的路径。

use_frameworks!
target 'PodTest'do
pod 'CPYPrivatePodsDemo',:podspec=>'/Users/xx/Downloads/CPYPrivatePodsDemo/CPYPrivatePodsDemo.podspec'
end

然后执行 pod install ,顺利的话就可以安装成功了。如图


image.png

这一步如果出出问题的话,一般是你在本地podspec文件的配置出错.(恭喜你到这里已经在本地成功了)

第六步

发布 podspec

接下来剩最后一步,这们指定文件绝对路径是不科学的,我们不可能每次更新文件都修改一个 podspec 文件再 pod install 吧,方法就是发布 podspec 文件到远程,既然我们要做私有的 pod,就不能放在公共的仓库里,这里我们新建一个仓库,专门放我们的私有 podspec 文件。

在 coding.net 上另外建一个名字为 spec 的仓库,作为我们私有的 podspec 专用仓库,然后在本地添加一个新的源

| |

<pre>

pod repo add private https://git.coding.net/cielpy/spec.git

</pre>

|

然后发布我们刚才编辑的 podspec 文件

pod repo push private /Users/admin/Desktop/工作/YYXFirstClassTag0.0.0/YYXFirstClass/YYXFirstClassDemo.podspec —verbose —allow-warnings(后面两个作用我在上面已经介绍过了)


image.png

如果出现上图的数据,则已经在远程仓库中.

如果没有出现,可以多调用几次该方法,或者细心的查查自己的spec文件写对了没有

image.png

第七部

剩最后一步了,替换掉原来测试工程中的 Podfile 中指定的 podspec 路径,改成如下的正常的方式:


image.png

不指定版本号会取最新的一个版本,然后 pod update 更新版本的 podspec 并安装,正常的话,得到如下结果。

image.png

到这里就完成了。

因为我们的仓库都是私有的,所以在哪里需要安装的话,需要有对这两个私有仓库的访问权限就好,发布公有的类似,只是发布到了官方的 podspec 仓库。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容