使用cocoapods管理svn路径下库文件

cocoapods是什么?别问我

现在cocoapods的普及无需多说,本文也不详述它的心路历程,有兴趣的读者可以自行Google相关资料。好了闲话不多说,进入正题。

都在用的东西能不能更好用?

当我们首次使用cocoapods管理工程里面引用的开源库时,那感觉如沐春风、久旱甘霖都不算夸张。但奈何公司使用的是svn管理代码,时间久了,就有一些类似分享的小集成、数据统计的之类的小代码,它们都在svn上,每次新工程需要引用的时候。额,真烦,要拖这么多文件,真烦要引用的库都没说明白。。。

这时候就在想,要是引用公司的代码也能像Github上一样就爽了,今天和大家一起学习下吧。

其实在cocoapods官网是有说明的,是支持svn的,不光svn,还有其他地方托管的git,本地的代码库都是可以的,说白了source只是一个地址。

使用cocoapods管理svn路径下库文件_第1张图片

我是这么做的!


第一步,把svn的代码check out到本地,cd到该目录下,使用pod命令创建一个podspec文件。

$ pod spec create DemoLibrary

第二步,打开文件,看看里面的东西。

s.name        = "UleNetWork"

s.version      = "1.0"

s.summary      = "apply for new App UleNetWork."

s.description  = <<-DESC

apply for new App UleNetWork.

DESC

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

s.platform    = :ios, "7.0"

s.source      = { :svn => "" }

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

s.exclude_files = "Classes/Exclude"

s.framework  = "Foundation"

# s.frameworks = "SomeFramework", "AnotherFramework"

s.requires_arc = true

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

s.dependency "AFNetworking", "~> 3.1"

s.dependency "JSONModel", "~> 1.2.0"

这个设置是我已经改了的设置,和默认的设置有一些地方不一样,其中name是你的库名,version是版本号,description是要求有必须写点东西的,license的文件可以随便找一个修改下放到目录下,关键的还是source、source_files、exclude_files我待会儿说,framework或frameworks就是库需要引入的framework这个功能是极好的,dependency添加依赖的开源库,也是方便至极。

第三步,source内容

当我们用的svn时候

s.source      = { :svn => "http://svn.baidu.com/baidu/mobileclient/iPhone/BaiduCodeLibrary/DemoLibrary/" }

细心的你应该发现了在默认的时候是有一个tags的存在的,我这里因为我们那个svn没有加这些东西,我就删掉了。

这样做有一个缺点,我们的库用于是获取这个地址下最新的那套代码,这个问题,以后研究下吧。

地址我是瞎写的。

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

当你按照上面的形式操作了,发现你下载下来的代码只是一个空的文件夹,关键就在source_files,这个指定了要Classes文件下的文件,这样做有什么好处么?当然有,试想一下,你的路径是一个完整的工程,你只需要传实用的代码,这样做能够让你的工程不受影响,随意debug。

第四步,这样的路径就是正确的!

使用cocoapods管理svn路径下库文件_第2张图片

好了一切就绪,现在只需要把你的svn刚才的修改上传一下,使用pod install。

第五步,为什么会报错?

Authentication realm:  R&D Source Code Repositories

其实你svn的check out代码的时候需要输入账户和密码,这里可以在终端先随意check out一下代码,就会有缓存,重新再执行下就ok了。

1、checkout

svn checkout svn地址,简写: svn co svn地址

使用cocoapods管理svn路径下库文件_第3张图片

成功了,好爽啊,一起happy吧。

使用cocoapods管理svn路径下库文件_第4张图片

这是test工程的pod文件内容,和podspce文件的svn地址是一样的。


第六步,没有tag管理好不像样

===============================================

补充关于tag设置

===============================================

设置tag其实还是很简单的,我这里使用的是cornrstone管理svn代码。由于的我的文件目录以前是没有这个trunk和tags文件夹设置的,这里呢我需要在DemoLibrary目录下新建一个tags文件夹

使用cocoapods管理svn路径下库文件_第5张图片

然后呢在cornrstone的控制台,选到工程路径注意不是本地的,是svn的,然后选择顶部tag选项。不要忘了在podspce文件里修改你将设置成的版本!

使用cocoapods管理svn路径下库文件_第6张图片

弹出一个框框

使用cocoapods管理svn路径下库文件_第7张图片

使用工程的应用pod文件:

pod'UleNetWork', :svn =>"http://svn.baidu.com/baidu/mobileclient/iPhone/BaiduCodeLibrary/DemoLibrary/",:tag =>"1.0.1"

好了,完美!


----------------------------------------------------------------------------

                                                          20160829 补充

----------------------------------------------------------------------------

当tag版本未改变,修改了本地代码,需要清除pod缓存在本地的内容并且需要将pod file文件中引用该库注释先删除,再添加执行两次pod install,否则不会使用新代码。(~/Library/Caches/CocoaPods/Pods/External)

说明pod在本地有缓存,需要清除,并且只用该工程中的pod移除过之后,再次添加时才会去都去更新。


----------------------------------------------------------------------------

                                               20160913 补充SVN库之间的引用

----------------------------------------------------------------------------

在使用cocoapods的过程中不难发现,有一些库是依赖其他的库的,当我们使用的是cocoapods上的代码库只需要

s.dependency 'UlePayBaseSDK', "~> 1.0.0"

当我们使用SVN路径上的库时,当然也需要这句话,但是你会发现,有错误。因为这时候并没有cocoapods缓存在本地的库,所以在工程文件podfile地方需要先pod该库

pod'UleSecurityKit', :svn =>"...UleSecurityKit/",:tag =>"1.0.0"

相信大家都发现了,这样比起官方的pod代码来说,多了这一个主动pod的动作。需要注意




===============================================

回复网友的疑问事例

===============================================

这是一个简单的事例,我这里UleShareSDK就是一个分享的集成库,当我需要QQ分享、微博分享、微信分享的时候,另外在SVN中存有它们不同版本的SDK,这个是引用工程的podfile里写的。

使用cocoapods管理svn路径下库文件_第8张图片

你可能感兴趣的:(使用cocoapods管理svn路径下库文件)