嵌套的Cocoa Touch框架

6
我正在寻找一个方法来生产具有子框架且在运行时不会互相干扰的框架。下面的插图最能描述这个想法。
假设每个JSON解析器框架的版本都与其他版本不兼容。
我一直在尝试很多方法来实现上述目标,但每次都失败了。最有希望的方法是伞形框架,但不仅苹果公司不鼓励使用它们(我不清楚为什么),而且它们似乎没有按预期工作。
问题是,如果我创建一个嵌入了A框架的应用程序,该框架本身嵌入了JSON解析器1.0,所有的东西都看起来很正常。但是,一旦我将JSON解析器3.0添加到应用程序中,并将应用程序链接到它,A框架就开始在运行时使用JSON解析器3.0而不是位于其中的1.0,如果它们彼此不兼容,这可能会破坏A框架
添加B框架也是如此,但在运行时选择哪个实现似乎是随机的。
是否可以创建一个嵌入了JSON解析器1.0,并且在这种情况下是安全可用的A框架?我很难相信没有办法实现这一点,但我找不到让它正常工作的方法,并开始怀疑是否可能做到:(

在接收方框架中,我没有找到“嵌入式二进制文件”,只有在接收方应用程序中,你是如何解决这个问题的?我想要实现“应用程序 < 框架1 < 框架2”的结构。 - János
1个回答

2
您没有提供有关如何构建框架的详细信息,因此这只是一次瞎猜。
我假设您嵌入的框架“动态库安装名称基础”设置为@rpath。然后,在您嵌入的框架中,从“运行路径搜索路径”设置中删除与@executable_path相关的选项(这是应用程序,这就是它首先找到“全局”框架的原因)。这应该使事情按您的期望工作。
另一个方法是考虑将您正在使用的3个版本的框架捆绑在一个单个框架束中。
最后,您还可以考虑手动链接(请参见this post,其中定义了_loadPluginAtLocation方法)。
希望这能有所帮助。

谢谢您的建议!我会尽快查看。除非在您的回答中找到解决方案,否则我将准备一个示例项目来演示我想要实现的内容和方法。 - Bartek Chlebek
一个示例项目会很好地解决这个问题...但我希望你可以通过构建设置来修复它... - sergio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接