【问题标题】:Cocoapods: Podfile conflicts by having two pods with the same name but different sourceCocoapods:Podfile 冲突,因为两个 pod 名称相同但来源不同
【发布时间】:2016-11-02 07:16:27
【问题描述】:

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

但是,如果我去掉前缀(例如 JAMNetworking 到 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 或避免添加前缀是否可以找到一个优雅的解决方案?

【问题讨论】:

    标签: ios cocoapods podspec podfile


    【解决方案1】:

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

    a) 人们普遍认为,最佳做法是让您的 pod 与其公开的 Swift 模块命名相同

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

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

    埃丽卡萨顿came to the same conclusion here。直到其中提出的反向 DNS 标识符之类的东西通过,

    包名需要明确和具体,是的,但它们应该避免重叠的术语,因为当你有一个名为 SwiftString 的包并且每个 Bob、Jane 和 Harry 也有一个名为 SwiftString 的包时,名称冲突是不可避免的。 ..

    在此之前,更喜欢 SadunSwiftString 而不是 SwiftString,并从一开始就避免这个问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      相关资源
      最近更新 更多