【问题标题】:Nested Cocoa Touch frameworks嵌套的 Cocoa Touch 框架
【发布时间】:2014-12-14 08:17:01
【问题描述】:

我正在寻找一种能够生成具有子框架的框架的方法,这些子框架在运行时不会相互干扰。 下面的插图最好地描述了这个想法。

假设 JSON Parser 框架的每个版本都不兼容

我一直在尝试很多方法来实现上述目标,但每次都失败了。最有希望的是伞形框架,但 Apple 不仅不鼓励使用它们(我不清楚为什么),而且它们似乎也没有按预期工作。

发生的情况是,如果我创建一个嵌入了 Framework A 的应用程序,该应用程序本身嵌入了 JSON Parser framework v1.0,一切似乎都可以正常工作。但是,只要我将 JSON Parser framework v3.0 添加到 App 并将 App 与它链接起来,Framework A 就开始使用 JSON Parser framework v3。 0 在运行时,而不是驻留在其中的 v1.0。并且假设它们彼此不兼容,这可能会破坏 Framework A

添加 Framework B 也是如此,但在运行时选择的实现似乎是随机的。

是否可以创建具有嵌入式 JSON Parser framework v1.0 并且在这种情况下可以安全使用的 Framework A?我很难相信没有办法做到这一点,但我找不到让它工作的方法,并开始怀疑它是否真的可能:(

【问题讨论】:

  • 在收件人框架上我只在收件人应用程序中没有找到Embedded binaries,你是如何解决这个问题的?我想做app < fw_1 < fw_2

标签: ios xcode cocoa-touch frameworks


【解决方案1】:

您没有提供有关如何构建框架的详细信息,因此这只是在黑暗中拍摄。

我假设您将嵌入式框架的“动态库安装名称库”设置设置为@rpath。然后,在您的嵌入框架中,从“运行路径搜索路径”设置中删除@executable_path 相关选项(这是应用程序,这就是它首先找到“全局”框架的原因)。这应该会让事情按您的预期工作。

您可以考虑的另一种方法是将您正在使用的框架的 3 个版本捆绑在 single framework bundle 中。

最后,您还可以考虑手动链接(参见this post,其中定义了_loadPluginAtLocation 方法)。

希望这会有所帮助。

【讨论】:

  • 感谢您的建议!我一有时间就会研究一下。此外,除非我在您的回答中找到解决方案,否则我将准备一个示例项目来展示我想要实现的目标和方法。
  • 一个示例项目可以很好地解决此问题...但我希望您可以使用构建设置进行修复...
猜你喜欢
  • 1970-01-01
  • 2017-06-01
  • 2015-08-26
  • 1970-01-01
  • 2019-02-21
  • 2010-12-23
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多