Cocoapods:Podfile 有两个具有相同名称但不同来源的 pods 冲突
Cocoapods: Podfile conflicts by having two pods with the same name but different source
我有自己的私人规格存储库,内部 pods。我曾经为 pods 添加前缀,但现在我要迁移到 Swift 我想摆脱它们。
但是,如果我去掉前缀(例如 JAMNetworking 到 Networking)并在 Podfile 中指定两个来源,我就会遇到冲突,因为 Networking 是来自主存储库的现有 public pod。我知道一个可能的解决方案是在每个 pod 旁边指定 git 存储库 url,但是为每个 pod 添加 url 对我来说很烦人,所以我正在寻找一个优雅的解决方案.我有一些想法,但其中 none 似乎可行:
A)为source添加名称,为每个pod指定source名称,例如
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 视为有效而忽略另一个...因此在这种情况下它将安装 public 一个。如果我在安装后切换然后卸载 public 并安装内部的。
C) 创建多个目标。它返回有关同名多个目标的错误。
您认为有没有可能找到一个优雅的解决方案而不为每个 pod 添加 url 或避免添加前缀?
目前最好的解决办法是保留你的前缀。考虑
a) 人们普遍认为,最佳做法是让您的 pod 与其公开的 Swift 模块
同名
b) Swift 模块不能 link 到另一个名称重复的模块
...这使得如何管理重复的 pod 名称的问题变得没有实际意义。
埃里卡·萨顿 came to the same conclusion here。直到其中提出的反向 DNS 标识符之类的东西成为现实,
Package names need to be clear and specific, yes, but they should avoid terms that will overlap because when you have a package called SwiftString and every Bob, Jane, and Harry also has a package called SwiftString, name collisions are inevitable...
And, until then, prefer SadunSwiftString to SwiftString and avoid the issue from the start.
坚持使用前缀,因为这里真正的问题是 Swift 缺少模块级别以上的命名空间。到解决这个问题时,毫无疑问,我们都将使用 SPM!
我有自己的私人规格存储库,内部 pods。我曾经为 pods 添加前缀,但现在我要迁移到 Swift 我想摆脱它们。
但是,如果我去掉前缀(例如 JAMNetworking 到 Networking)并在 Podfile 中指定两个来源,我就会遇到冲突,因为 Networking 是来自主存储库的现有 public pod。我知道一个可能的解决方案是在每个 pod 旁边指定 git 存储库 url,但是为每个 pod 添加 url 对我来说很烦人,所以我正在寻找一个优雅的解决方案.我有一些想法,但其中 none 似乎可行:
A)为source添加名称,为每个pod指定source名称,例如
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 视为有效而忽略另一个...因此在这种情况下它将安装 public 一个。如果我在安装后切换然后卸载 public 并安装内部的。
C) 创建多个目标。它返回有关同名多个目标的错误。
您认为有没有可能找到一个优雅的解决方案而不为每个 pod 添加 url 或避免添加前缀?
目前最好的解决办法是保留你的前缀。考虑
a) 人们普遍认为,最佳做法是让您的 pod 与其公开的 Swift 模块
同名b) Swift 模块不能 link 到另一个名称重复的模块
...这使得如何管理重复的 pod 名称的问题变得没有实际意义。
埃里卡·萨顿 came to the same conclusion here。直到其中提出的反向 DNS 标识符之类的东西成为现实,
Package names need to be clear and specific, yes, but they should avoid terms that will overlap because when you have a package called SwiftString and every Bob, Jane, and Harry also has a package called SwiftString, name collisions are inevitable...
And, until then, prefer SadunSwiftString to SwiftString and avoid the issue from the start.
坚持使用前缀,因为这里真正的问题是 Swift 缺少模块级别以上的命名空间。到解决这个问题时,毫无疑问,我们都将使用 SPM!