创建cocoaPods私有仓库

转载请注明出处:

http://www.jianshu.com/p/8c9280326ae8

作者:纪小衰

由于公司很多的动态链接库经常更新,经常会造成导入的framework版本不是最新,所以选择创建一个cocoaPods的私有仓库用来同步最新的包,当然对于源码的同步也是支持的。

一、创建私有的git仓库

创建私有仓库的方法有很多,由于github是开源社区,开源的代码比较多,对于私有的仓库是收费的,所以git仓库的存储选择了免费的coding.net,仓库的作用是存放自身的源码和一些用到的第三方库。

先去https://coding.net注册一个账户,注册完毕后在项目选项下新建一个项目。项目创建选项,选择私有可以让git仓库私有,创建拉取权限,如果选择公有则所有的人都可以下载同步代码,我这里使用私有。对于协议的选取,如果是开源的代码,可选MIT协议。对于gitignore的选取按需选择,设置gitignore可以选择git同步的时候忽略哪些文件类型。对于README最好勾选创建说明文件。

创建项目完毕以后,复制下项目对应的git地址。对于项目的拉取可以使用git命令,我这里使用的是smartgit可视化工具。repository->clone拉取远程项目。

二、创建podspec

使用cocoaPods的pod install命令时,其实是从本地的~/.cocoapods/repos/master(默认隐藏)中的对应库寻找对应版本的podspec文件,通过podspec中文件的地址以及信息拉取对应的库。当我们自己创建cocoapods私有库的时候则需要自己创建相对应的podspec文件,并且push到远程的cocoaPods主分支上,当其余的使用者使用cocoaPods更新cocoaPods本地分支时候便能拉取到我们新上传的podspec,然后便能通过podspec文件找到我们上传的库。

首先,我们创建一个自己的podspec文件

打开拉取到的项目,项目中应该包含README文件,开源协议LISENCE。我这边没有选中协议所以只有README文件(.gitignore应该是隐藏了)。创建podspec文件的方式有两种:

命令创建:命令行cd到项目目录下,使用pod命令'pod spec create CTFramework'创建podspec文件,创建完以后就会在工程目录下看见CTFramework.podspec文件,进入修改相关的属性

复制创建:新建文件工程名.podspec文件,然后下面的podspec文件内容复制进去进行修改,注意#开头的为注释行,source_files为指定对应目录下的资源文件,由于我这边只会同步framework而没有.h和.m文件,所以这一行我注释掉了。关于s的属性介绍可参考官方文档https://guides.cocoapods.org/syntax/podspec.html

Pod::Spec.new do |s|

s.name= "CTFramework"

s.version= "0.0.1"

s.summary= "iOS Social SDK based on EaseMob SDK"

s.description= <<-DESC

iOS Social SDK based on EaseMob SDK

DESC

s.homepage= "http://www.jianshu.com/users/49ee0c6dad03/latest_articles"

# s.license= "MIT (example)"

# s.license= { :type => "MIT", :file => "FILE_LICENSE" }

s.author= { "Jirun" => "507704800@qq.com" }

s.platform= :ios

s.source= { :git => "https://git.coding.net/JiRun/CTFramework.git", :tag => "#{s.version}" }

# s.source_files= "Classes", "Classes/**/*.{h,m}"

# s.exclude_files = "Classes/Exclude"

# s.public_header_files = "Classes/**/*.h"

# s.resource= "icon.png"

# s.resources = "Resources/*.png"

# s.preserve_paths = "FilesToSave", "MoreFilesToSave"

# s.framework= "SomeFramework"

s.frameworks = "UIKit", "Foundation","CTCore"

s.ios.vendored_frameworks = "CTCore.framework"

# s.library= "iconv"

# s.libraries = "iconv", "xml2"

s.requires_arc = true

# s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }

# s.dependency "JSONKit", "~> 1.4"

end

修改好podspec文件后,把需要上传到远程仓库的文件拖入到项目目录,由于我这里只想同步动态库,所以这里只拖入了一个动态链接库。把当前的项目通过smartgit push到远程git仓库,并且通过下面命令打上tag,注意tag要和podspec文件中的tag要一致

$ git tag 0.0.1

$ git push --tags

加入文件后的项目目录

制作好本地的podspec文件以后,我们要先本地验证下podspec文件是否可用,使用下面的命令进行验证,如果验证错误会有错误信息,请根据错误信息修改podspec文件,直到显示下面的界面表示通过了本地验证。通过验证以后重新把项目文件通过smartgit push到远程git上

pod lib lint

通过本地podspec文件验证

三、push本地的podspec文件到cocoaPods主分支上

使用下面的命令,把本地的podspec文件push到cocoaPods的远程主分支上

$ pod trunk push --allow-warnings

对于一些警告可以使用命令pod trunk push --allow-warnings去除警告,如果出现错误则需要根据错误提示去修改podspec文件,如果出现下面的界面,那么恭喜,人生中的第一个私有仓库已经构建完毕了 

podspec推送成功

由于在上传成功以后本地的cocoaPods主分支也会更新,所以这个时候我们直接能获取到私有仓库的内容了。如果在另一台pc上,我们需要使用下面的方法更新下本地的cocoaPods主分支才能用过pod search 命令搜索到

$ pod repo update

四、获取仓库中的包

故事写到这里其实已经结束了,接下来的内容为使用cocoaPods的内容。

使用$ pod search CTFramework命令查看本地的cocoaPods主分支上是否已经支持我们新建的私有仓库

出现这个界面说明我们的私有仓库已经支持cocoaPods了

进入到目标工程中创建podfile文件

$ cd /Users/ctzxh/Desktop/test

$ touch podfile

用xcode打开podfile文件,注意不要用mac自身的文本编辑(半角符号莫名变成全角)。写入下面的内容后保存退出

target "test" do

pod "CTFramework"

end

最后使用下面的命令pod安装仓库内容

$ pod install         (如果是第一次安装使用)

$ pod update      (如果是更新使用)

安装或者更新成功以后,你的目录看起来是这个样子,以后打开工程请使用test.xcworkspace

pod以后的工程目录

就到这儿吧~

注:中间遇到的坑

- ERROR | [iOS] unknown: Encountered an unknown error (Simulator iPhone 4s is not available.) during validation.

验证库的时候报错,应该是最新版的xcode中已经没有了iPhone 4s的模拟器导致,可以更新cocoapods的版本来解决问题(sudo gem install -n /usr/local/bin cocoapods)


[!] Authentication token is invalid or unverified. Either verify it with the email that was sent or register a new session.

push的时候报错,需要验证邮箱(pod trunk register 邮箱),然后去邮箱验证下重新执行pod trunk push命令即可


如果podspec已经推送到远程,但是使用pod search命令不能搜到上传的库,可以使用

rm ~/Library/Caches/CocoaPods/search_index.json删除索引,然后再使用pod search,等一会儿就能出现了


pod install 安装库失败 certificate issued for a different hostname, issuer is not trusted

打开终端(实用工具 –>终端),在终端中输入如下命令(注意url更换成你的url地址):

svn ls https://xxxxxx

然后会出现一个服务器证书的提示,根据提示输入 “p”,然后回车,问题就可以得到解决了。之后可能需要输入对应svn的账号或者密码

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

推荐阅读更多精彩内容