Artifactory 搭建 CocoaPod 私服-踩坑記錄

前言

雖然網(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容