前言
雖然網(wǎng)上有不少Artifactory 搭建CocoaPod私服的文章芦鳍,但不少文章都缺少步驟嚷往,包括官方的文檔(官方鏈接請見文章結(jié)尾),導致服務(wù)端配置好怜校,本機鏈接配置间影、上傳、獲取等操作不成功茄茁;或者本機部署JFrog Artifactory服務(wù)魂贬,配置、上傳裙顽、獲取也有一些采坑的地方付燥;經(jīng)與JFrog Artifactory 官方技術(shù)人員兩天的調(diào)試,終于本機部署調(diào)試成功愈犹,公司測試服務(wù)器部署bug解決键科,故此記錄部署過程闻丑,也一并記錄踩過的坑,讓新入手的同學避免再次入坑勋颖。
痛點
目前的 CocoaPod 私服嗦嗡,很多公司使用 Git 倉庫進行搭建,這導致的問題是饭玲,CocoaPod 的構(gòu)建產(chǎn)出物通常較大侥祭,上傳到 Git 倉庫時,會導致 Git? 倉庫持續(xù)增大茄厘, Git Clone 的速度大大降低矮冬,進而導致軟件部署,交付的時間變長次哈,影響了研發(fā)上線的效率胎署。
?不僅如此,您可能還需要為安卓的開發(fā)者搭建 Gradle 倉庫窑滞,Java 開發(fā)者搭建 Maven 私服琼牧,容器團隊搭建 Docker 私服,各個私服獨立維護葛假,占用大量系統(tǒng)資源障陶,維護成本呈幾何指數(shù)增長。
JFrog Artifactory 能夠解決這個問題聊训,通過搭建 Artifactory,能夠在內(nèi)網(wǎng)建立統(tǒng)一全語言的私有制品倉庫恢氯,支持 CocoaPod带斑,Gradle,Maven勋拟,Docker 等等勋磕。程序員通過 Artifactory 可以實現(xiàn)全語言的依賴下載,并且可以將構(gòu)建產(chǎn)出物上傳到 Artifactory 進行管理敢靡。
一挂滓、選擇并創(chuàng)建私服類型,創(chuàng)建入口有兩個:
?創(chuàng)建入口一:
創(chuàng)建入口二:
建議選擇第二重啸胧,因為第一種一種類型只能創(chuàng)建一個赶站,第二種,例如local私服纺念,可以創(chuàng)建多個
二贝椿、cocoapod-local庫的創(chuàng)建
創(chuàng)建完成后,打開并進入設(shè)置頁面
輸入密碼后的頁面:
三陷谱、接下來進入正題烙博,Cocoapod-local 私服的配置、使用、注意點
1渣窜、執(zhí)行下面命令铺根,安裝 cocoapod-art 插件
gem install cocoapods-art
2、?打開/Users/用戶名/下的.netrc文件(.netrc文件默認是隱藏文件)乔宿,將彈框中的內(nèi)容復制添加得到.netrc文件中夷都,
machine 127.0.0.1
login admin
password AKCp5fTjaZcUbhrRdJ1TYdf6xADy2qzmiZBRxokDBD5hhhr6RcWmYj9eZiUWRr2YvPwdBcYQj
坑:一定要用命令行,直接用文本編輯打開予颤,復制粘貼進去囤官,pod install的時候會一直提示 401權(quán)限錯誤,沒有得到授權(quán)蛤虐,但雙擊用文本編輯打開党饮,授權(quán)也寫了,未起作用驳庭。
vim .netrc
在命令行中刪除已有并粘貼進去刑顺。
3、執(zhí)行下面命令饲常,等待完成提示出現(xiàn)“Successfully added repo cocoapods-remote”蹲堂。
pod repo-art add cocoapods-local "http://127.0.0.1:8081/artifactory/api/pods/cocoapods-local"
4、使用下面命令壓縮pod包贝淤,pod包中包含 項目代碼 or framework柒竞、boundle,以及.podspec or .podspec.json:
COPYFILE_DISABLE=1 tar czvf 壓縮后名稱.tar.gz 待壓縮文件名稱
例如:COPYFILE_DISABLE=1 tar czvf DSCommontEnum-0.1.5.tar.gz DSCommontEnum
.podspec文件示例:
# Be sure to run `pod lib lint DSCommontEnum.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
? s.name? ? ? ? ? ? = 'DSCommontEnum'
? s.version? ? ? ? ? = '0.1.5'
? s.summary? ? ? ? ? = '道上枚舉'
# This description is used to generate tags and improve search results.
#? * Think: What does it do? Why did you write it? What is the focus?
#? * Try to keep it short, snappy and to the point.
#? * Write the description between the DESC delimiters below.
#? * Finally, don't worry about the indent, CocoaPods strips it!
? s.description? ? ? = <<-DESC
公共的枚舉庫
? ? ? ? ? ? ? ? ? ? ? DESC
? s.homepage? ? ? ? = 'http://10.20.7.105/Component-based/DSCommontEnum'
? # s.screenshots? ? = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
? s.license? ? ? ? ? = { :type => 'MIT', :file => 'LICENSE' }
? s.author? ? ? ? ? = { 'vvex' => 'zhoutianyu@lionbridgecapital.cn' }
? # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
? s.ios.deployment_target = '8.0'
? s.source_files = 'DSCommontEnum/Classes/**/*.h'
? #s.dependency 'DSVersionUpdate','0.1.5'
? #s.dependency 'AFNetworking','4.0.0'
end
引用庫必須是local私服或者Remote私服已有的庫播聪,必須是引用外部庫示例:
s.dependency 'DSVersionUpdate','0.1.5'
s.dependency 'AFNetworking','4.0.0'
5朽基、使用下面的Artifactory's REST API將 壓縮后名稱.tar.gz 上傳到Local 倉庫。
curl -H 'X-JFrog-Art-Api:' -XPUThttp://127.0.0.1:8081/artifactory/cocoapods-local-new/<TARGET_FILE_PATH> -T
例如:
curl -H 'X-JFrog-Art-Api:AKCp5ekmsg8hGmnUEXxvAqWNL6MERyoiTLGdjprYhxr3jTkiLE1DE7BHmi7VJ1M5Vequ8KVcs' -XPUThttp://127.0.0.1:8081/artifactory/pods-local/DSCommontEnum/0.1.2/-T /Users/shiqiao/Desktop/test/DSCommontEnum-0.1.2.tar.gz
上傳成功截圖:
返回Artifactory平臺离陶,刷新查看已上傳Local私服 私有庫信息
6稼虎、將 Podfile 中添加該源作為 pod 的依賴解析源。
platform:ios,'8.0'inhibit_all_warnings!#use_frameworks!plugin'cocoapods-art',:sources=>[# 指定local倉庫
? 'cocoapods-local-new'
]target'項目名稱'do# 指定pod內(nèi)容 與 版本號pod'壓縮后名稱','0.0.1'end
7招刨、執(zhí)行 pod repo-art update?cocoapods-local-new 更新本地索引信息霎俩,否則直接執(zhí)行pod install會提示找不到引用庫
8、執(zhí)行: pod install
四沉眶、cocoapod-remote庫的創(chuàng)建
五打却、Remote 倉庫使用
1、執(zhí)行下面命令沦寂,安裝 cocoapod-art 插件,在 Local 倉庫使用過程已經(jīng)執(zhí)行学密,不需要再次執(zhí)行
gem install cocoapods-art
2、?打開/Users/用戶名/下的.netrc文件(.netrc文件默認是隱藏文件)传藏,將彈框中的內(nèi)容復制添加得到.netrc文件中;在 Local 倉庫使用過程已經(jīng)執(zhí)行腻暮,不需要再次執(zhí)行
machine 127.0.0.1
login admin
password AKCp5fTjaZcUbhrRdJ1TYdf6xADy2qzmiZBRxokDBD5hhhr6RcWmYj9eZiUWRr2YvPwdBcYQj
3彤守、執(zhí)行下面命令,等待完成提示出現(xiàn)“Successfully added repo cocoapods-remote-news”哭靖。
pod repo-art add cocoapods-remote-news "http://127.0.0.1:8081/artifactory/api/pods/cocoapods-remote-news"
注意:這條命令建立索引具垫,比較耗時間,經(jīng)測試至少需要40分鐘以上试幽,需要同步JFrog索引信息如筝蚕,果瞬間執(zhí)行完畢,肯定是有問題的铺坞;
4、將 Podfile 中添加該源作為 pod 的依賴解析源:
platform:ios,'8.0'inhibit_all_warnings!#use_frameworks!plugin'cocoapods-art',:sources=>['cocoapods-remote-news']target'testProject'dopod'AFNetworking','~> 3.1.0'end
5济榨、執(zhí)行:pod install 或者 執(zhí)行不升級CocoaPods的spec倉庫的方式坯沪。
pod install --verbose --no-repo-update
6、可以看到依賴已經(jīng)被緩存在遠程倉庫
六擒滑、Local 和 Remote庫同時使用
將 Podfile 中添加該源作為 pod 的依賴解析源:
platform:ios,'8.0'inhibit_all_warnings!#use_frameworks!plugin'cocoapods-art',:sources=>['cocoapods-local-new',
'cocoapods-remote-news']target'testProject'dopod'AFNetworking','~> 3.1.0'end
注:如果local庫中有依賴 remote中某個庫腐晾,需要引入 'cocoapods-remote-news',否則pod install 會不成功丐一。
七藻糖、注意事項
1、Local倉庫使用库车,將tar.gz上傳到Local倉庫后巨柒,需要注意查看Local倉庫tar.gz下,是否包含.DS_Store or ._.DS_Stroe or ._xxxxx等隱藏文件凝颇。
.DS_Store是Mac系統(tǒng)保存文件夾自定義屬性的隱藏文件,
._xxxxx是壓縮過程中出現(xiàn)的
如果包含上述文件潘拱,會導致pod install失敗。
解決辦法:1瘪弓、在linux系統(tǒng)下壓縮為tar.gz垫蛆,應該沒有此問題2、在Windows系統(tǒng)下腺怯,使用7-zip工具壓縮為tar.gz3袱饭、在Mac系統(tǒng)下:(1)刪除.DS_Store// 刪除當前文件及子文件夾中的.DS_Store文件find.-name'*.DS_Store'-typef-delete(2)壓縮COPYFILE_DISABLE=1tar czvf 壓縮后名稱.tar.gz 待壓縮文件名稱
2、podspec文件的編寫與cocoapods + git的規(guī)范完全一致呛占。Podspec Syntax Reference
(1)只需要修改homepage部分虑乖,改為四、Local 倉庫使用中晾虑,第5步疹味,-XPUT與-T之間的地址仅叫。
(2)source可以仍為之前cocoapods + git建立私庫的地址,podspec上傳到local倉庫后糙捺,Artifactory會將source內(nèi)容轉(zhuǎn)換成他們自己的地址诫咱。(注:經(jīng)測試source不填寫git地址也是可以的,如:spec.source = { :git => "", :tag => "#{spec.version}" })
3洪灯、向Local 倉庫上傳新版本后坎缭,需要先執(zhí)行下面命令,再執(zhí)行pod install來pod新版本签钩。
pod repo-art update local倉庫名稱
簡單總結(jié):cocoapod-local私服就是團隊自己封裝的私有庫掏呼;cocoapod-remote私服就是 github上的開源三方庫。
參考鏈接:
使用Artifactory 1分鐘搭建 CocoaPod 私服 :https://blog.csdn.net/wangqingjiewa/article/details/85921419
使用 Artifactory 搭建 CocoaPod 私服:http://www.reibang.com/p/c06962f56ca8
JFrog 官方鏈接:https://www.jfrog.com/confluence/display/JFROG/CocoaPods+Repositories