嵌套的Cocoa Touch框架

Bar*_*bek 6 xcode cocoa-touch frameworks ios

我正在寻找一种方法来生成具有子框架的框架,这些框架在运行时不会相互干扰.下最佳地描述了这个想法.

在此输入图像描述

假设每个版本的JSON Parser框架与另一个版本不兼容.

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

会发生什么,如果我创建一个嵌入式框架A的应用程序,它本身嵌入了JSON Parser框架v1.0,似乎一切正常.但是,只要我将JSON Parser框架v3.0添加到App并将App链接到它,Framework A就会在运行时开始使用JSON Parser框架v3.0,而不是驻留在其中的v1.0.并假设他们是互不兼容,这可以打破框架.

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

是否可以创建具有嵌入式JSON Parser框架v1.0的Framework A,并且在这种情况下可以安全使用?我发现很难相信没有办法实现这一点,但我找不到办法让它发挥作用,并开始想知道它是否实际上是可能的:(

ser*_*gio 2

您没有提供有关如何构建框架的详细信息,因此这只是一个猜测。

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

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

最后,您还可以考虑手动链接(请参阅这篇文章,其中_loadPluginAtLocation定义了该方法)。

希望这可以帮助。