【问题标题】:How to exclude a library out of framework when distributing it?分发时如何将库排除在框架之外?
【发布时间】:2019-03-08 12:53:58
【问题描述】:

我们创建了一个分发给不同人的 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 文件的情况下分发我的框架。 Protobuf.a 必须依赖于客户端应用程序。

【问题讨论】:

  • protobuf 在你的框架之外是否可见?
  • @HereTrix 你的意思是 protobuf 在框架之外是可见的吗?也许这会回答你的问题。我们有一个 Protobuf 的静态库。我希望构建我的框架,以便静态库成为一个依赖项,但如果没有捆绑包中包含的静态库,我似乎无法构建我的框架。它一直将它包含在我的框架中。我确实尝试使用库搜索路径,而不是将其链接或嵌入到我的框架中。
  • 尝试在 Link Binary with Libraries in Build Phases 中将其标记为可选
  • @TibinThomas 我试过了。

标签: ios xcode frameworks


【解决方案1】:

您是否考虑过迁移到另一个维护得更好的 Protobuf 框架,例如 Apple 的框架(Swift 的奖励积分)。

https://github.com/apple/swift-protobuf

希望对你有帮助 ;-)

【讨论】:

  • 我没有采用这个解决方案。就我而言,这对我没有帮助。但在这一点上,它似乎是其他人的唯一选择。我最终完全删除了 Protobuf 并使用了 JSON。我给了你一票。
  • 好吧,很抱歉,它没有太大帮助。希望你最终能找到更好的解决方案。
【解决方案2】:

您需要有一个指向包的dynamic 链接,并避免在您的框架中嵌入第 3 方二进制文件,除非有必要。

查看这些文章,希望它们对您有所帮助:

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?

【讨论】:

  • 我确实遇到了第一篇文章。你的第三篇文章很有趣。我想我明白我需要做什么,但如何去做是我的问题。我只需要有人解释或指出我如何实现它的正确方向。我尝试了很多东西,但无法得到它。我的框架不断在构建文件中添加我的 Protobuf.a 文件。
【解决方案3】:

如果客户端应用程序已经嵌入/链接了包含 Protobuf 的框架,则无需在客户端应用程序中链接 Protobuf。

在您的客户端应用程序中,您可以提供嵌入框架内的 Protobuf 的路径。您只需修改客户端应用程序的Framework Search Path 并提供嵌入框架内的protobuf 的路径。

【讨论】:

  • 不确定您是否不理解我的问题。我们不想在我们的客户端应用程序中链接 Protobuf。客户正在使用 Expo Kit,它也有 Protobuf,现在与我们的框架发生冲突。我想要实现的是构建没有内部链接 Protobuf 的框架。
  • 您确定不想在您的框架中嵌入您的 Protobuf 版本吗?因为在这种情况下,应用程序可能有相互冲突的要求,例如您的框架和其他一些框架所需的不同版本的 Protobuf。
  • @AndreyKuznetsov 是的,这就是我们首先嵌入库的原因,现在 Expo kit 也这样做了,现在我们的类发生了冲突。
  • 好的。也许这个问题可以引导你如何避免这种影响stackoverflow.com/q/31781301/979822
猜你喜欢
  • 1970-01-01
  • 2017-05-09
  • 2017-04-21
  • 2013-04-12
  • 2013-05-02
  • 2010-11-18
  • 1970-01-01
  • 2015-05-20
  • 2015-03-18
相关资源
最近更新 更多