具有依赖关系的iOS框架

我创build了两个iOS框架

他们都完美编译

我的结构如下:

iPadProject - framework1 - framework2 

所以Framework2包含在framework1中,而framework1包含在实际的iPad项目中

所以我的问题是,如果我将两个framework1和framework2添加到我的iPadProject它不会编译,因为它抱怨从framework2重复的符号(这是合乎逻辑的,因为它已经包含在framework1)

但是,如果我只包括framework1到我的iPadProject,当我从framework1访问一个方法,轮到他从framework2访问一个方法崩溃的应用程序与“信号SIGABRT”

不要嵌套静态库,包括iOS框架。 正如你所看到的,它会导致严重的问题(当两个框架各自拥有自己的版本时,会导致更多的问题)。 最后的链接步骤应该链接所有需要的库; 静态库不应该链接其他静态库。 没有很好的方法来自动化这个; 它只是框架文档的一部分。

但是,您不应该获取运行时exception,因为无法链接框架。 您应该得到链接时间失败,指示该符号未定义。 如果你遇到了崩溃,这表明你在链接上做了一些奇怪的事情。

问题是,因为它现在是嵌套的,所以链接器将f2链接到f1 – 但是只有f1所需的f2的部分。

喜欢

f2有5个符号(f2_1 – 5)
f1使用f2_1和f2_2而不是3,4,5
=>链接器把它扔掉

现在应用程序需要f2_3,f2_4和f2_5,但它们不在那里……但在编译时没有人知道。


现在你试着通过链接应用程序与f2再次解决它,但像以前一样没有人在编译时链接器优化了f2_3 – 5,他们被认为是在f1,所以是重复的!


解决这个Rob Napier已经提到的方法。 不要嵌套框架 (主要不是静态的/第三部分)

解决方法是将f1链接到f2时将-all_load传递给链接器!