Artifactory 搭建 CocoaPod 私服-踩坑记录

前言

虽然网上有不少Artifactory 搭建CocoaPod私服的文章,但不少文章都缺少步骤,包括官方的文档(官方链接请见文章结尾),导致服务端配置好,本机链接配置、上传、获取等操作不成功;或者本机部署JFrog Artifactory服务,配置、上传、获取也有一些采坑的地方;经与JFrog Artifactory 官方技术人员两天的调试,终于本机部署调试成功,公司测试服务器部署bug解决,故此记录部署过程,也一并记录踩过的坑,让新入手的同学避免再次入坑。

痛点


目前的 CocoaPod 私服,很多公司使用 Git 仓库进行搭建,这导致的问题是,CocoaPod 的构建产出物通常较大,上传到 Git 仓库时,会导致 Git? 仓库持续增大, Git Clone 的速度大大降低,进而导致软件部署,交付的时间变长,影响了研发上线的效率。

?不仅如此,您可能还需要为安卓的开发者搭建 Gradle 仓库,Java 开发者搭建 Maven 私服,容器团队搭建 Docker 私服,各个私服独立维护,占用大量系统资源,维护成本呈几何指数增长。


JFrog Artifactory 能够解决这个问题,通过搭建 Artifactory,能够在内网建立统一全语言的私有制品仓库,支持 CocoaPod,Gradle,Maven,Docker 等等。程序员通过 Artifactory 可以实现全语言的依赖下载,并且可以将构建产出物上传到 Artifactory 进行管理。

一、选择并创建私服类型,创建入口有两个:

?创建入口一:

创建入口二:

建议选择第二重,因为第一种一种类型只能创建一个,第二种,例如local私服,可以创建多个

二、cocoapod-local库的创建

创建完成后,打开并进入设置页面

输入密码后的页面:

三、接下来进入正题,Cocoapod-local 私服的配置、使用、注意点

1、执行下面命令,安装 cocoapod-art 插件

gem install cocoapods-art

2、?打开/Users/用户名/下的.netrc文件(.netrc文件默认是隐藏文件),将弹框中的内容复制添加得到.netrc文件中,

machine 127.0.0.1

login admin

password AKCp5fTjaZcUbhrRdJ1TYdf6xADy2qzmiZBRxokDBD5hhhr6RcWmYj9eZiUWRr2YvPwdBcYQj

坑:一定要用命令行,直接用文本编辑打开,复制粘贴进去,pod install的时候会一直提示 401权限错误,没有得到授权,但双击用文本编辑打开,授权也写了,未起作用。

vim .netrc

在命令行中删除已有并粘贴进去。

3、执行下面命令,等待完成提示出现“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内容 与 版本号pod'压缩后名称','0.0.1'end

7、执行 pod repo-art update?cocoapods-local-new 更新本地索引信息,否则直接执行pod install会提示找不到引用库

8、执行: pod install

四、cocoapod-remote库的创建

五、Remote 仓库使用

1、执行下面命令,安装 cocoapod-art 插件,在 Local 仓库使用过程已经执行,不需要再次执行

gem install cocoapods-art

2、?打开/Users/用户名/下的.netrc文件(.netrc文件默认是隐藏文件),将弹框中的内容复制添加得到.netrc文件中;在 Local 仓库使用过程已经执行,不需要再次执行

machine 127.0.0.1

login admin

password AKCp5fTjaZcUbhrRdJ1TYdf6xADy2qzmiZBRxokDBD5hhhr6RcWmYj9eZiUWRr2YvPwdBcYQj

3、执行下面命令,等待完成提示出现“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"

注意:这条命令建立索引,比较耗时间,经测试至少需要40分钟以上,需要同步JFrog索引信息如,果瞬间执行完毕,肯定是有问题的;

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、执行:pod install 或者 执行不升级CocoaPods的spec仓库的方式。

pod install --verbose --no-repo-update

6、可以看到依赖已经被缓存在远程仓库

六、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系统保存文件夹自定义属性的隐藏文件,

._xxxxx是压缩过程中出现的

如果包含上述文件,会导致pod install失败。

解决办法:1、在linux系统下压缩为tar.gz,应该没有此问题2、在Windows系统下,使用7-zip工具压缩为tar.gz3、在Mac系统下:(1)删除.DS_Store// 删除当前文件及子文件夹中的.DS_Store文件find.-name'*.DS_Store'-typef-delete(2)压缩COPYFILE_DISABLE=1tar czvf 压缩后名称.tar.gz 待压缩文件名称

2、podspec文件的编写与cocoapods + git的规范完全一致。Podspec Syntax Reference

(1)只需要修改homepage部分,改为四、Local 仓库使用中,第5步,-XPUT与-T之间的地址。

(2)source可以仍为之前cocoapods + git建立私库的地址,podspec上传到local仓库后,Artifactory会将source内容转换成他们自己的地址。(注:经测试source不填写git地址也是可以的,如:spec.source = { :git => "", :tag => "#{spec.version}" })

3、向Local 仓库上传新版本后,需要先执行下面命令,再执行pod install来pod新版本。

pod repo-art update local仓库名称

简单总结:cocoapod-local私服就是团队自己封装的私有库;cocoapod-remote私服就是 github上的开源三方库。

参考链接:

使用Artifactory 1分钟搭建 CocoaPod 私服 :https://blog.csdn.net/wangqingjiewa/article/details/85921419

使用 Artifactory 搭建 CocoaPod 私服:http://08643.cn/p/c06962f56ca8

JFrog 官方链接:https://www.jfrog.com/confluence/display/JFROG/CocoaPods+Repositories

前段时间本人有发布到微信公众号,本人原创链接:https://mp.weixin.qq.com/s/VCwFp9B8ZKoTMq8h8FzCTg

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352