前言
雖然網(wǎng)上有不少Artifactory 搭建CocoaPod私服的文章,但不少文章都缺少步驟,包括官方的文檔(官方鏈接請見文章結(jié)尾),導(dǎo)致服務(wù)端配置好,本機(jī)鏈接配置、上傳、獲取等操作不成功;或者本機(jī)部署JFrog Artifactory服務(wù),配置、上傳、獲取也有一些采坑的地方;經(jīng)與JFrog Artifactory 官方技術(shù)人員兩天的調(diào)試,終于本機(jī)部署調(diào)試成功,公司測試服務(wù)器部署bug解決,故此記錄部署過程,也一并記錄踩過的坑,讓新入手的同學(xué)避免再次入坑。
痛點(diǎn)

目前的 CocoaPod 私服,很多公司使用 Git 倉庫進(jìn)行搭建,這導(dǎo)致的問題是,CocoaPod 的構(gòu)建產(chǎn)出物通常較大,上傳到 Git 倉庫時,會導(dǎo)致 Git? 倉庫持續(xù)增大, Git Clone 的速度大大降低,進(jìn)而導(dǎo)致軟件部署,交付的時間變長,影響了研發(fā)上線的效率。
?不僅如此,您可能還需要為安卓的開發(fā)者搭建 Gradle 倉庫,Java 開發(fā)者搭建 Maven 私服,容器團(tuán)隊搭建 Docker 私服,各個私服獨(dú)立維護(hù),占用大量系統(tǒng)資源,維護(hù)成本呈幾何指數(shù)增長。

JFrog Artifactory 能夠解決這個問題,通過搭建 Artifactory,能夠在內(nèi)網(wǎng)建立統(tǒng)一全語言的私有制品倉庫,支持 CocoaPod,Gradle,Maven,Docker 等等。程序員通過 Artifactory 可以實(shí)現(xiàn)全語言的依賴下載,并且可以將構(gòu)建產(chǎn)出物上傳到 Artifactory 進(jìn)行管理。
一、選擇并創(chuàng)建私服類型,創(chuàng)建入口有兩個:
?創(chuàng)建入口一:

創(chuàng)建入口二:

建議選擇第二重,因?yàn)榈谝环N一種類型只能創(chuàng)建一個,第二種,例如local私服,可以創(chuàng)建多個
二、cocoapod-local庫的創(chuàng)建



創(chuàng)建完成后,打開并進(jìn)入設(shè)置頁面


輸入密碼后的頁面:


三、接下來進(jìn)入正題,Cocoapod-local 私服的配置、使用、注意點(diǎn)
1、執(zhí)行下面命令,安裝 cocoapod-art 插件
gem install cocoapods-art
2、?打開/Users/用戶名/下的.netrc文件(.netrc文件默認(rèn)是隱藏文件),將彈框中的內(nèi)容復(fù)制添加得到.netrc文件中,
machine 127.0.0.1
login admin
password AKCp5fTjaZcUbhrRdJ1TYdf6xADy2qzmiZBRxokDBD5hhhr6RcWmYj9eZiUWRr2YvPwdBcYQj
坑:一定要用命令行,直接用文本編輯打開,復(fù)制粘貼進(jìn)去,pod install的時候會一直提示 401權(quán)限錯誤,沒有得到授權(quán),但雙擊用文本編輯打開,授權(quán)也寫了,未起作用。
vim .netrc
在命令行中刪除已有并粘貼進(jìn)去。
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://ip地址/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@shiqiao.com' }
? # 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文件默認(rèn)是隱藏文件),將彈框中的內(nèi)容復(fù)制添加得到.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)被緩存在遠(yuǎn)程倉庫

六、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)的
如果包含上述文件,會導(dǎo)致pod install失敗。

解決辦法:1、在linux系統(tǒng)下壓縮為tar.gz,應(yīng)該沒有此問題2、在Windows系統(tǒng)下,使用7-zip工具壓縮為tar.gz3、在Mac系統(tǒng)下:(1)刪除.DS_Store// 刪除當(dāng)前文件及子文件夾中的.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私服就是團(tuán)隊自己封裝的私有庫;cocoapod-remote私服就是 github上的開源三方庫。
參考鏈接:
使用Artifactory 1分鐘搭建 CocoaPod 私服 :https://blog.csdn.net/wangqingjiewa/article/details/85921419
使用 Artifactory 搭建 CocoaPod 私服:http://www.itdecent.cn/p/c06962f56ca8
JFrog 官方鏈接:https://www.jfrog.com/confluence/display/JFROG/CocoaPods+Repositories
前段時間本人有發(fā)布到微信公眾號,本人原創(chuàng)鏈接:https://mp.weixin.qq.com/s/VCwFp9B8ZKoTMq8h8FzCTg