轉(zhuǎn)載請注明出處:
由于公司很多的動態(tài)鏈接庫經(jīng)常更新剪况,經(jīng)常會造成導(dǎo)入的framework版本不是最新报辱,所以選擇創(chuàng)建一個cocoaPods的私有倉庫用來同步最新的包乃正,當(dāng)然對于源碼的同步也是支持的邪媳。
一塌计、創(chuàng)建私有的git倉庫
創(chuàng)建私有倉庫的方法有很多犀勒,由于github是開源社區(qū)摔笤,開源的代碼比較多副女,對于私有的倉庫是收費的蛤高,所以git倉庫的存儲選擇了免費的coding.net,倉庫的作用是存放自身的源碼和一些用到的第三方庫肮塞。
先去https://coding.net注冊一個賬戶襟齿,注冊完畢后在項目選項下新建一個項目。項目創(chuàng)建選項枕赵,選擇私有可以讓git倉庫私有半夷,創(chuàng)建拉取權(quán)限,如果選擇公有則所有的人都可以下載同步代碼絮吵,我這里使用私有。對于協(xié)議的選取涧黄,如果是開源的代碼,可選MIT協(xié)議赋荆。對于gitignore的選取按需選擇笋妥,設(shè)置gitignore可以選擇git同步的時候忽略哪些文件類型。對于README最好勾選創(chuàng)建說明文件窄潭。
創(chuàng)建項目完畢以后春宣,復(fù)制下項目對應(yīng)的git地址。對于項目的拉取可以使用git命令嫉你,我這里使用的是smartgit可視化工具月帝。repository->clone拉取遠程項目。
二幽污、創(chuàng)建podspec
使用cocoaPods的pod install命令時嚷辅,其實是從本地的~/.cocoapods/repos/master(默認隱藏)中的對應(yīng)庫尋找對應(yīng)版本的podspec文件,通過podspec中文件的地址以及信息拉取對應(yīng)的庫距误。當(dāng)我們自己創(chuàng)建cocoapods私有庫的時候則需要自己創(chuàng)建相對應(yīng)的podspec文件簸搞,并且push到遠程的cocoaPods主分支上,當(dāng)其余的使用者使用cocoaPods更新cocoaPods本地分支時候便能拉取到我們新上傳的podspec准潭,然后便能通過podspec文件找到我們上傳的庫趁俊。
首先,我們創(chuàng)建一個自己的podspec文件
打開拉取到的項目惋鹅,項目中應(yīng)該包含README文件则酝,開源協(xié)議LISENCE。我這邊沒有選中協(xié)議所以只有README文件(.gitignore應(yīng)該是隱藏了)闰集。創(chuàng)建podspec文件的方式有兩種:
命令創(chuàng)建:命令行cd到項目目錄下沽讹,使用pod命令'pod spec create CTFramework'創(chuàng)建podspec文件,創(chuàng)建完以后就會在工程目錄下看見CTFramework.podspec文件武鲁,進入修改相關(guān)的屬性
復(fù)制創(chuàng)建:新建文件工程名.podspec文件爽雄,然后下面的podspec文件內(nèi)容復(fù)制進去進行修改,注意#開頭的為注釋行,source_files為指定對應(yīng)目錄下的資源文件沐鼠,由于我這邊只會同步framework而沒有.h和.m文件挚瘟,所以這一行我注釋掉了。關(guān)于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.reibang.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文件后饲梭,把需要上傳到遠程倉庫的文件拖入到項目目錄乘盖,由于我這里只想同步動態(tài)庫,所以這里只拖入了一個動態(tài)鏈接庫憔涉。把當(dāng)前的項目通過smartgit push到遠程git倉庫订框,并且通過下面命令打上tag,注意tag要和podspec文件中的tag要一致
$ git tag 0.0.1
$ git push --tags
制作好本地的podspec文件以后兜叨,我們要先本地驗證下podspec文件是否可用穿扳,使用下面的命令進行驗證衩侥,如果驗證錯誤會有錯誤信息,請根據(jù)錯誤信息修改podspec文件矛物,直到顯示下面的界面表示通過了本地驗證茫死。通過驗證以后重新把項目文件通過smartgit push到遠程git上
pod lib lint
三、push本地的podspec文件到cocoaPods主分支上
使用下面的命令履羞,把本地的podspec文件push到cocoaPods的遠程主分支上
$ pod trunk push --allow-warnings
對于一些警告可以使用命令pod trunk push --allow-warnings去除警告峦萎,如果出現(xiàn)錯誤則需要根據(jù)錯誤提示去修改podspec文件,如果出現(xiàn)下面的界面忆首,那么恭喜骨杂,人生中的第一個私有倉庫已經(jīng)構(gòu)建完畢了?
由于在上傳成功以后本地的cocoaPods主分支也會更新,所以這個時候我們直接能獲取到私有倉庫的內(nèi)容了雄卷。如果在另一臺pc上,我們需要使用下面的方法更新下本地的cocoaPods主分支才能用過pod search 命令搜索到
$ pod repo update
四蛤售、獲取倉庫中的包
故事寫到這里其實已經(jīng)結(jié)束了丁鹉,接下來的內(nèi)容為使用cocoaPods的內(nèi)容。
使用$ pod search CTFramework命令查看本地的cocoaPods主分支上是否已經(jīng)支持我們新建的私有倉庫
進入到目標(biāo)工程中創(chuàng)建podfile文件
$ cd /Users/ctzxh/Desktop/test
$ touch podfile
用xcode打開podfile文件悴能,注意不要用mac自身的文本編輯(半角符號莫名變成全角)揣钦。寫入下面的內(nèi)容后保存退出
target "test" do
pod "CTFramework"
end
最后使用下面的命令pod安裝倉庫內(nèi)容
$ pod install ? ? ? ? (如果是第一次安裝使用)
$ pod update ? ? ?(如果是更新使用)
安裝或者更新成功以后,你的目錄看起來是這個樣子漠酿,以后打開工程請使用test.xcworkspace
就到這兒吧~
注:中間遇到的坑
- ERROR | [iOS] unknown: Encountered an unknown error (Simulator iPhone 4s is not available.) during validation.
驗證庫的時候報錯冯凹,應(yīng)該是最新版的xcode中已經(jīng)沒有了iPhone 4s的模擬器導(dǎo)致,可以更新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 郵箱)宇姚,然后去郵箱驗證下重新執(zhí)行pod trunk push命令即可
如果podspec已經(jīng)推送到遠程,但是使用pod search命令不能搜到上傳的庫夫凸,可以使用
rm ~/Library/Caches/CocoaPods/search_index.json刪除索引浑劳,然后再使用pod search,等一會兒就能出現(xiàn)了
pod install 安裝庫失敗 certificate issued for a different hostname, issuer is not trusted
打開終端(實用工具 –>終端)夭拌,在終端中輸入如下命令(注意url更換成你的url地址):
svn ls https://xxxxxx
然后會出現(xiàn)一個服務(wù)器證書的提示魔熏,根據(jù)提示輸入 “p”,然后回車鸽扁,問題就可以得到解決了蒜绽。之后可能需要輸入對應(yīng)svn的賬號或者密碼