cocoapods是什么?別問(wèn)我
現(xiàn)在cocoapods的普及無(wú)需多說(shuō),本文也不詳述它的心路歷程,有興趣的讀者可以自行Google相關(guān)資料。好了閑話不多說(shuō),進(jìn)入正題。
都在用的東西能不能更好用?
當(dāng)我們首次使用cocoapods管理工程里面引用的開(kāi)源庫(kù)時(shí),那感覺(jué)如沐春風(fēng)、久旱甘霖都不算夸張。但奈何公司使用的是svn管理代碼,時(shí)間久了,就有一些類(lèi)似分享的小集成、數(shù)據(jù)統(tǒng)計(jì)的之類(lèi)的小代碼,它們都在svn上,每次新工程需要引用的時(shí)候。額,真煩,要拖這么多文件,真煩要引用的庫(kù)都沒(méi)說(shuō)明白。。。
這時(shí)候就在想,要是引用公司的代碼也能像Github上一樣就爽了,今天和大家一起學(xué)習(xí)下吧。
其實(shí)在cocoapods官網(wǎng)是有說(shuō)明的,是支持svn的,不光svn,還有其他地方托管的git,本地的代碼庫(kù)都是可以的,說(shuō)白了source只是一個(gè)地址。

我是這么做的!
第一步,把svn的代碼check out到本地,cd到該目錄下,使用pod命令創(chuàng)建一個(gè)podspec文件。
$ pod spec create DemoLibrary
第二步,打開(kāi)文件,看看里面的東西。
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"
這個(gè)設(shè)置是我已經(jīng)改了的設(shè)置,和默認(rèn)的設(shè)置有一些地方不一樣,其中name是你的庫(kù)名,version是版本號(hào),description是要求有必須寫(xiě)點(diǎn)東西的,license的文件可以隨便找一個(gè)修改下放到目錄下,關(guān)鍵的還是source、source_files、exclude_files我待會(huì)兒說(shuō),framework或frameworks就是庫(kù)需要引入的framework這個(gè)功能是極好的,dependency添加依賴的開(kāi)源庫(kù),也是方便至極。
第三步,source內(nèi)容
當(dāng)我們用的svn時(shí)候
s.source? ? ? = { :svn => "http://svn.baidu.com/baidu/mobileclient/iPhone/BaiduCodeLibrary/DemoLibrary/" }
細(xì)心的你應(yīng)該發(fā)現(xiàn)了在默認(rèn)的時(shí)候是有一個(gè)tags的存在的,我這里因?yàn)槲覀兡莻€(gè)svn沒(méi)有加這些東西,我就刪掉了。
這樣做有一個(gè)缺點(diǎn),我們的庫(kù)用于是獲取這個(gè)地址下最新的那套代碼,這個(gè)問(wèn)題,以后研究下吧。
地址我是瞎寫(xiě)的。
s.source_files? = "Classes", "Classes/**/*.{h,m}"
當(dāng)你按照上面的形式操作了,發(fā)現(xiàn)你下載下來(lái)的代碼只是一個(gè)空的文件夾,關(guān)鍵就在source_files,這個(gè)指定了要Classes文件下的文件,這樣做有什么好處么?當(dāng)然有,試想一下,你的路徑是一個(gè)完整的工程,你只需要傳實(shí)用的代碼,這樣做能夠讓你的工程不受影響,隨意debug。
第四步,這樣的路徑就是正確的!

好了一切就緒,現(xiàn)在只需要把你的svn剛才的修改上傳一下,使用pod install。
第五步,為什么會(huì)報(bào)錯(cuò)?
Authentication realm: ?R&D Source Code Repositories
其實(shí)你svn的check out代碼的時(shí)候需要輸入賬戶和密碼,這里可以在終端先隨意check out一下代碼,就會(huì)有緩存,重新再執(zhí)行下就ok了。
1、checkout
svn checkout svn地址,簡(jiǎn)寫(xiě): svn co svn地址

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

這是test工程的pod文件內(nèi)容,和podspce文件的svn地址是一樣的。
第六步,沒(méi)有tag管理好不像樣
===============================================
補(bǔ)充關(guān)于tag設(shè)置
===============================================
設(shè)置tag其實(shí)還是很簡(jiǎn)單的,我這里使用的是cornrstone管理svn代碼。由于的我的文件目錄以前是沒(méi)有這個(gè)trunk和tags文件夾設(shè)置的,這里呢我需要在DemoLibrary目錄下新建一個(gè)tags文件夾

然后呢在cornrstone的控制臺(tái),選到工程路徑注意不是本地的,是svn的,然后選擇頂部tag選項(xiàng)。不要忘了在podspce文件里修改你將設(shè)置成的版本!


彈出一個(gè)框框

使用工程的應(yīng)用pod文件:
pod'UleNetWork', :svn =>"http://svn.baidu.com/baidu/mobileclient/iPhone/BaiduCodeLibrary/DemoLibrary/",:tag =>"1.0.1"
好了,完美!
----------------------------------------------------------------------------
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 20160829 補(bǔ)充
----------------------------------------------------------------------------
當(dāng)tag版本未改變,修改了本地代碼,需要清除pod緩存在本地的內(nèi)容并且需要將pod file文件中引用該庫(kù)注釋先刪除,再添加執(zhí)行兩次pod install,否則不會(huì)使用新代碼。(~/Library/Caches/CocoaPods/Pods/External)
說(shuō)明pod在本地有緩存,需要清除,并且只用該工程中的pod移除過(guò)之后,再次添加時(shí)才會(huì)去都去更新。
----------------------------------------------------------------------------
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?20160913 補(bǔ)充SVN庫(kù)之間的引用
----------------------------------------------------------------------------
在使用cocoapods的過(guò)程中不難發(fā)現(xiàn),有一些庫(kù)是依賴其他的庫(kù)的,當(dāng)我們使用的是cocoapods上的代碼庫(kù)只需要
s.dependency 'UlePayBaseSDK', "~> 1.0.0"
當(dāng)我們使用SVN路徑上的庫(kù)時(shí),當(dāng)然也需要這句話,但是你會(huì)發(fā)現(xiàn),有錯(cuò)誤。因?yàn)檫@時(shí)候并沒(méi)有cocoapods緩存在本地的庫(kù),所以在工程文件podfile地方需要先pod該庫(kù)
pod'UleSecurityKit', :svn =>"...UleSecurityKit/",:tag =>"1.0.0"
相信大家都發(fā)現(xiàn)了,這樣比起官方的pod代碼來(lái)說(shuō),多了這一個(gè)主動(dòng)pod的動(dòng)作。需要注意
===============================================
回復(fù)網(wǎng)友的疑問(wèn)事例
===============================================
這是一個(gè)簡(jiǎn)單的事例,我這里UleShareSDK就是一個(gè)分享的集成庫(kù),當(dāng)我需要QQ分享、微博分享、微信分享的時(shí)候,另外在SVN中存有它們不同版本的SDK,這個(gè)是引用工程的podfile里寫(xiě)的。
