我收到这个警告:
Class X is implemented in both <framework> and <application> one of the two will be used, which one is undefined
Run Code Online (Sandbox Code Playgroud)
这个警告在网络上有很多内容,但我没有发现任何可以解决我遇到的具体问题的内容.
脚本
我已经构建了MyFramework和MyApplication(作为MyFramework的测试/演示应用程序).
MyFramework使用CocoaPod(我将其称为CoolPod),我也想在MyApplication中使用它(并且假设MyFramework的消费者也是合理的).
我需要能够将MyFramework分发为.framework(用于封闭源代码).但是,这意味着MyFramework将CoolPod嵌入其编译库中.
现在当我将MyFramework和CoolPod导入MyApplication时,我得到了这个冲突(输出上面显示的警告),因为CoolPod的类已经包含在MyFramework的库中(因为嵌入了CoolPod).
所以我们有这个结构:
CoolPod -> MyFramework \
MyApplication
CoolPod /
Run Code Online (Sandbox Code Playgroud)
题
我该如何避免这种冲突?
我曾考虑在MyApplication中包含CoolPod的头文件(但不包括它的lib),但这对于一个简单的案例来说似乎过于复杂.
非常感谢任何帮助,这实在是在阻止我.
谢谢,
靛青
上下文
我们正在开发一个大型软件平台,其中包括Android,Server,Web和iOS(以及其他人).为了使我们的所有代码保持最新状态,我们将它们全部保存在一个Master repo中(这非常重要,因为我们在所有平台上共享模型,因此提交可能会影响许多不同的平台).
为了处理iOS方面,我们决定将项目分解为模块化pod,以便我们可以轻松地在其他库(也包括pod)中共享它们,因此当我们发布时,我们的客户很容易将我们的api包含在其中他们现有的项目(即我们希望使用cocoapods结构获得cocoapods提供的所有好处).
为了实现这一目标,我已经为每个项目设置了私有规格仓库和pod规格.
tl; dr:我们有一个主git repo,它包含我们所有的代码(多个平台,包括多个不同的pod).我们希望保留此结构,但也能够从repo中的代码创建pod.
题
我遇到的问题是我可以找到的pod规范的所有文档说你必须使用这种格式:
spec.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git',
:tag => spec.version.to_s }
让我兴奋的唯一部分是我们的repo不仅包含一个pod(更不用说iOS代码了).
有可能做这样的事情:
spec.source = { :git => 'https://github.com/MyCompany/Master/MyCompanyCoreDir',
:tag => spec.version.to_s }
我们非常感谢任何帮助
干杯
靛青
嗨,我在当前的项目中使用泛型.但是,我遇到了一个问题:
我需要一个通用函数foo<T>,以便能够使用特定类型获取符合通用协议的参数.
例如在Java中,我可以这样做:
public interface Proto<B> {
public void SomeFunction()
}
public class SampleClass {
}
public class Conforms extends Proto<SampleClass> {
@Override
public void SomeFunction () {}
}
public class TestingClass {
public void Requires (Proto<SampleClass> param) {
// I can use param
}
}
Run Code Online (Sandbox Code Playgroud)
我如何Requires()在Swift中执行相同的功能?我知道你在Swift中使用typealias协议进行泛型.如何根据typealias?约束参数?