我们创建了一个IOS框架,该框架可以分发给各个人。但是现在我们遇到了一个有趣的问题。我们在框架中使用了protobuf,我们的一位客户开始使用Expo Kit,该工具包最近也包含了protobuf,现在我们的客户崩溃了:
Class Foo is implemented in both ... One of the two will be used. Which one is undefined.
我们不能使用Cocoapods Protobuf-ios,因为它已经过时了。
我唯一想到的选择是在不包含此客户端的protobuf文件的情况下构建框架。因此,我们的框架将使用其Expo Kit profobuf文件。我该如何在Xcode中执行此操作,或者是否有替代解决方案。
编辑:
我想实现的目标,但似乎并不能正确解决。我想发布没有Protobuf.a文件的Framework。 Protobuf.a必须依赖于客户端应用程序。
答案 0 :(得分:2)
您需要有一个dynamic
链接到该程序包,除非有必要,否则请避免在您的框架中嵌入第三方二进制文件。
查看这些文章,希望对您有所帮助
https://theswiftdev.com/2018/01/25/deep-dive-into-swift-frameworks/ https://www.bignerdranch.com/blog/it-looks-like-you-are-trying-to-use-a-framework/
这也很有趣:
When should we use "embedded binaries" rather than "Linked Frameworks" in Xcode?
答案 1 :(得分:2)
如果Protobuf已嵌入/链接包含Protobuf的框架,则无需在客户端应用程序中链接Protobuf。
在客户端应用程序中,您可以提供Protobuf嵌入框架内部的路径。您只需修改客户端应用程序的Framework Search Path
,并提供嵌入到框架内的protobuf的路径。