Cocoapods:Podfile因两个具有相同名称但来源不同的pod而发生冲突

时间:2016-06-30 09:24:07

标签: ios cocoapods podspec podfile

我有自己的内部pod的私有规范存储库。我曾经为pod添加前缀,但是现在我正在迁移到Swift我想摆脱它们。

然而,如果我摆脱了前缀(例如JAMNetworking to Networking)并且我在Podfile中指定了两个源,我就会遇到冲突,因为Networking是来自主存储库的现有公共pod。我知道一个可能的解决方案是在每个pod旁边指定git存储库url,但是为我添加每个pod的url很烦人,所以我正在寻找一个优雅的解决方案。我有一些想法,但它们似乎都不起作用:

A)为源添加名称并指定每个pod的源名称,例如

source 'master', 'https://github.com/CocoaPods/Specs.git'
source 'internal', 'https://myurl.git'

pod 'samePodName', 'master'
pod 'samePodName', 'internal'

B)使用内部指定的源创建两个定义:

def publicPods
    source 'master', 'https://github.com/CocoaPods/Specs.git'
    pod 'samePodName'
end

def internalPods
    source 'internal', 'https://myurl.git'
    pod 'samePodName'
end

target 'MyProject' do
    publicPods
    internalPods
end

不幸的是,这只会将其中一个def视为有效而忽略另一个...所以在这种情况下它会安装公共的。如果我在安装后切换,则卸载公用的并安装内部的。

C)创建多个目标。它返回了一个有关同名多个目标的错误。

您是否认为可以在不添加每个pod的url或避免添加前缀的情况下找到优雅的解决方案?

1 个答案:

答案 0 :(得分:2)

目前优雅的解决方案是保留您的前缀。考虑

a)人们普遍认为,最佳做法是将您的pod命名为与其暴露的Swift模块相同的名称

b)Swift模块可能无法链接到具有重复名称的另一个模块

...这使得如何管理重复的pod名称的问题变得毫无疑问。

Erica Sadun came to the same conclusion here。直到其中提出的反向DNS标识符之类的东西成为过去,

  

软件包名称必须清晰明确,是的,但是它们应该避免重叠的条款,因为当你有一个名为SwiftString的软件包并且每个Bob,Jane和Harry也有一个名为SwiftString的软件包时,名称冲突是不可避免的。 ..

     

并且,在此之前,喜欢SadunSwiftString到SwiftString并从一开始就避免这个问题。

坚持使用前缀,因为这里真正的问题是Swift在模块级别之上缺少命名空间。在我们解决之前,我们都将使用SPM,毫无疑问!