转载请注明出处:
由于公司很多的动态链接库经常更新,经常会造成导入的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
三、push本地的podspec文件到cocoaPods主分支上
使用下面的命令,把本地的podspec文件push到cocoaPods的远程主分支上
$ pod trunk push --allow-warnings
对于一些警告可以使用命令pod trunk push --allow-warnings去除警告,如果出现错误则需要根据错误提示去修改podspec文件,如果出现下面的界面,那么恭喜,人生中的第一个私有仓库已经构建完毕了
由于在上传成功以后本地的cocoaPods主分支也会更新,所以这个时候我们直接能获取到私有仓库的内容了。如果在另一台pc上,我们需要使用下面的方法更新下本地的cocoaPods主分支才能用过pod search 命令搜索到
$ pod repo update
四、获取仓库中的包
故事写到这里其实已经结束了,接下来的内容为使用cocoaPods的内容。
使用$ pod search CTFramework命令查看本地的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
就到这儿吧~
注:中间遇到的坑
- 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的账号或者密码