2016-12-15 65 views
4

在我们公司,我们的工作背后是一个代理。这就是为什么我们将Artifactory加入到我们的工具链中的原因之一。Artifactory Cocoapods缓存

一切似乎都很不错,远程存储库已经下载了master.tar.gz和所有podspecs,并将podspecs中的源URL改为Artifactory URL,从现在开始它们应该被加载。但问题出现了:

  1. 只有源为“http”时,URL才会更改为“git”源,源未更改。我们遇到这个问题的例子是“GoogleMaps”窗格。
  2. 如上所述,我们在代理之后,并且此窗格“GoogleMaps”的安装不起作用,因为我们无法绕过代理服务器。
  3. 即使我们可以这样做一次,我也会期待Artifactory缓存吊舱,就像它与其他吊舱一样。这可以解决问题,但不完全,但至少从现在起,开发人员可以访问缓存版本。但“http”源不会被缓存,我不知道为什么。

该屏幕截图显示了其他使用过的pod是如何缓存的,但不是GoogleMaps的。

Artifactory Cache

因此,如果有人经历了同样的问题,甚至解决了这个问题,这将是惊人的,如果你能帮助我。

回答

7

这里的问题实际上不是'git'urls与'http'urls,因为Artifactory知道如何在提供索引时处理两者。 它的工作方式是,Artifactory实际上会重新编写索引中的URL,并将其返回给客户端,以指向您的实例,然后将实例下载,缓存并将客户端提供给客户端 - 您可以看到在本地索引回购客户端创建在Mac上(通常在~/.cocoapods/repos/<repo_name>

你有remote repo指向github.com只有这么artifactory的替换这些网址(http://或混帐://,没关系) - 原因是远程的端点是github.com,它只能查询它的下载请求。

就你的情况而言,Google Maps窗格的下载URL指向https://dl.google.com/geosdk/googlemaps-ios-1.0.1.zip例如,so Artifactory不会尝试更改网址,因为它不指向github。

我想你真正想要的是一种类似于我们用Bower的dependency re-write做的机制 - 但是Cocoapods这个功能尚未可用。不过,欢迎您提交功能请求,但您可以在我们的support portal中完成。

作为一种解决方法,我建议您手动下载您的构建所需的任何pod(我猜这是一个有限的列表)将它们部署到本地cocoapods存储库(或复制已从远程存储的那些存储库缓存存储库到本地),并指出你的客户。
它将能够提供所需的豆荚,就像您从远程回购获得它们一样。

+0

嘿fundelman,谢谢。我看到了网址的重写,这是我预期的方式,但找不到官方文档。关于我在本地仓库中的复制:我已经在想这件事了,但是因为远程cocoapods仓库中的白名单不适用于我,请参阅[link](http:// stackoverflow。com/questions/41180460/artifactory-cocoapods-include-white-list),这会导致重复的豆荚。因此,只要我们解决白名单上的问题,这是工作只是完美的:) – choli

+0

@choli - 回答你的其他问题,以及好运:) – danf

+0

嗨@choli:是否有一个关于“Cocoapods依赖项重写支持“来投票/宣传它(我没有在[RTFACT](https://www.jfrog.com/jira/browse/RTFACT)中找到它)?使用一些常见的Google组件(如_GoogleMaps_,_GoogleSignIn_,...),此功能将非常有用。非常感谢 –